diff --git a/.codespellignore b/.codespellignore index c305ceb85..4e872e52b 100644 --- a/.codespellignore +++ b/.codespellignore @@ -7,7 +7,9 @@ nd readby serie upto +afterall # Names nin noe +manuel diff --git a/.gitignore b/.gitignore index b37e36601..97ef7bf6c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +/dist + ### OSX ### .DS_Store .AppleDouble @@ -83,8 +85,12 @@ front/yarn-debug.log* front/yarn-error.log* front/tests/unit/coverage front/tests/e2e/reports +front/test_results.xml +front/coverage/ front/selenium-debug.log docs/_build +#Tauri +front/tauri/gen /data/ .env @@ -104,3 +110,9 @@ tsconfig.tsbuildinfo # Vscode .vscode/ + +# Nix +.direnv/ +.envrc +flake.nix +flake.lock diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b51f56dfc..387c58100 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -118,21 +118,16 @@ review_docs: - if: $CI_PIPELINE_SOURCE == "merge_request_event" changes: [docs/**/*] - image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 - variables: - BUILD_PATH: "../docs-review" + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 environment: name: review/docs/$CI_COMMIT_REF_NAME url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/docs-review/index.html cache: *docs_cache before_script: - - mkdir docs-review - cd docs - - apt-get update - - apt-get install -y graphviz - - poetry install + - make install script: - - poetry run python3 -m sphinx . $BUILD_PATH + - make build BUILD_DIR=../docs-review artifacts: expire_in: 2 weeks paths: @@ -149,7 +144,6 @@ find_broken_links: --cache --no-progress --exclude-all-private - --exclude-mail --exclude 'demo\.funkwhale\.audio' --exclude 'nginx\.com' --exclude-path 'docs/_templates/' @@ -236,7 +230,7 @@ test_api: image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11"] + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"] services: - name: postgres:15-alpine command: @@ -253,7 +247,7 @@ test_api: CACHE_URL: "redis://redis:6379/0" before_script: - cd api - - poetry install --all-extras + - make install script: - > poetry run pytest @@ -293,6 +287,7 @@ test_front: coverage_report: coverage_format: cobertura path: front/coverage/cobertura-coverage.xml + coverage: '/All files\s+(?:\|\s+((?:\d+\.)?\d+)\s+){4}.*/' build_metadata: stage: build @@ -317,7 +312,9 @@ test_integration: - if: $RUN_CYPRESS interruptible: true - image: cypress/base:18.12.1 + image: + name: cypress/included:13.6.4 + entrypoint: [""] cache: - *front_cache - key: @@ -354,7 +351,7 @@ build_api_schema: API_TYPE: "v1" before_script: - cd api - - poetry install --all-extras + - make install - poetry run funkwhale-manage migrate script: - poetry run funkwhale-manage spectacular --file ../docs/schema.yml @@ -372,19 +369,13 @@ build_docs: - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ - changes: [docs/**/*] - image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.11 - variables: - BUILD_PATH: "../public" - GIT_STRATEGY: clone - GIT_DEPTH: 0 + image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11 cache: *docs_cache before_script: - cd docs - - apt-get update - - apt-get install -y graphviz - - poetry install + - make install script: - - ./build_docs.sh + - make build-all BUILD_DIR=../public artifacts: expire_in: 2 weeks paths: @@ -439,6 +430,25 @@ build_api: paths: - api +build_tauri: + stage: build + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + - changes: [front/**/*] + + image: $CI_REGISTRY/funkwhale/ci/node-tauri:18 + variables: + <<: *keep_git_files_permissions + before_script: + - source /root/.cargo/env + - yarn install + script: + - yarn tauri build --verbose + artifacts: + name: desktop_${CI_COMMIT_REF_NAME} + paths: + - front/tauri/target/release/bundle/appimage/*.AppImage + deploy_docs: interruptible: false extends: .ssh-agent @@ -471,22 +481,23 @@ docker: variables: BUILD_ARGS: > --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 - --set *.no-cache + --no-cache --push - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ variables: BUILD_ARGS: > --set *.platform=linux/amd64,linux/arm64,linux/arm/v7 - --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH - --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,oci-mediatypes=false + --set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false --push - - if: $CI_PIPELINE_SOURCE == "merge_request_event" + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "funkwhale" + # We don't provide priviledged runners to everyone, so we can only build docker images in the funkwhale group variables: BUILD_ARGS: > --set *.platform=linux/amd64 - --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME + --set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME,oci-mediatypes=false image: $CI_REGISTRY/funkwhale/ci/docker:20 services: @@ -517,3 +528,24 @@ docker: name: docker_metadata_${CI_COMMIT_REF_NAME} paths: - metadata.json + +package: + stage: publish + needs: + - job: build_metadata + artifacts: true + - job: build_api + artifacts: true + - job: build_front + artifacts: true + - job: build_tauri + artifacts: true + rules: + - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/ + + image: $CI_REGISTRY/funkwhale/ci/python:3.11 + variables: + <<: *keep_git_files_permissions + script: + - make package + - scripts/ci-upload-packages.sh diff --git a/.gitlab/renovate.json b/.gitlab/renovate.json index 0b8e75237..a4e7ec774 100644 --- a/.gitlab/renovate.json +++ b/.gitlab/renovate.json @@ -25,6 +25,16 @@ "branchConcurrentLimit": 0, "prConcurrentLimit": 0 }, + { + "matchBaseBranches": ["develop"], + "matchUpdateTypes": ["major"], + "prPriority": 2 + }, + { + "matchBaseBranches": ["develop"], + "matchUpdateTypes": ["minor"], + "prPriority": 1 + }, { "matchUpdateTypes": ["major", "minor"], "matchBaseBranches": ["stable"], @@ -35,12 +45,6 @@ "matchBaseBranches": ["stable"], "enabled": false }, - { - "matchUpdateTypes": ["patch", "pin", "digest"], - "matchBaseBranches": ["develop"], - "automerge": true, - "automergeType": "branch" - }, { "matchManagers": ["npm"], "addLabels": ["Area::Frontend"] @@ -70,6 +74,10 @@ ], "fileFilters": ["changes/changelog.d/postgres.update"] } + }, + { + "matchPackageNames": ["python"], + "rangeStrategy": "widen" } ] } diff --git a/.gitpod.yml b/.gitpod.yml index b634d541c..993afaf10 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -14,11 +14,12 @@ tasks: docker-compose up -d poetry env use python - poetry install + make install gp ports await 5432 poetry run funkwhale-manage migrate + poetry run funkwhale-manage fw users create --superuser --username gitpod --password funkwhale --email test@example.org poetry run funkwhale-manage gitpod init command: | echo "MEDIA_URL=`gp url 8000`/media/" >> ../.gitpod/.env @@ -47,49 +48,66 @@ tasks: yarn install command: yarn dev --host 0.0.0.0 --base ./ + - name: Documentation + before: cd docs + init: make install + command: make dev + - name: Welcome to Funkwhale development! env: COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml ENV_FILE: /workspace/funkwhale/.gitpod/.env VUE_EDITOR: code DJANGO_SETTINGS_MODULE: config.settings.local - init: pre-commit install + init: | + pre-commit install + pre-commit run --all command: | - pre-commit run --all && clear echo "" echo -e " ⠀⠀⠸⣿⣷⣦⣄⣠⣶⣾⣿⠇⠀⠀ You can now start developing Funkwhale with gitpod!" echo -e " ⠀⠀⠀⠈⠉⠻⣿⣿⠟⠉⠁⠀⠀⠀" echo -e " \u1b[34m⣀⠀⢀⡀⢀⣀\u1b[0m⠹⠇\u1b[34m⣀⡀⢀⡀⠀⣀ \u1b[0mTo sign in to the superuser account," echo -e " \u1b[34m⢻⣇⠘⣧⡈⠻⠶⠶⠟⢁⣾⠃⣸⡟ \u1b[0mplease use these credentials:" echo -e " \u1b[34m⠀⠻⣦⡈⠻⠶⣶⣶⠶⠟⢁⣴⠟⠀" - echo -e " \u1b[34m⠀⠀⠈⠻⠷⣦⣤⣤⣴⠾⠟⠁⠀⠀ gitpod\u1b[0m:\u1b[34mgitpod" + echo -e " \u1b[34m⠀⠀⠈⠻⠷⣦⣤⣤⣴⠾⠟⠁⠀⠀ gitpod\u1b[0m:\u1b[34mfunkwhale" echo "" ports: - - port: 8000 + - name: Funkwhale + port: 8000 visibility: public onOpen: notify - - port: 5000 + - name: Funkwhale API + port: 5000 visibility: private onOpen: ignore - - port: 5432 + - name: PostgreSQL + port: 5432 visibility: private onOpen: ignore - - port: 5678 + - name: Debugpy + port: 5678 visibility: private onOpen: ignore - - port: 6379 + - name: Redis + port: 6379 visibility: private onOpen: ignore - - port: 8080 + - name: Frontend + port: 8080 visibility: private onOpen: ignore + - name: Documentation + port: 8001 + visibility: public + onOpen: notify + vscode: extensions: - Vue.volar diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile index 7236a7e3e..899bd8520 100644 --- a/.gitpod/Dockerfile +++ b/.gitpod/Dockerfile @@ -1,9 +1,13 @@ -FROM gitpod/workspace-full:2022-11-15-17-00-18 +FROM gitpod/workspace-full:2023-10-25-20-43-33 USER gitpod RUN sudo apt update -y \ && sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y -RUN pip install poetry pre-commit \ +RUN pyenv install 3.11 && pyenv global 3.11 + +RUN brew install neovim + +RUN pip install poetry pre-commit jinja2 towncrier \ && poetry config virtualenvs.create true \ && poetry config virtualenvs.in-project true diff --git a/.gitpod/docker-compose.yml b/.gitpod/docker-compose.yml index 9b764307d..62b5f5930 100644 --- a/.gitpod/docker-compose.yml +++ b/.gitpod/docker-compose.yml @@ -18,7 +18,6 @@ services: - 6379:6379 nginx: - command: /entrypoint.sh env_file: - ./.env image: nginx @@ -29,15 +28,16 @@ services: environment: - "NGINX_MAX_BODY_SIZE=100M" - "FUNKWHALE_API_IP=host.docker.internal" + - "FUNKWHALE_API_HOST=host.docker.internal" - "FUNKWHALE_API_PORT=5000" - "FUNKWHALE_FRONT_IP=host.docker.internal" - "FUNKWHALE_FRONT_PORT=8080" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}" + - "FUNKWHALE_PROTOCOL=https" volumes: - - ../data/media:/protected/media:ro + - ../data/media:/workspace/funkwhale/data/media:ro - ../data/music:/music:ro - - ../data/staticfiles:/staticfiles:ro + - ../data/staticfiles:/usr/share/nginx/html/staticfiles/:ro - ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro - - ../docker/nginx/conf.dev:/etc/nginx/nginx.conf.template:ro - - ../docker/nginx/entrypoint.sh:/entrypoint.sh:ro + - ../docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro - ../front:/frontend:ro diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 34b7285bb..ae2fc6994 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -53,18 +53,18 @@ repos: - id: isort - repo: https://github.com/pycqa/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 - repo: https://github.com/pre-commit/mirrors-prettier - rev: v3.0.2 + rev: v3.0.3 hooks: - id: prettier files: \.(md|yml|yaml|json)$ - repo: https://github.com/codespell-project/codespell - rev: v2.2.5 + rev: v2.2.6 hooks: - id: codespell additional_dependencies: [tomli] diff --git a/CHANGELOG.md b/CHANGELOG.md index cf8fd7f77..530210158 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,193 @@ This changelog is viewable on the web at https://docs.funkwhale.audio/changelog. +## 1.4.0 (2023-12-12) + +Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html + +Features: + +- Add a management command to generate dummy notifications for testing +- Add atom1.0 to node info services (#2085) +- Add basic cypress testing +- Add NodeInfo 2.1 (#2085) +- Add support for Funkwhale UI library. +- Add support for Python 3.12 +- Allow moderators to set moderation languages (#2085) +- Allow to set the instances server location (#2085) +- Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) +- Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) +- Generate all nginx configurations from one template +- New management command to update Uploads which have been imported using --in-place and are now + stored in s3 (#2156) +- Only allow MusicBrainz tagged file on a pod (#2083) +- Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI + entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) + +Enhancements: + +- Add custom logging functionality (#2155) +- Adding typesense container and api client (2104) +- Cache pip package in api docker builds (#2193) +- Connect loglevel and debug mode (#1538) +- Get api version from python package +- Log service worker registration error and add a warning about Firefox SW incompatibility in development mode +- Maintain api version using poetry +- Maloja: Submit album artists and duration and allow to disable server side metadata fixing +- Replace pytz with zoneinfo in the API +- Speed up linting and type-checking by using cache +- Split front large bundles into smaller chunks +- Support boolean config fields in plugins + +Bugfixes: + +- `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command. +- Avoid troi radio to give duplicates (#2231) +- Do not cache all requests to avoid missing updates #2258 +- Fix broken nginx templates for docker setup (#2252) +- Fix help messages for running scripts using funkwhale-manage +- Fix missing og meta tags (#2208) +- Fix multiarch docker builds #2211 +- Fix regression that prevent static files from being served in non-docker-deployments (#2256) +- Fixed an issue where the copy button didn't copy the Embed code in the embed modal. +- Fixed an issue with the nginx templates that caused issues when connecting to websockets. +- Fixed development docker setup (2102) +- Fixed development docker setup (2196) +- Fixed embedded player crash when API returns relative listen URL. (#2163) +- Fixed issue with regular expression in embed. +- Make Artist ordering by name case insensitive +- Make sure build requirements for ujson are met +- Make sure embed codes generated before 1.3.0 are still working +- Make sure funkwhale_api package and metadata are available for docs +- Make sure meta tags link to embedded player correctly +- Merge nginx configs for docker production and development setups (#1939) +- Updated links to the Funkwhale website in the UI. (#2235) +- Use correct data field for rate limiting identity field (#2248) + +Documentation: + +- Add missing `has_mbid` requirement to quality filter spec. +- Add spec for user following. +- Added CoC link to nodeinfo endpoint spec. +- Added multi-artist support spec. +- Added new collections spec. +- Added NodeInfo 2.1 specification +- Archived the pre-1.0 changelog +- Updated nodeinfo spec to include usage statistics. +- Updated the Nodeinfo 2 spec to address feedback from implementation. + +Other: + +- Add build metadata script +- Don't run CI on branch containing stable or develop +- Fix CI deploy docs job after stable branch merge +- Format api container file +- Lint api code using pylint +- Make renovate not pinning the python version to the latest one +- Rename CHANGELOG to CHANGELOG.md +- Replace docs scripts with make +- Rework the CI pipeline +- Use buildx bake in docker job + +Removal: + +- Drop support for python3.7 +- This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend + updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended. + +Contributors to our Issues: + +- AMoonRabbit +- Alexandra Parker +- ChengChung +- Ciarán Ainsworth +- Georg Krause +- Ghost User +- Johann Queuniet +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos Peña +- Mathieu Jourdan +- Nicolas Derive +- Virgile Robles +- jooola +- petitminion +- theit8514 + +Contributors to our Merge Requests: + +- AMoonRabbit +- Alexander Dunkel +- Alexander Torre +- Ciarán Ainsworth +- Georg Krause +- JuniorJPDJ +- Kasper Seweryn +- Kay Borowski +- Marcos Peña +- Mathieu Jourdan +- Philipp Wolfer +- Virgile Robles +- interfect +- jooola +- petitminion + +Committers: + +- Aitor +- Alexander Dunkel +- alextprog +- Aznörth Niryn +- Ciarán Ainsworth +- dignny +- drakonicguy +- Fun.k.whale Trad +- Georg krause +- Georg Krause +- Jérémie Lorente +- jo +- jooola +- josé m +- Julian-Samuel Gebühr +- JuniorJPDJ +- Kasper Seweryn +- Marcos Peña +- Mathieu Jourdan +- Matteo Piovanelli +- Matyáš Caras +- MhP +- omarmaciasmolina +- petitminion +- Philipp Wolfer +- ppom +- Quentin PAGÈS +- rinenweb +- Thomas +- Transcriber allium + +## 1.3.4 (2023-11-16) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Bugfixes: + +- Remove dangling dependency howler + +Documentation: + +- Fix a redirect loop on documentation for moderators + +Contributors to our Merge Requests: + +- Georg Krause +- Thomas + +Committers: + +- Georg Krause + ## 1.3.3 (2023-09-07) Upgrade instructions are available at @@ -1559,3345 +1746,3 @@ Contributors to this release (translation, development, documentation, reviews, - Ventura Pérez García - vicdorke - Xosé M - -## 0.21.2 (2020-07-27) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added a new ?related=obj_id filter for artists, albums and tracks, based on tags -- Can now filter subscribed content through API (#1116) -- Support ordering=random for artists, albums, tracks and channels endpoints (#1145) -- Use role=alert on forms/toast message to improve accessibility (#1134) - -Bugfixes: - -- Fix embedded player not working on channel series/album (#1175) -- Fixed broken mimetype detection during import (#1165) -- Fixed crash when loading recent albums via Subsonic (#1158) -- Fixed crash with null help text in admin (#1161) -- Fixed invalid metadata when importing multi-artists tracks/albums (#1104) -- Fixed player crash when using Funkwhale as a PWA (#1157) -- Fixed wrong convert art displaying in some situations (#1138) -- Make channel card updated times more humanly readable, add internationalization (#1089) - -Contributors to this release (development, documentation, reviews): - -- Agate -- Bheesham Persaud -- Ciarán Ainsworth - -## 0.21.1 (2020-06-11) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Features: - -- Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721) - -Enhancements: - -- Added new channels widget on pod landing page (#1113) -- Fix HTML not including instance name in some situations (#1107) -- Make URL-building logic more resilient against reverse proxy misconfiguration (#1085) -- Removed unused masonry dependency (#1112) -- Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) -- Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) - -Bugfixes: - -- Added safeguard to ensure local uploads are never purged from cache (#1086) -- Ensure firefox password manager dont autofill username in search bar (#1090) -- Ensure player doesn't disappear when last queue track is removed manually (#1092) -- Ensure tracks linked to skipped upload can be pruned (#1011) -- Fix playlist modal only listing 50 first playlists (#1087) -- Fixed a wording issue on artist channel page (#1117) -- Fixed crash on python 3.5 with cli importer (#1155) -- Fixed issue when displaying starred tracks on subsonic (#1082) -- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads. -- Fixed page not refreshing when switching between My Library and Explore sections (#1091) -- Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) -- Fixed wrong album and track count in admin artist API (#1096) -- Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) - -### Small API breaking change in `/api/v1/libraries` - -To allow easier crawling of public libraries on a pod,we had to make a slight breaking change -to the behaviour of `GET /api/v1/libraries`. - -Before, it returned only libraries owned by the current user. - -Now, it returns all the accessible libraries (including ones from other users and pods). - -If you are consuming the API via a third-party client and need to retrieve your libraries, -use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` - -Contributors to this release (development, documentation, reviews, testing): - -- Agate -- Ciarán Ainsworth -- Creak -- gisforgabriel -- Siren -- Tony Wasserka - -## 0.21 "Agate" (2020-04-24) - -This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 - -We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrations… You made it possible! - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). - -### Channels and podcasts - -Funkwhale 0.21 includes a brand new feature: Channels! - -Channels can be used as a replacement to public libraries, -to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other -fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel -from any of these software. To get started with publication, simply visit your profile and create a channel from there. - -Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod -on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed! - -Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular -to the members of the working group who met every week for months in order to get this done, and the members of other third-party -projects who took the time to work with us to ensure compatibility. - -### Redesigned navigation, player and queue - -This release includes a full redesign of our navigation, player and queue. Overall, it should provide -a better, less confusing experience, especially on mobile devices. This redesign was suggested -14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! - -### Improved search bar for searching remote objects - -The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: - -- Subscribe to a remote library via its URL -- Listen a public track from another pod -- Subscribe to a channel - -### Screening for sign-ups and custom sign-up form - -Instance admins can now configure their pod so that registrations required manual approval from a moderator. This -is especially useful on private or semi-private pods where you don't want to close registrations completely, -but don't want spam or unwanted users to join your pod. - -When this is enabled and a new user register, their request is put in a moderation queue, and moderators -are notified by email. When the request is approved or refused, the user is also notified by email. - -In addition, it's also possible to customize the sign-up form by: - -- Providing a custom help text, in markdown format -- Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods - -### Federated reports - -It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. - -This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. - -### Improved search performance - -Our search engine went through a full rewrite to make it faster. This new engine is enabled -by default when using the search bar, or when searching for artists, albums and tracks. It leverages -PostgreSQL full-text search capabilities. - -During our tests, we observed huge performance improvements after the switch, by an order of -magnitude. This should be especially perceptible on pods with large databases, more modest hardware -or hard drives. - -We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, -you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file. - -### Enforced email verification - -The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification -mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through -the CLI. - -If you enable this, ensure you have a SMTP server configured too. - -### More reliable CLI importer [manual action required] - -Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) - -We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. - -If you use the `import_files` command, this means you should replace scripts that look like this: - -```sh -python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput -``` - -By this: - -```sh -python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput -``` - -And Funkwhale will happily import any supported audio file from the specified directory. - -### User management through the server CLI - -We now support user creation (incl. non-admin accounts), update and removal directly -from the server CLI. Typical use cases include: - -- Changing a user password from the command line -- Creating or updating users from deployments scripts or playbooks -- Removing or granting permissions or upload quota to multiple users at once -- Marking multiple users as inactive - -All user-related commands are available under the `python manage.py fw users` namespace. -Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for -more information and instructions. - -### Progressive web app [Manual action suggested, non-docker only] - -We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience -during offline use, and on mobile devices. - -In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure -the following instruction is present in your nginx configuration: - -```nginx -location /front/ { - # Add the following line in the /front/ location - add_header Service-Worker-Allowed "/"; -} -``` - -### Postgres docker changed environment variable [manual action required, docker multi-container only] - -If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) - -You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust` - -Newer deployments aren't affected. - -### Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] - -With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11. - -In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below: - -```sh -# open a shell as the Funkwhale user -sudo -u funkwhale -H bash - -# move to the funkwhale data directory -# (replace this with your own if you used a different path) -cd /srv/funkwhale/data - -# stop the funkwhale container -docker stop funkwhale - -# backup the database files -cp -r data/ ../postgres.bak - -# Upgrade the database -docker run --rm \ - -v $(pwd)/data:/var/lib/postgresql/10/data \ - -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ - -e PGUSER=funkwhale \ - -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ - tianon/postgres-upgrade:10-to-11 - -# replace the Postgres 10 files with Postgres 11 files -mv data/ postgres-10 -mv upgraded-postgresql/ data -``` - -Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, -you can remove the backups/old files: - -```sh -sudo -u funkwhale -H bash -cd /srv/funkwhale/data -rm -rf ../postgres.bak -rm -rf postgres-10 -``` - -### Full list of changes - -Features: - -- Support for publishing and subscribing to podcasts (#170) -- Brand new navigation, queue and player redesign (#594) -- Can now browse a library content through the UI (#926) -- Federated reports (#1038) -- Screening for sign-ups (#1040) -- Make it possible to enforce email verification (#1039) -- Added a new radio based on another user listenings (#1060) -- User management through the server CLI - -Enhancements: - -- Added ability to reject library follows from notifications screen (#859) -- Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988) -- Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997) -- Added the ability to sort albums by release date (#1013) -- Added two new radios to play your own content or a given library tracks -- Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled -- Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) -- Favor local uploads when playing a track with multiple uploads (#1036) -- Include only local content in nodeinfo stats, added downloads count -- Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947) -- Order the playlist columns by modification date in the Browse tab (#775) -- Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) -- Remember display settings in Album, Artist, Radio and Playlist views (#391) -- Removed unnecessary "Federation music needs approval" setting (#959) -- Replaced our slow research logic by PostgreSQL full-text search (#994) -- Support autoplay when loading embed frame from Mastodon and third-party websites (#1041) -- Support filtering playlist by name and several additional UX improvements in playlists modal (#974) -- Support modifying album cover art through the web UI (#588) -- Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting -- Use same markdown widget for all content fields (rules, description, reports, notes, etc.) -- CLI Importer is now more reliable and less resource-hungry on large libraries -- Add support custom domain for S3 storage -- Better placeholders for channels when there are no episodes or series -- Updated documentation for 0.21 release -- Improved performance and error handling when fetching remote attachments - -Bugfixes: - -- Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961) -- Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985) -- Fixed admin dropdown not showing after login (#1042) -- Fixed an issue with celerybeat container failing to restart (#1004) -- Fixed invalid displayed number of tracks in playlist (#986) -- Fixed issue with recent results not being loaded from the API (#948) -- Fixed issue with sorting by album name not working (#960) -- Fixed short audio glitch when switching switching to another track with player paused (#970) -- Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928) -- More resilient tag parsing with empty release date or album artist (#1037) -- More robust importer against malformed dates (#966) -- Removed "nodeinfo disabled" setting, as nodeinfo is required for the UI to work (#982) -- Replaced PDF icon by List icon in playlist placeholder (#943) -- Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006) -- Set correct size for album covers in playlist cards (#680) -- Remove double spaces in ChannelForm -- Deduplicate tags in Audio ActivityPub representation -- Add support custom domain for S3 storage -- Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075) -- Exclude external podcasts from library home -- Fixed broken channel save when description is too long -- Fixed 500 error when federation is disabled and application+json is requested -- Fixed minor subsonic API crash -- Fixed broken local profile page when allow-list is enabled -- Fixed issue with confirmation email not sending when signup-approval was enabled -- Ensure 0 quota on user is honored -- Fixed attachments URL not honoring media URL -- Fix grammar in msg string in TrackBase.vue -- Fix typo in SubscribeButton.vue - -Translations: - -- Arabic -- Catalan -- English (United Kingdom) -- German -- Hungarian -- Japanese -- Occitan -- Portuguese (Brazil) -- Russian - -Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): - -- Agate -- annando -- Anton Strömkvist -- Audrey -- ButterflyOfFire -- Ciarán Ainsworth -- Creak -- Daniele Lira Mereb -- dashie -- Eloisa -- eorn -- Francesc Galí -- gerhardbeck -- GinnyMcQueen -- guillermau -- Haelwenn -- jinxx -- Jonathan Aylard -- Keunes -- M.G -- marzzzello -- Mathé Grievink -- Mélanie Chauvel -- Mjourdan -- Morgan Kesler -- Noe Gaumont -- Noureddine HADDAG -- Ollie -- Peter Wickenberg -- Quentin PAGÈS -- Renon -- Satsuki Yanagi -- Shlee -- SpcCw -- techknowlogick -- ThibG -- Tony Wasserka -- unklebonehead -- wakest -- wxcafé -- Xaloc -- Xosé M - -## 0.20.1 (2019-10-28) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Denormalized audio permission logic in a separate table to enhance performance - -With this release, we're introducing a performance enhancement that should reduce the load on the database and API -servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). - -Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** -by default, but should be enabled by default starting in Funkwhale 0.21. - -If you want to try it now, add -`MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command: - -```sh -python manage.py rebuild_music_permissions -``` - -This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual -behaviour regarding tracks, albums and artists visibility. - -Enhancements: - -- Added a retry option for failed uploads (#942) -- Added feedback via loading spinner when searching a remote library -- Denormalized audio permission logic in a separate table to enhance performance -- Placeholders will now be shown if no content is available across the application (#750) -- Reduce the number of simultaneous DB connections under some deployment scenario -- Support byYear filtering in Subsonic API (#936) - -Bugfixes: - -- Ensure password input doesn't overflow outside of container (#933) -- Fix audio serving issues under S3/nginx when signatures are enabled -- Fix import crash when importing M4A file with no embedded cover (#946) -- Fix tag exclusion in custom radios (#950) -- Fixed an issue with embed player CSS being purged during build (#935) -- Fixed escaped pod name displayed on home/about page (#945) -- Fixed pagination in subsonic getSongsByGenre endpoint (#954) -- Fixed style glitches in dropdowns - -Documentation: - -- Documented how to create DB extension by hand in case of permission error during migrations (#934) - -Contributors to this release (translation, development, documentation, reviews, design): - -- Ciarán Ainsworth -- Dag Stenstad -- Daniele Lira Mereb -- Agate -- Esteban -- Johannes H. -- knuxify -- Mateus Mattei Garcia -- Quentin PAGÈS - -## 0.20 (2019-10-04) - -Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html - -### Support for genres via tags - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -One of our most requested missing features is now available! - -Starting with Funkwhale 0.20, -Funkwhale will automatically extract genre information from uploaded files and associate it -with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). -Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) -for more information regarding the tagging process. - -Tags can also be associated with artists and albums, and updated after upload through the UI using -the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content -via federation. - -Tags are used in various places to enhance user experience: - -- Tags are listed on tracks, albums and artist profiles -- Each tag has a dedicated page were you can browse corresponding content and quickly start a radio -- The custom radio builder now supports using tags -- Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well - -If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) -and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`. - -### Content and account reports - -It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, -who can review it and delete reported content, block accounts or take any other action they deem necessary. - -By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle -takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, -you can disable anonymous reports completely via your pod settings. - -Federation of the reports will be supported in a future release. - -For more information about this feature, please check out our documentation: - -- [User documentation](https://docs.funkwhale.audio/moderator/reports.html) -- [Moderator documentation](https://docs.funkwhale.audio/users/reports.html) - -### Account deletion - -Users can now delete their account themselves, without involving an administrator. - -The deletion process will remove any local data and objects associated with the account, -but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted -to other known servers on the federation. - -For more information about this feature, please check out our documentation: - -- [User documentation](https://docs.funkwhale.audio/users/account.html) - -### Landing and about page redesign [Manual action suggested] - -In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod -configuration. Among other things, the landing page will now include: - -- your pod and an excerpt from your pod's description -- your pod banner image, if any -- your contact email, if any -- the login form -- the signup form (if registrations are open on your pod) -- some basic statistics about your pod -- a widget including recently uploaded albums, if anonymous access is enabled - -The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before. - -Additionally, the about page now includes: - -- your pod name, description, rules and terms -- your pod banner image, if any -- your contact email, if any -- comprehensive statistics about your pod -- some info about your pod configuration, such as registration and federation status or the default upload quota for new users - -With this redesign, we've added a handful of additional pod settings: - -- Pod banner image -- Contact email -- Rules -- Terms of service - -We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`. - -### Allow-list to restrict federation to trusted domains - -The Allow-Listing feature grants pod moderators -and administrators greater control over federation -by allowing you to create a pod-wide allow-list. - -When allow-listing is enabled, your pod's users will only -be able to interact with pods included in the allow-list. -Any messages, activity, uploads, or modifications to -libraries and playlists will only be shared with pods -on the allow-list. Pods which are not included in the -allow-list will not have access to your pod's content -or messages and will not be able to send anything to -your pod. - -If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)! - -### Periodic message to incite people to support their pod and Funkwhale - -Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. - -If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod. - -Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. - -### Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] - -To improve the performance, stability and reliability of Funkwhale's web processes, -we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: - -- zero-downtime upgrades -- configurable number of web worker processes - -Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. - -To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file -(use a higher number if you want to have more web worker processes). - -Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with -`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}` - -Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`. - -### Content-Security-Policy and additional security headers [manual action suggested] - -To improve the security and reduce the attack surface in case of a successful exploit, we suggest -you add the following Content-Security-Policy to your nginx configuration. - -````{note} -If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers - -```nginx -add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; -``` -```` - -**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`: - -```nginx -server { - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # … existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; - } -} -``` - -Then reload nginx with `systemctl reload nginx`. - -**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`: - -```nginx -server { - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - - location /front/ { - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN"; - # … existing content here - } - - # Also create a new location for the embeds to ensure external iframes work - # Simply copy-paste the /front/ location, but replace the following lines: - location /front/embed.html { - add_header X-Frame-Options "ALLOW"; - alias /frontend/embed.html; - } -} - -``` - -Then reload nginx with `docker-compose restart nginx`. - -### Rate limiting - -With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure -regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. - -For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit -is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. - -You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the -services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. - -### Broken audio streaming when using S3/Minio and DSub [manual action required] - -Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded -to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage -such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location: - -```nginx -# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 -proxy_set_header Authorization ""; -``` - -And reload your nginx process. - -### Detail - -Features: - -- Added periodical message to incite people to support their pod and Funkwhale (#839) -- Admins can now add custom CSS from their pod settings (#879) -- Allow-list to restrict federation to trusted domains (#853) -- Content and account reports (#890) -- Dark theme (#756) -- Enforce a configurable rate limit on the API to mitigate abuse (#261) -- Redesign of the landing and about pages (#872) -- Support for genres, via tags (#432) -- Users can now delete their account without admin intervention (#852) - -Enhancements: - -- Added a info message on embed wizard when anonymous access to content is disabled (#878) -- Added Catalan translation files -- Added Czech translation (#844) -- Added field to manage user upload quota in Django backend (#903) -- Added the option to replace the queue's current contents with a selected album or track (#761) -- Artists with no albums will now show track count on artist card (#895) -- Ensure API urls answer with and without a trailing slash (#877) -- Hardcoded list of supported browsers to avoid unexpected regressions (#854) -- Hardened security thanks to CSP and additional HTTP headers (#880) -- Improve display of search results by including artist and album data -- Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature -- Mods can now change a library visibility through the admin UI (#548) -- New keyboard shortcuts added for enhanced control over audio player (#866) -- Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data -- Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873) -- Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898) -- Prevent usage of too weak passwords (#883) -- Reduced CSS size by 30% using purgecss -- Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862) -- Simplified embedded docker reverse proxy IP configuration (#834) -- Support embeds on public playlists -- Support for M4A/AAC files (#661) -- Switched from Semantic-UI to Fomentic-UI -- Add dropdown menu to track table (#531) -- Display placeholder on homepage when there are no playlists (#892) -- Make album cards height independent (#710) - -Bugfixes: - -- Added context strings to en_GB translations so that picking the language changes the interface as expected -- Ensure selected locale is not reset to browser default when refreshing app -- Fix missing license information on track details page (#913) -- Fix regression to quota bar color (#897) -- Fixed a responsive display issues on 1024px wide screens (#904) -- Fixed album art not being retrieved from Ogg/Opus files -- Fixed broken embedded player layout after dependency update (#875) -- Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL -- Fixed broken less listened radio (#912) -- Fixed broken URL to artist and album on album and track pages (#871) -- Fixed empty contentType causing client crash in some Subsonic payloads (#893) -- Fixed import crashing with empty cover file or too long values on some fields -- Fixed in-place imported files not playing under nginx when filename contains ? or % (#924) -- Fixed remaining transcoding issue with Subsonic API (#867) -- Fixed search usability issue when browsing artists, albums, radios and playlists (#902) -- Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865) -- Updated docs to ensure streaming works when using Minio/S3 and DSub (#932) - -Contributors to this release (translation, development, documentation, reviews, design): - -- Amaranthe -- ButterflyOfFire -- Ciarán Ainsworth -- Agate -- Esteban -- Francesc Galí -- Freyja Wildes -- hellekin -- IISergII -- jiri-novacek -- Johannes H. -- Keunes -- Koen -- Manuel Cortez -- Mehdi -- Mélanie Chauvel -- nouts -- Quentí -- Reg -- Rodrigo Leite -- Romain Failliot -- SpcCw -- Sylke Vicious -- Tobias Reisinger -- Xaloc -- Xosé M - -## 0.19.1 (2019-06-28) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- The currently playing track is now highlighted with an orange play icon (#832) -- Support for importing files with no album tag (#122) -- Redirect from / to /library when user is logged in (#864) -- Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) -- Added button to search for objects on Discogs (#368) -- Added copy-to-clipboard button with Subsonic password input (#814) -- Added opus to the list of supported mimetypes and extensions (#868) -- Aligned search headers with search results in the sidebar (#708) -- Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) -- Favorites radio will not be visible if the user does not have any favorites (#419) - -Bugfixes: - -- Ensure empty but optional fields in file metadata don't error during import (#850) -- Fix broken upload for specific files when using S3 storage (#857) -- Fixed broken translation on home and track detail page (#833) -- Fixed broken user admin for users with non-digit or letters in their username (#869) -- Fixed invalid file extension for transcoded tracks (#848) -- Fixed issue with French translation for "Start radio" (#849) -- Fixed issue with player changing height when hovering over the volume slider (#838) -- Fixed secondary menus truncated on narrow screens (#855) -- Fixed wrong og:image url when using S3 storage (#851) -- Hide pod statistics on about page if those are disabled (#835) -- Use ASCII filename before upload to S3 to avoid playback issues (#847) - -Contributors to this release (committers and reviewers): - -- Ciarán Ainsworth -- Creak -- ealgase -- Agate -- Esteban -- Freyja Wildes -- hellekin -- Johannes H. -- Mehdi -- Reg - -## 0.19.0 (2019-05-16) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Edits on tracks, albums and artists - -Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles -were created from audio file tags, but basically immutable after that (unless you had -admin access to Django's UI, which wasn't ideal to do this kind of changes). - -With this release, everyone can suggest changes on track, album and artist pages. Users -with the "library" permission can review suggested edits in a dedicated interface -and apply/reject them. - -Approved edits are broadcasted via federation, to ensure other instances get the information -too. - -Not all fields are currently modifiable using this feature. Especially, it's not possible -to suggest a new album cover, or reassign a track to a different album or artist. Those will -be implemented in a future release. - -### Admin UI for tracks, albums, artists, libraries and uploads - -As part of our ongoing effort to make Funkwhale easier to manage for instance owners, -this release includes a brand new administration interface to deal with: - -- tracks -- albums -- artists -- libraries -- uploads - -You can use this UI to quickly search for any object, delete objects in batch, understand -where they are coming from etc. This new UI should remove the need to go through Django's -admin in the vast majority of cases (but also includes a link to Django's admin when needed). - -### Artist hiding in the interface - -It's now possible for users to hide artists they don't want to see. - -Content linked to hidden artists will not show up in the interface anymore. Especially: - -- Hidden artists tracks are removed from the current queue -- Starting a playlist will skip tracks from hidden artists -- Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists -- Radio suggestions will exclude tracks from hidden artists -- Hidden artists won't appear in Subsonic apps - -Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. - -### OAuth2 authorization for better integration with third-party apps - -Funkwhale now support the OAuth2 authorization and authentication protocol which will allow -third-party apps to interact with Funkwhale on behalf of users. - -This feature makes it possible to build third-party apps that have the same capabilities -as Funkwhale's Web UI. The only exception at the moment is for actions that requires -special permissions, such as modifying instance settings or moderation (but this will be -enabled in a future release). - -If you want to start building an app on top of Funkwhale's API, please check-out -https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. - -### Better error handling and display during import - -Funkwhale should now be more resilient to missing tags in imported files, and give -you more insights when something goes wrong, including the specific tags that were missing -or invalid, and additional debug information to share in your support requests. - -This information is available in all pages that list uploads, when clicking on the button next to the upload status. - -### Support for S3-compatible storages to store media files - -Storing all media files on the Funkwhale server itself may not be possible or desirable -in all scenarios. You can now configure Funkwhale to store those files in a S3 -bucket instead. - -Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use -this feature. - -### Prune library command - -Users are often surprised by Funkwhale's tendency to keep track, album and artist -metadata even if no associated files exist. - -To help with that, we now offer a `prune_library` management command you can run -to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library). - -### Check in-place files command - -When using in-place import with a living audio library, you'll quite often rename or -remove files from the file system. Unfortunately, Funkwhale keeps a reference to those -files in the database, which results in unplayable tracks. - -To help with that, we now offer a `check_inplace_files` management command you can run -to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database). - -Features: - -- Added albums view. Similar to artists view, it's viewable by clicking on the "Albums" link on the top bar. (#356) -- Allow artists hiding (#701) -- Change the document title to display current track information. (#359) -- Display a confirmation dialog when adding duplicate songs to a playlist (#784) -- Improved error handling and display during import (#252, #718, #583, #501, #544) -- Support embedding full artist discographies (#747) -- Support metadata update on tracks, albums and artists and broadcast those on the federation (#689) -- Support OAuth2 authorization for better integration with third-party apps (#752) -- Support S3-compatible storages for media files (#565) - -Enhancements: - -- [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) -- Added a "load more" button on artist pages to load more tracks/albums (#719) -- Added a `check_inplace_files` management command to remove purge the database from references to in-place imported files that don't exist on disk anymore (#781) -- Added a prune_library management command to remove obsolete metadata from the database (#777) -- Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) -- Added standardized translation context for all strings in the frontend to give accurate hints to translators. -- Added twitter:\* meta tags to detect tracks and albums players automatically on more sites (#578) - Improved responsiveness of embedded player -- Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) -- Better handling of follow/accept messages to avoid and recover from desync between instances (#830) -- Better workflow for connecting to another instance (#715) - - Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. - -- Bumped dependencies to latest versions (#815) -- Descriptions will now be shown underneath user libraries (#768) -- Don't store unhandled ActivityPub messages in database (#776) -- Enhanced the design of the embed wizard. (!619) -- Ensure the footer always stays at the bottom of the page -- Expose an instance-level actor (service@domain) in nodeinfo endpoint (#689) -- Improved readability of logo (#385) -- Keep persistent connections to the database instead of recreating a new one for each request -- Labels for privacy levels are now consistently grabbed from a common source instead of being hardcoded every time they are needed. -- Merged artist/album buttons with title text on artist and album pages (#725) -- Now honor maxBitrate parameter in Subsonic API (#802) -- Preload next track in queue (#572) -- Reduced app size for regular users by moving admin-related code in a dedicated chunk (#805) -- Removed broken/instable lyrics feature (#799) -- Show remaining storage space during import and prevent file upload if not enough space is remaining (#550) -- The buttons displaying an icon now always show a little divider between the icon and the text. (!620) -- Use attributedTo instead of actor in library ActivityPub payload (#619) -- Use network/depends_on instead of links in docker-compose.yml (!716) - -Bugfixes: - -- Add missing command from contributing file (#754) -- Add required envvar for dev environment (!668) -- Added env variable to set AWS region and signature version to serve media without proxy (#826) -- Allow users with dots in their usernames to request a subsonic password (#798) -- Better handling of featuring/multi-artist tracks tagged with MusicBrainz (#782) -- Do not consider tracks as duplicates during import if they have different positions (#740) -- Ensure all our ActivityPub fetches are authenticated (#758) -- Ensure correct track duration and playable status when browsing radios (#812) -- Fixed alignment/size issue with some buttons (#702) -- Fixed an encoding issue with instance name on about page (#828) -- Fixed cover not showing in queue/player when playing tracks from "albums" tab (#795) -- Fixed crashing upload processing on invalid date format (#718) -- Fixed dev command for fake data creation (!664) -- Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824) -- Fixed invalid required fields in Upload django's admin (#819) -- Fixed issue with querying the albums api endpoint (#356) -- Fixed non-transparent background for volume range on Firefox (#722) -- Fixed overflowing input on account detail page (#791) -- Fixed unplayable radios for anonymous users (#563) -- Prevent skipping on file import if album_mbid is different (#772) -- Use proper site name/domain in emails (#806) -- Width of filter menus for radios has been set to stop text from overlapping the borders - -Documentation: - -- Document how to use Redis over unix sockets (#770) - -Contributors to this release (committers and translators): - -- Ale London -- Alexander -- Ben Finney -- ButterflyOfFire -- Ciarán Ainsworth -- Damien Nicolas -- Daniele Lira Mereb -- Agate -- Elza Gelez -- gerry_the_hat -- gordon -- interfect -- jake -- Jee -- jovuit -- Mélanie Chauvel -- nouts -- Pierrick -- Qasim Ali -- Quentí -- Renon -- Rodrigo Leite -- Sylke Vicious -- Thomas Brockmöller -- Tixie -- Vierkantor -- Von -- Zach Halasz - -## 0.18.3 (2019-03-21) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Avoid mixed content when deploying mono-container behind proxy [Manual action required] - -_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_ - -Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker -using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) -when browsing the Web UI. - -This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container -environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container. - -Enhancements: - -- Added title on hover for truncated content (#766) -- Ask for confirmation before leaving upload page if there is a an upload in process (#630) -- Exclude in-place imported files from quota computation (#570) -- Truncate filename in library file table to ensure correct display of the table. (#735) - -Bugfixes: - -- Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) -- Display new notifications immediately on notifications page (#729) -- Ensure cover art from uploaded files is picked up properly on existing albums (#757) -- Fixed a crash when federating a track with unspecified position -- Fixed broken Activity and Actor modules in django admin (#767) -- Fixed broken sample apache configuration (#764) -- Fixed constant and unpredictable reordering during file upload (#716) -- Fixed delivering of local activities causing unintended side effects, such as rollbacking changes (#737) -- Fixed escaping issues in translated strings (#652) -- Fixed saving moderation policy when clicking on "Cancel" (#751) -- i18n: Update page title when changing the App's language. (#511) -- Include disc number in Subsonic responses (#765) -- Do not send notification when rejecting a follow on a local library (#743) - -Documentation: - -- Added documentation on mono-container docker upgrade (#713) -- Added documentation to set up let's encrypt certificate (#745) - -## 0.18.2 (2019-02-13) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -Enhancements: - -- Added a 'fix_federation_ids' management command to deal with protocol/domain issues in federation - IDs after deployments (#706) -- Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) - -Bugfixes: - -- Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) -- Fixed cards display issues on medium/small screens (#707) -- Fixed Embed component name that could lead to issue when developping on OSX (#696) -- Fixed resizing issues for album cards on artist pages (#694) - -## 0.18.1 (2019-01-29) - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html - -### Fix Gzip compression to avoid BREACH exploit [security] [manual action required] - -In the 0.18 release, we've enabled Gzip compression by default for various -content types, including HTML and JSON. Unfortunately, enabling Gzip compression -on such content types could make BREACH-type exploits possible. - -We've removed the risky content-types from our nginx template files, to ensure new -instances are safe, however, if you already have an instance, you need -to double check that your host nginx virtualhost do not include the following -values for the `gzip_types` settings: - -``` -application/atom+xml -application/json -application/ld+json -application/activity+json -application/manifest+json -application/rss+xml -application/xhtml+xml -application/xml -``` - -For convenience, you can also replace the whole setting with the following snippet: - -``` -gzip_types -application/javascript -application/vnd.geo+json -application/vnd.ms-fontobject -application/x-font-ttf -application/x-web-app-manifest+json -font/opentype -image/bmp -image/svg+xml -image/x-icon -text/cache-manifest -text/css -text/plain -text/vcard -text/vnd.rim.location.xloc -text/vtt -text/x-component -text/x-cross-domain-policy; -``` - -Many thanks to @jibec for the report! - -### Fix Apache configuration file for 0.18 [manual action required] - -The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. - -If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following: - -```apache -<Location "/"> - # similar to nginx 'client_max_body_size 100M;' - LimitRequestBody 104857600 - - ProxyPass ${funkwhale-api}/ - ProxyPassReverse ${funkwhale-api}/ -</Location> -``` - -And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way: - -```apache - ProxyPass "/front" "!" - Alias /front /srv/funkwhale/front/dist - - ProxyPass "/media" "!" - Alias /media /srv/funkwhale/data/media - - ProxyPass "/staticfiles" "!" - Alias /staticfiles /srv/funkwhale/data/static -``` - -In case you are using custom css and theming, you also need to match this block: - -```apache2 - ProxyPass "/settings.json" "!" - Alias /settings.json /srv/funkwhale/custom/settings.json - - ProxyPass "/custom" "!" - Alias /custom /srv/funkwhale/custom -``` - -Enhancements: - -- Added name attributes on all inputs to improve UX, especially with password managers (#686) -- Disable makemigrations in production and misleading message when running migrate (#685) -- Display progress during file upload -- Hide pagination when there is only one page of results (#681) -- Include shared/public playlists in Subsonic API responses (#684) -- Use proper locale for date-related/duration strings (#670) - -Bugfixes: - -- Fix transcoding of in-place imported tracks (#688) -- Fixed celery worker defaulting to development settings instead of production -- Fixed crashing Django admin when loading track detail page (#666) -- Fixed list icon alignment on landing page (#668) -- Fixed overescaping issue in notifications and album page (#676) -- Fixed wrong number of affected elements in bulk action modal (#683) -- Fixed wrong URL in documentation for funkwhale_proxy.conf file when deploying using Docker -- Make Apache configuration file work with 0.18 changes (#667) -- Removed potential BREACH exploit because of Gzip compression (#678) -- Upgraded kombu to fix an incompatibility with redis>=3 - -Documentation: - -- Added user upload documentation at https://docs.funkwhale.audio/users/upload.html - -## 0.18 "Naomi" (2019-01-22) - -This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. -Her positivity, love and support have been incredibly helpful and helped shape the project -as you can enjoy it today. Thank you so much Naomi <3 - -Many thanks to the dozens of people that contributed to this release: translators, developers, -bug hunters, admins and backers. You made it possible! - -Upgrade instructions are available at -https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions -marked with `[manual action required]` and `[manual action suggested]`. - -See `Full changelog` below for an exhaustive list of changes! - -### Audio transcoding is back! - -After removal of our first, buggy transcoding implementation, we're proud to announce -that this feature is back. It is enabled by default, and can be configured/disabled -in your instance settings! - -This feature works in the browser, with federated/non-federated tracks and using Subsonic clients. -Transcoded tracks are generated on the fly, and cached for a configurable amount of time, -to reduce the load on the server. - -### Licensing and copyright information - -Funkwhale is now able to parse copyright and license data from file and store -this information. Apart from displaying it on each track detail page, -no additional behaviour is currently implemented to use this new data, but this -will change in future releases. - -License and copyright data is also broadcasted over federation. - -License matching is done on the content of the `License` tag in the files, -with a fallback on the `Copyright` tag. - -Funkwhale will successfully extract licensing data for the following licenses: - -- Creative Commons 0 (Public Domain) -- Creative Commons 1.0 (All declinations) -- Creative Commons 2.0 (All declinations) -- Creative Commons 2.5 (All declinations and countries) -- Creative Commons 3.0 (All declinations and countries) -- Creative Commons 4.0 (All declinations) - -Support for other licenses such as Art Libre or WTFPL will be added in future releases. - -### Instance-level moderation tools - -This release includes a first set of moderation tools that will give more control -to admins about the way their instance federates with other instance and accounts on the network. -Using these tools, it's now possible to: - -- Browse known accounts and domains, and associated data (storage size, software version, etc.) -- Purge data belonging to given accounts and domains -- Block or partially restrict interactions with any account or domain - -All those features are usable using a brand new "moderation" permission, meaning -you can appoint one or multiple moderators to help with this task. - -I'd like to thank all Mastodon contributors, because some of the these tools are heavily -inspired from what's being done in Mastodon. Thank you so much! - -### Iframe widget to embed public tracks and albums [manual action required] - -Funkwhale now supports embedding a lightweight audio player on external websites -for album and tracks that are available in public libraries. Important pages, -such as artist, album and track pages also include OpenGraph tags that will -enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon -or Twitter). - -To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have -to modify your nginx configuration when upgrading to keep your instance working. - -**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace -the `location /api/` and `location /` blocks by the following snippets: - -```nginx -location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; -} - -location /front/ { - alias /frontend/; -} -``` - -The change of configuration will be picked when restarting your nginx container. - -**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, -and replace the `location /api/` and `location /` blocks by the following snippets: - -```nginx -location / { - include /etc/nginx/funkwhale_proxy.conf; - # this is needed if you have file import via upload enabled - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://funkwhale-api/; -} - -location /front/ { - alias ${FUNKWHALE_FRONTEND_PATH}/; -} -``` - -Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, -which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with -`sudo systemctl reload nginx`. - -### Alternative docker deployment method - -Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, -we're now able to provide an alternative and easier Docker deployment method! - -In contrast with our current, multi-container offer, this method integrates -all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container. - -Both methods will coexist in parallel, as each one has pros and cons. You can learn more -about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! - -### Automatically load .env file - -On non-docker deployments, earlier versions required you to source -the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` -This led to more complex and error prone deployment / setup. - -This is not the case anymore, and Funkwhale will automatically load this file if it's available. - -### Delete pre 0.17 federated tracks [manual action suggested] - -If you were using Funkwhale before the 0.17 release and federated with other instances, -it's possible that you still have some unplayable federated files in the database. - -To purge the database of those entries, you can run the following command: - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input -``` - -On non-docker setups: - -```sh -python manage.py script delete_pre_017_federated_uploads --no-input -``` - -### Enable gzip compression [manual action suggested] - -Gzip compression will be enabled on new instances by default -and will reduce the amount of bandwidth consumed by your instance. - -If you want to benefit from gzip compression on your instance, -edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet -in the server block, then reload your nginx server: - -```nginx -server { - # ... - - # compression settings - gzip on; - gzip_comp_level 5; - gzip_min_length 256; - gzip_proxied any; - gzip_vary on; - - gzip_types - application/javascript - application/vnd.geo+json - application/vnd.ms-fontobject - application/x-font-ttf - application/x-web-app-manifest+json - font/opentype - image/bmp - image/svg+xml - image/x-icon - text/cache-manifest - text/css - text/plain - text/vcard - text/vnd.rim.location.xloc - text/vtt - text/x-component - text/x-cross-domain-policy; - # end of compression settings -} -``` - -### Full changelog - -Features: - -- Allow embedding of albums and tracks available in public libraries via an <iframe> (#578) -- Audio transcoding is back! (#272) -- First set of instance level moderation tools (#580, !521) -- Store licensing and copyright information from file metadata, if available (#308) - -Enhancements: - -- Add UI elements for multi-disc albums (#631) -- Added alternative funkwhale/all-in-one docker image (#614) -- Broadcast library updates (name, description, visibility) over federation -- Based Docker image on alpine to have a smaller (and faster to build) image -- Improved front-end performance by stripping unused dependencies, reducing bundle size - and enabling gzip compression -- Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612) -- The progress bar in the player now display loading state / buffer loading (#586) -- Added "type: funkwhale" and "funkwhale-version" in Subsonic responses (#573) -- Documented keyboard shortcuts, list is now available by pressing "h" or in the footer (#611) -- Documented which Subsonic endpoints are implemented (#575) -- Hide invitation code field during signup when it's not required (#410) -- Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present -- Improved keyboard accessibility on player, queue and various controls (#576) -- Improved performance when listing playable tracks, albums and artists -- Increased default upload limit from 30 to 100MB (#654) -- Load env file in config/.env automatically to avoid sourcing it by hand (#626) -- More resilient date parsing during audio import, will not crash anymore on - invalid dates (#622) -- Now start radios immediately, skipping any existing tracks in queue (#585) -- Officially support connecting to a password protected redis server, with - the redis://:password@localhost:6379/0 scheme (#640) -- Performance improvement when fetching favorites, down to a single, small http request -- Removed "Activity" page, since all the data is available on the "Browse" page (#600) -- Removed the need to specify the DJANGO_ALLOWED_HOSTS variable -- Restructured the footer, added useful links and removed unused content -- Show short entries first in search results to improve UX -- Store disc number and order tracks by disc number / position) (#507) -- Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374) -- Support blind key rotation in HTTP Signatures (#658) -- Support setting a server URL in settings.json (#650) -- Updated default docker postgres version from 9.4 to 11 (#656) -- Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) -- Improved test suite speed by reducing / disabling expensive operations (#648) - -Bugfixes: - -- Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) -- Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643) -- Fix ".None" extension when downloading Flac file (#473) -- Fixed None extension when downloading an in-place imported file (#621) -- Added a script to prune pre 0.17 federated tracks (#564) -- Advertise public libraries properly in ActivityPub representations (#553) -- Allow opus file upload (#598) -- Do not display "view on MusicBrainz" button if we miss the mbid (#422) -- Do not try to create unaccent extension if it's already present (#663) -- Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597) -- Fix broken websocket connection under Chrome browser (#589) -- Fix play button not starting playback with empty queue (#632) -- Fixed a styling inconsistency on about page when instance description was missing (#659) -- Fixed a UI discrepancy in playlist tracks count (#647) -- Fixed greyed tracks in radio builder and detail page (#637) -- Fixed inconsistencies in subsonic error responses (#616) -- Fixed incorrect icon for "next track" in player control (#613) -- Fixed malformed search string when redirecting to LyricsWiki (#608) -- Fixed missing track count on various library cards (#581) -- Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209) -- Fixed wrong album/track count on artist page (#599) -- Hide unplayable/empty playlists in "Browse playlist" pages (#424) -- Initial UI render using correct language from browser (#644) -- Invalid URI for reverse proxy websocket with apache (#617) -- Properly encode Wikipedia and lyrics search urls (#470) -- Refresh profile after user settings update to avoid cache issues (#606) -- Use role=button instead of empty links for player controls (#610) - -Documentation: - -- Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) -- Document how to find and use library id when importing files in CLI (#562) -- Fix documentation typos (#645) - -## 0.17 (2018-10-07) - -### Per user libraries - -This release contains a big change in music management. This has a lot of impact -on how Funkwhale behaves, and you should have a look at -https://docs.funkwhale.audio/upgrading/0.17.html for information -about what changed and how to migrate. - -Features: - -- Per user libraries (#463, also fixes #160 and #147) -- Authentication using a LDAP directory (#194) - -Enhancements: - -- Add configuration option to set Musicbrainz hostname -- Add sign up link in the sidebar (#408) -- Added a library widget to display libraries associated with a track, album - and artist (#551) -- Ensure from_activity field is not required in django's admin (#546) -- Move setting link from profile page to the sidebar (#406) -- Simplified and less error-prone nginx setup (#358) - -Bugfixes: - -- Do not restart current song when rordering queue, deleting tracks from queue - or adding tracks to queue (#464) -- Fix broken icons in playlist editor (#515) -- Fixed a few untranslated strings (#559) -- Fixed split album when importing from federation (#346) -- Fixed toggle mute in volume bar does not restore previous volume level (#514) -- Fixed wrong env file URL and display bugs in deployment documentation (#520) -- Fixed wrong title in PlayButton (#435) -- Remove transparency on artist page button (#517) -- Set sane width default for ui cards and center play button (#530) -- Updated wrong icon and copy in play button dropdown (#436) - -Documentation: - -- Fixed wrong URLs for docker / nginx files in documentation (#537) - -Other: - -- Added a merge request template and more documentation about the changelog - -### Using a LDAP directory to authenticate to your Funkwhale instance - -Funkwhale now support LDAP as an authentication source: you can configure -your instance to delegate login to a LDAP directory, which is especially -useful when you have an existing directory and don't want to manage users -manually. - -You can use this authentication backend side by side with the classic one. - -Have a look at https://docs.funkwhale.audio/installation/ldap.html -for detailed instructions on how to set this up. - -### Simplified nginx setup [Docker: Manual action required] - -We've received a lot of user feedback regarding our installation process, -and it seems the proxy part is the one which is the most confusing and difficult. -Unfortunately, this is also the one where errors and mistakes can completely break -the application. - -To make things easier for everyone, we now offer a simplified deployment -process for the reverse proxy part. This will make upgrade of the proxy configuration -significantly easier on docker deployments. - -On non-docker instances, you have nothing to do. - -If you have a dockerized instance, here is the upgrade path. - -First, tweak your .env file: - -```sh -# remove the FUNKWHALE_URL variable -# and add the next variables -FUNKWHALE_HOSTNAME=yourdomain.funkwhale -FUNKWHALE_PROTOCOL=https - -# add the following variable, matching the path your app is deployed -# leaving the default should work fine if you deployed using the same -# paths as the documentation -FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist -``` - -Then, add the following block at the end of your docker-compose.yml file: - -```yaml -services: - # existing services - api: - # ... - celeryworker: - # ... - - # new service - nginx: - image: nginx - env_file: - - .env - environment: - # Override those variables in your .env file if needed - - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - volumes: - - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" - - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" - - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" - - "${STATIC_ROOT}:${STATIC_ROOT}:ro" - - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" - ports: - # override those variables in your .env file if needed - - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" - command: > - sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" - < /etc/nginx/conf.d/funkwhale.template - > /etc/nginx/conf.d/default.conf - && cat /etc/nginx/conf.d/default.conf - && nginx -g 'daemon off;'" - links: - - api -``` - -By doing that, you'll enable a dockerized nginx that will automatically be -configured to serve your Funkwhale instance. - -Download the required configuration files for the nginx container: - -```{parsed-literal} -cd /srv/funkwhale -mkdir nginx -curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" -curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" -``` - -Update the funkwhale.conf configuration of your server's reverse-proxy: - -```sh -# the file should match something like that, upgrade all variables -# between ${} to match the ones in your .env file, -# and your SSL configuration if you're not using let's encrypt -# The important thing is that you only have a single location block -# that proxies everything to your dockerized nginx. - -sudo nano /etc/nginx/sites-enabled/funkwhale.conf -``` - -```nginx -upstream fw { - # depending on your setup, you may want to update this - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; -} -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -server { - listen 80; - listen [::]:80; - server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } -} -server { - listen 443 ssl; - listen [::]:443 ssl; - server_name ${FUNKWHALE_HOSTNAME}; - - # TLS - ssl_protocols TLSv1.2; - ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; - - # HSTS - add_header Strict-Transport-Security "max-age=31536000"; - - location / { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://fw/; - } -} -``` - -Check that your configuration is valid then reload: - -```sh -sudo nginx -t -sudo systemctl reload nginx -``` - -## 0.16.3 (2018-08-21) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Bugfixes: - -- Fixed front-end not contacting the proper path on the API (!385) - -## 0.16.2 (2018-08-21) - -```{warning} -**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** -``` - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Bugfixes: - -- Ensure we always have a default api url set on first load to avoid displaying - the instance picker (#490) -- Fixed CLI importer syntax error because of async reserved keyword usage - (#494) - -## 0.16.1 (2018-08-19) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Make funkwhale themable by loading external stylesheets (#456) - -Enhancements: - -- Add link to admin on "Staff member" button (#202) -- Can now add a description to radios and better radio cards (#331) -- Display track duration in track tables (#461) -- More permissive default permissions for front-end files (#388) -- Simpler configuration and toolchain for the front-end using vue-cli (!375) -- Use Howler to manage audio instead of our own dirty/untested code (#392) - -Bugfixes: - -- Fix alignment issue on top bar in Admin tabs (#395) -- Fix Apache2 permission issue preventing `/media` folder from being served - correctly (#389) -- Fix loading on browse page lists causing them to go down, and dimming over - the top bar (#468) -- Fixed (again): administration section not showing up in sidebar after login - (#245) -- Fixed audio mimetype not showing up on track detail and list (#459) -- Fixed broken audio playback on Chrome and invisible volume control (#390) -- Fixed broken federation import on big imports due to missing transaction - logic (#397) -- Fixed crash on artist pages when no cover is available (#457) -- Fixed favorited status of tracks not appearing in interface (#398) -- Fixed invitation code not prefilled in form when accessing invitation link - (#476) -- Fixed typos in scheduled tasks configuration (#487) -- Removed release date error in case of empty date (#478) -- Removed white on white artist button on hover, on Album page (#393) -- Smarter date parsing during import by replacing arrow with pendulum (#376) -- Display public playlists properly for anonymous users (#488) - -i18n: - -- Added portuguese, spanish and german translations - -### Custom themes for Funkwhale - -If you ever wanted to give a custom look and feel to your instance, this is now possible. - -Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! - -### Fix Apache2 configuration file for media block [Manual action required] - -The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. - -On Apache2 setups, you have to replace the following line: - -```apache -<Directory /srv/funkwhale/data/media/albums> -``` - -with: - -```apache -<Directory /srv/funkwhale/data/media> -``` - -You can now restart your server: - -```sh -sudo systemctl restart apache2 -``` - -## 0.16 (2018-07-22) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Complete redesign of the library home and playlist pages (#284) -- Expose ActivityPub actors for users (#317) -- Implemented a basic but functional Github-like search on federated tracks - list (#344) -- Internationalized interface as well as translations for Arabic, French, - Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) -- Users can now upload an avatar in their settings page (#257) - -Enhancements: - -- Added feedback when creating/updating radio (#302) -- Apply restrictions to username characters during signup -- Autoselect best language based on browser configuration (#386) -- Can now order tracks on federated track list (#326) -- Can now relaunch pending import jobs from the web interface (#323) -- Ensure we do not display pagination on single pages (#334) -- Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and - MUSIC_DIRECTORY_PATH in the deployment .env file (#350) -- Make some space for the volume slider to allow precise control (#318) -- Removed django-cacheops dependency -- Store track artist and album artist separately (#237) Better handling of - tracks with a different artist than the album artist -- The navigation bar of Library is now fixed (#375) -- Use thumbnails for avatars and covers to reduce bandwidth - -Bugfixes: - -- Ensure 750 permissions on CI artifacts (#332) -- Ensure images are not cropped in queue (#337) -- Ensure we do not import artists with empty names (#351) -- Fix notifications not closing when clicking on the cross (#366) -- Fix the most annoying offset in the whole fediverse (#369) -- Fixed persistent message in playlist modal (#304) -- Fixed unfiltered results in favorites API (#384) -- Raise a warning instead of crashing when getting a broken path in file import - (#138) -- Remove parallelization of uploads during import to avoid crashing small - servers (#382) -- Subsonic API login is now case insensitive (#339) -- Validate Date header in HTTP Signatures (#328) - -Documentation: - -- Added troubleshotting and technical overview documentation (#256) -- Arch Linux installation steps -- Document that users can use Ultrasonic on Android (#316) -- Fixed a couple of typos -- Some cosmetic improvements to the doc - -i18n: - -- Arabic translation (!302) -- Polish translation (!304) - -### Library home and playlist page overhaul - -The library home page have been completely redesigned to include: - -- other users activity (listenings, playlists and favorites) -- recently imported albums - -We think this new version showcases more music in a more useful way, let us know -what you think about it! - -The playlist page have been updated as well. - -### Internationalized interface - -After months of work, we're proud to announce our interface is now ready -for internationalization. - -Translators have already started the work of translating Funkwhale in 8 different languages, -and we're ready to add more as needed. - -You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ - -### Better handling of tracks with a different artist than the album artist - -Some tracks involve a different artist than the album artist (e.g. a featuring) -and Funkwhale has been known to do weird things when importing such tracks, resulting -in albums that contained a single track, for instance. - -The situation should be improved with this release, as Funkwhale is now able to -store separately the track and album artist, and display it properly in the interface. - -### Users now have an ActivityPub Actor [Manual action required] - -In the process of implementing federation for user activity such as listening -history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. - -This does not means the federation is working, but this is a needed step to implement it. - -Those profiles will be created automatically for new users, but you have to run a command -to create them for existing users. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script create_actors --no-input -``` - -On non-docker setups: - -```sh -python manage.py script create_actors --no-input -``` - -This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. - -### Image thumbnails [Manual action required] - -To reduce bandwidth usage on slow or limited connexions and improve performance -in general, we now use smaller images in the front-end. For instance, if you have -an album cover with a 1000x1000 pixel size, we will create smaller -versions of this image (50x50, 200x200, 400x400) and reference those resized version -when we don't actually need the original image. - -Thumbnail will be created automatically for new objects, however, you have -to launch a manual command to deal with existing ones. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script create_image_variations --no-input -``` - -On non-docker setups: - -```sh -python manage.py script create_image_variations --no-input -``` - -This should be quite fast but may take up to a few minutes depending on the number -of albums you have in database. It is safe to interrupt the process or rerun it multiple times. - -### Improved search on federated tracks list - -Having a powerful but easy-to-use search is important but difficult to achieve, especially -if you do not want to have a real complex search interface. - -Github does a pretty good job with that, using a structured but simple query system -(See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests). - -This release implements a limited but working subset of this query system. You can use it only on the federated -tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well. - -This is the type of query you can run: - -- `hello world`: search for "hello" and "world" in all the available fields -- `hello in:artist` search for results where artist name is "hello" -- `spring in:artist,album` search for results where artist name or album title contain "spring" -- `artist:hello` search for results where artist name equals "hello" -- `artist:"System of a Down" domain:instance.funkwhale` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library - -### Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required] - -In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing -some deployment issues on non-docker setups when people forgot to uncomment them. - -From now on, those variables are uncommented, and will also be used on docker setups -to mount the volumes automatically in the docker-compose.yml file. This has been a source -of headache as well in some deployments, where you had to update both the .env file and -the compose file. - -This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), -whose values are now used directly to set up the proper Docker volumes. - -This will only affect new deployments though. If you want to benefit from this on an -existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes: - -- Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored - on your host (`/srv/funkwhale/data/media` by default) -- Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored - on your host (`/srv/funkwhale/data/static` by default) -- If you use in-place import: - - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music` - - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files - are stored (`/srv/funkwhale/data/music` by default) -- Edit your docker-compose.yml file to reflect the changes: - - Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and - replace the whole line with `- "${MEDIA_ROOT}:${MEDIA_ROOT}"` - - Search for a volume that contains `/app/staticfiles` on the right side, and - replace the whole line with `- "${STATIC_ROOT}:${STATIC_ROOT}"` - - If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and - replace the whole line with `- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"` - -In the end, the `volumes` directives of your containers should look like that: - -```yaml -services: - # ... - celeryworker: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - # ... - api: - volumes: - - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" - - "${MEDIA_ROOT}:${MEDIA_ROOT}" - - "${STATIC_ROOT}:${STATIC_ROOT}" - - ./front/dist:/frontend - # ... -``` - -### Removed Cacheops dependency - -We removed one of our dependency named django-cacheops. It was unly used in a few places, -and not playing nice with other dependencies. - -You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're -not using docker. - -You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file. - -## 0.15 (2018-06-24) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Added admin interface to manage import requests (#190) -- Added replace flag during import to replace already present tracks with a new - version of their track file (#222) -- Funkwhale's front-end can now point to any instance (#327) Removed front-end - and back-end coupling -- Management interface for users (#212) -- New invite system (#248) New invite system - -Enhancements: - -- Added "TV" to the list of highlighted words during YouTube import (#154) -- Command line import now accepts unlimited args (#242) - -Bugfixes: - -- Expose track files date in manage API (#307) -- Fixed current track restart/hiccup when shuffling queue, deleting track from - queue or reordering (#310) -- Include user's current private playlists on playlist list (#302) -- Remove link to generic radios, since they don't have detail pages (#324) - -Documentation: - -- Document that Funkwhale may be installed with YunoHost (#325) -- Documented a saner layout with symlinks for in-place imports (#254) -- Upgrade documentation now use the correct user on non-docker setups (#265) - -### Invite system - -On closed instances, it has always been a little bit painful to create accounts -by hand for new users. This release solve that by adding invitations. - -You can generate invitation codes via the "users" admin interface (you'll find a -link in the sidebar). Those codes are valid for 14 days, and can be used once -to create a new account on the instance, even if registrations are closed. - -By default, we generate a random code for invitations, but you can also use custom codes -if you need to print them or make them fancier ;) - -Invitations generation and management requires the "settings" permission. - -### Removed front-end and back-end coupling - -Even though Funkwhale's front-end has always been a Single Page Application, -talking to an API, it was only able to talk to an API on the same domain. - -There was no real technical justification behind this (only laziness), and it was -also blocking interesting use cases: - -- Use multiple customized versions of the front-end with the same instance -- Use a customized version of the front-end with multiple instances -- Use a locally hosted front-end with a remote API, which is especially useful in development - -From now on, Funkwhale's front-end can connect to any Funkwhale server. You can -change the server you are connecting to in the footer. - -Fixing this also unlocked a really interesting feature in our development/review workflow: -by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of -a merge request, making it possible for anyone to review front-end changes easily, without -the need to install a local environment. - -## 0.14.2 (2018-06-16) - -```{warning} -This release contains a fix for a permission issue. You should upgrade -as soon as possible. Read the changelog below for more details. -``` - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Enhancements: - -- Added feedback on shuffle button (#262) -- Added multiple warnings in the documentation that you should never run - makemigrations yourself (#291) -- Album cover served in http (#264) -- Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) - (!252) -- Display file size in human format during file upload (#289) -- Switch from BSD-3 licence to AGPL-3 licence (#280) - -Bugfixes: - -- Ensure radios can only be edited and deleted by their owners (#311) -- Fixed admin menu not showing after login (#245) -- Fixed broken pagination in Subsonic API (#295) -- Fixed duplicated websocket connection on timeline (#287) - -Documentation: - -- Improved documentation about in-place imports setup (#298) - -Other: - -- Added Black and flake8 checks in CI to ensure consistent code styling and - formatting (#297) -- Added bug and feature issue templates (#299) - -### Permission issues on radios - -Because of an error in the way we checked user permissions on radios, -public radios could be deleted by any logged-in user, even if they were not -the owner of the radio. - -We recommend instances owners to upgrade as fast as possible to avoid any abuse -and data loss. - -### Funkwhale is now licenced under AGPL-3 - -Following the recent switch made by PixelFed -(https://github.com/dansup/pixelfed/issues/143), we decided along with -the community to relicence Funkwhale under the AGPL-3 licence. We did this -switch for various reasons: - -- This is better aligned with other fediverse software -- It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale - -As end users and instance owners, this does not change anything. You can -continue to use Funkwhale exactly as you did before :) - -### Apache support for websocket - -Up until now, our Apache2 configuration was not working with websockets. This is now -solved by adding this at the beginning of your Apache2 configuration file: - -```apache -Define funkwhale-api-ws ws://localhost:5000 -``` - -And this, before the "/api" block: - -```apache -# Activating WebSockets -ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity -``` - -Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. - -### Serving album covers in https (Apache2 proxy) - -Two issues are addressed here. The first one was about Django replying with -mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` -allows Django to know that the client is using https, and that the reply must -be https as well. - -Second issue was a problem of permission causing Apache a denied access to -album cover folder. It is solved by adding another block for this path in -the Apache configuration file for funkwhale. - -Here is how to modify your `funkwhale.conf` apache2 configuration: - -```apache -<VirtualHost *:443> - # ... - #Add this new line - RequestHeader set X-Forwarded-Proto "https" - # ... - # Add this new block below the other <Directory/> blocks - # replace /srv/funkwhale/data/media with the path to your media directory - # if you're not using the standard layout. - <Directory /srv/funkwhale/data/media/albums> - Options FollowSymLinks - AllowOverride None - Require all granted - </Directory> - # ... -</VirtualHost> -``` - -### About the makemigrations warning - -You may sometimes get the following warning while applying migrations: - -``` -"Your models have changes that are not yet reflected in a migration, and so won't be applied." -``` - -This is a warning, not an error, and it can be safely ignored. -Never run the `makemigrations` command yourself. - -## 0.14.1 (2018-06-06) - -Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html - -Enhancements: - -- Display server version in the footer (#270) -- fix_track_files will now update files with bad mimetype (and not only the one - with no mimetype) (#273) -- Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz - (#288) -- Removed alpha-state transcoding support (#271) - -Bugfixes: - -- Broken logging statement during import error (#274) -- Broken search bar on library home (#278) -- Do not crash when importing track with an artist that do not match the - release artist (#237) -- Do not crash when tag contains multiple uuids with a / separator (#267) -- Ensure we do not store bad mimetypes (such as application/x-empty) (#266) -- Fix broken "play all" button that played only 25 tracks (#281) -- Fixed broken track download modal (overflow and wrong URL) (#239) -- Removed hardcoded size limit in file upload widget (#275) - -Documentation: - -- Added warning about \_protected/music location in nginx configuration (#247) - -### Removed alpha-state transcoding (#271) - -A few months ago, a basic transcoding feature was implemented. Due to the way -this feature was designed, it was slow, CPU intensive on the server side, -and very tightly coupled to the reverse-proxy configuration, preventing -it to work Apache2, for instance. It was also not compatible with Subsonic clients. - -Based on that, we're currently removing support for transcoding -**in its current state**. The work on a better designed transcoding feature -can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. - -You don't have to do anything on your side, but you may want to remove -the now obsolete configuration from your reverse proxy file (nginx only): - -```nginx -# Remove those blocks: - -# transcode cache -proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; - -# Transcoding logic and caching -location = /transcode-auth { - include /etc/nginx/funkwhale_proxy.conf; - # needed so we can authenticate transcode requests, but still - # cache the result - internal; - set $query ''; - # ensure we actually pass the jwt to the underlytin auth url - if ($request_uri ~* "[^\?]+\?(.*)$") { - set $query $1; - } - proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; - proxy_pass_request_body off; - proxy_set_header Content-Length ""; -} - -location /api/v1/trackfiles/transcode/ { - include /etc/nginx/funkwhale_proxy.conf; - # this block deals with authenticating and caching transcoding - # requests. Caching is heavily recommended as transcoding - # is a CPU intensive process. - auth_request /transcode-auth; - if ($args ~ (.*)jwt=[^&]*(.*)) { - set $cleaned_args $1$2; - } - proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; - proxy_cache transcode; - proxy_cache_valid 200 7d; - proxy_ignore_headers "Set-Cookie"; - proxy_hide_header "Set-Cookie"; - add_header X-Cache-Status $upstream_cache_status; - proxy_pass http://funkwhale-api; -} -# end of transcoding logic -``` - -## 0.14 (2018-06-02) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Admins can now configure default permissions that will be granted to all - registered users (#236) -- Files management interface for users with "library" permission (#223) -- New action table component for quick and efficient batch actions (#228) This - is implemented on the federated tracks pages, but will be included in other - pages as well depending on the feedback. - -Enhancements: - -- Added a new "upload" permission that allows user to launch import and view - their own imports (#230) -- Added Support for OggTheora in import. -- Autoremove media files on model instance deletion (#241) -- Can now import a whole remote library at once thanks to new Action Table - component (#164) -- Can now use album covers from flac/mp3 metadata and separate file in track - directory (#219) -- Implemented getCovertArt in Subsonic API to serve album covers (#258) -- Implemented scrobble endpoint of subsonic API, listenings are now tracked - correctly from third party apps that use this endpoint (#260) -- Retructured music API to increase performance and remove useless endpoints - (#224) - -Bugfixes: - -- Consistent constraints/checks for URL size (#207) -- Display proper total number of tracks on radio detail (#225) -- Do not crash on flac import if musicbrainz tags are missing (#214) -- Empty save button in radio builder (#226) -- Ensure anonymous users can use the app if the instance is configured - accordingly (#229) -- Ensure inactive users cannot get auth tokens (#218) This was already the case - bug we missed some checks -- File-upload import now supports Flac files (#213) -- File-upload importer should now work properly, assuming files are tagged - (#106) -- Fixed a few broken translations strings (#227) -- Fixed broken ordering in front-end lists (#179) -- Fixed ignored page_size parameter on artist and favorites list (#240) -- Read ID3Tag Tracknumber from TRCK (#220) -- We now fetch album covers regardless of the import methods (#231) - -Documentation: - -- Added missing subsonic configuration block in deployment vhost files (#249) -- Moved upgrade doc under install doc in TOC (#251) - -Other: - -- Removed acoustid support, as the integration was buggy and error-prone (#106) - -### Files management interface - -This is the first bit of an ongoing work that will span several releases, to -bring more powerful library management features to Funkwhale. This iteration -includes a basic file management interface where users with the "library" -permission can list and search available files, order them using -various criteria (size, bitrate, duration...) and delete them. - -### New "upload" permission - -This new permission is helpful if you want to give upload/import rights -to some users, but don't want them to be able to manage the library as a whole: -although there are no controls yet for managing library in the fron-end, -subsequent release will introduce management interfaces for artists, files, -etc. - -Because of that, users with the "library" permission will have much more power, -and will also be able to remove content from the platform. On the other hand, -users with the "upload" permission will only have the ability to add new -content. - -Also, this release also includes a new feature called "default permissions": -those are permissions that are granted to every users on the platform. -On public/open instances, this will play well with the "upload" permission -since everyone will be able to contribute to the instance library without -an admin giving the permission to every single user. - -### Smarter album cover importer - -In earlier versions, covers where only imported when launching a YouTube import. -Starting from this release, covers will be imported regardless of the import mode -(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers -in the following order: - -1. In the imported file itself (FLAC/MP3 only) -2. In a cover.jpg or cover.png in the file directory -3. By fetching cover art from Musibrainz, assuming the file is tagged correctly - -This will only work for newly imported tracks and albums though. In the future, -we may offer an option to refetch album covers from the interface, but in the -meantime, you can use the following snippet: - -```python -# Store this in /tmp/update_albums.py -from funkwhale_api.music.models import Album, TrackFile -from funkwhale_api.music.tasks import update_album_cover - -albums_without_covers = Album.objects.filter(cover='') -total = albums_without_covers.count() -print('Found {} albums without cover'.format(total)) -for i, album in enumerate(albums_without_covers.iterator()): - print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) - f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() - update_album_cover(album, track_file=f) -``` - -Then launch it: - -```sh -# docker setups -cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python - -# non-docker setups -source /srv/funkwhale/load_env -source /srv/funkwhale/virtualenv/bin/activate -cat /tmp/update_albums.py | python manage.py shell -i python - -# cleanup -rm /tmp/update_albums.py -``` - -```{note} -Depending on your number of albums, the previous snippet may take some time -to execute. You can interrupt it at any time using ctrl-c and relaunch it later, -as it's idempotent. -``` - -### Music API changes - -This release includes an API break. Even though the API is advertised -as unstable, and not documented, here is a brief explanation of the change in -case you are using the API in a client or in a script. Summary of the changes: - -- `/api/v1/artists` does not includes a list of tracks anymore. It was to heavy - to return all of this data all the time. You can get all tracks for an - artist using `/api/v1/tracks?artist=artist_id` -- Additionally, `/api/v1/tracks` now support an `album` filter to filter - tracks matching an album -- `/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` - endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` - instead. It's also more powerful, since you can combine search with other - filters and ordering options. -- `/api/v1/requests/import-requests/search` endpoint is removed as well. - Use `/api/v1/requests/import-requests/?q=yourquery` - instead. It's also more powerful, since you can combine search with other - filters and ordering options. - -Of course, the front-end was updated to work with the new API, so this should -not impact end-users in any way, apart from slight performance gains. - -```{note} -The API is still not stable and may evolve again in the future. API freeze -will come at a later point. -``` - -### Flac files imports via upload - -You have nothing to do to benefit from this, however, since Flac files -tend to be a lot bigger than other files, you may want to increase the -`client_max_body_size` value in your Nginx configuration if you plan -to upload flac files. - -### Missing subsonic configuration block in vhost files - -Because of a missing block in the sample Nginx and Apache configurations, -instances that were deployed after the 0.13 release are likely to be unable -to answer to Subsonic clients (the missing bits were properly documented -in the changelog). - -Ensure you have the following snippets in your Nginx or Apache configuration -if you plan to use the Subsonic API. - -Nginx: - -```nginx -location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; -} -``` - -Apache2: - -```apache -<Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest - </Location> -``` - -## 0.13 (2018-05-19) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Can now import and play flac files (#157) -- Simpler permission system (#152) -- Store file length, size and bitrate (#195) -- We now have a brand new instance settings interface in the front-end (#206) - -Enhancements: - -- Disabled browsable HTML API in production (#205) -- Instances can now indicate on the nodeinfo endpoint if they want to remain - private (#200) - -Bugfixes: - -- .well-known/nodeinfo endpoint can now answer to request with Accept: - application/json (#197) -- Fixed escaping issue of track name in playlist modal (#201) -- Fixed missing dot when downloading file (#204) -- In-place imported tracks with non-ascii characters don't break reverse-proxy - serving (#196) -- Removed Python 3.6 dependency (secrets module) (#198) -- Uplayable tracks are now properly disabled in the interface (#199) - -### Instance settings interface - -Prior to this release, the only way to update instance settings (such as -instance description, signup policy, federation configuration, etc.) was using -the admin interface provided by Django (the back-end framework which power the API). - -This interface worked, but was not really-user friendly and intuitive. - -Starting from this release, we now offer a dedicated interface directly -in the front-end. You can view and edit all your instance settings from here, -assuming you have the required permissions. - -This interface is available at `/manage/settings` and via link in the sidebar. - -### Storage of bitrate, size and length in database - -Starting with this release, when importing files, Funkwhale will store -additional information about audio files: - -- Bitrate -- Size (in bytes) -- Duration - -This change is not retroactive, meaning already imported files will lack those -information. The interface and API should work as before in such case, however, -we offer a command to deal with legacy files and populate the missing values. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py fix_track_files -``` - -On non-docker setups: - -```sh -# from your activated virtualenv -python manage.py fix_track_files -``` - -```{note} -The execution time for this command is proportional to the number of -audio files stored on your instance. This is because we need to read the -files from disk to fetch the data. You can run it in the background -while Funkwhale is up. - -It's also safe to interrupt this command and rerun it at a later point, or run -it multiple times. - -Use the --dry-run flag to check how many files would be impacted. -``` - -### Simpler permission system - -Starting from this release, the permission system is much simpler. Up until now, -we were using Django's built-in permission system, which was working, but also -quite complex to deal with. - -The new implementation relies on simpler logic, which will make integration -on the front-end in upcoming releases faster and easier. - -If you have manually given permissions to users on your instance, -you can migrate those to the new system. - -On docker setups: - -```sh -docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input -``` - -On non-docker setups: - -```sh -# in your virtualenv -python api/manage.py script django_permissions_to_user_permissions --no-input -``` - -There is still no dedicated interface to manage user permissions, but you -can use the admin interface at `/api/admin/users/user/` for that purpose in -the meantime. - -## 0.12 (2018-05-09) - -Upgrade instructions are available at -https://docs.funkwhale.audio/upgrading.html - -Features: - -- Subsonic API implementation to offer compatibility with existing clients such - as DSub (#75) -- Use nodeinfo standard for publishing instance information (#192) - -Enhancements: - -- Play button now play tracks immediately instead of appending them to the - queue (#99, #156) - -Bugfixes: - -- Fix broken federated import (#193) - -Documentation: - -- Up-to-date documentation for upgrading front-end files on docker setup (#132) - -### Subsonic API - -This release implements some core parts of the Subsonic API, which is widely -deployed in various projects and supported by numerous clients. - -By offering this API in Funkwhale, we make it possible to access the instance -library and listen to the music without from existing Subsonic clients, and -without developping our own alternative clients for each and every platform. - -Most advanced Subsonic clients support offline caching of music files, -playlist management and search, which makes them well-suited for nomadic use. - -Please see [our list of supported apps](https://funkwhale.audio/en_US/apps) -for more information about supported clients and user instructions. - -At the instance-level, the Subsonic API is enabled by default, but require -and additional endpoint to be added in you reverse-proxy configuration. - -On nginx, add the following block: - -```nginx -location /rest/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/api/subsonic/rest/; -} -``` - -On Apache, add the following block: - -```apache -<Location "/rest"> - ProxyPass ${funkwhale-api}/api/subsonic/rest - ProxyPassReverse ${funkwhale-api}/api/subsonic/rest -</Location> -``` - -The Subsonic can be disabled at the instance level from the django admin. - -```{note} -Because of Subsonic's API design which assumes cleartext storing of -user passwords, we chose to have a dedicated, separate password -for that purpose. Users can generate this password from their -settings page in the web client. -``` - -### Nodeinfo standard for instance information and stats - -```{warning} -The ``/api/v1/instance/stats/`` endpoint which was used to display -instance data in the about page is removed in favor of the new -``/api/v1/instance/nodeinfo/2.0/`` endpoint. -``` - -In earlier version, we where using a custom endpoint and format for -our instance information and statistics. While this was working, -this was not compatible with anything else on the fediverse. - -We now offer a nodeinfo 2.0 endpoint which provides, in a single place, -all the instance information such as library and user activity statistics, -public instance settings (description, registration and federation status, etc.). - -We offer two settings to manage nodeinfo in your Funkwhale instance: - -1. One setting to completely disable nodeinfo, but this is not recommended - as the exposed data may be needed to make some parts of the front-end - work (especially the about page). -2. One setting to disable only usage and library statistics in the nodeinfo - endpoint. This is useful if you want the nodeinfo endpoint to work, - but don't feel comfortable sharing aggregated statistics about your library - and user activity. - -To make your instance fully compatible with the nodeinfo protocol, you need to -to edit your nginx configuration file: - -```nginx -# before -# ... -location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; -} -# ... - -# after -# ... -location /.well-known/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/; -} -# ... -``` - -You can do the same if you use apache: - -```apache -# before -# ... -<Location "/.well-known/webfinger"> - ProxyPass ${funkwhale-api}/.well-known/webfinger - ProxyPassReverse ${funkwhale-api}/.well-known/webfinger -</Location> -# ... - -# after -# ... -<Location "/.well-known/"> - ProxyPass ${funkwhale-api}/.well-known/ - ProxyPassReverse ${funkwhale-api}/.well-known/ -</Location> -# ... -``` - -This will ensure all well-known endpoints are proxied to funkwhale, and -not just webfinger one. - -Links: - -- About nodeinfo: https://github.com/jhass/nodeinfo - -## 0.11 (2018-05-06) - -Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html - -Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab) -for bringing Apache2 support to Funkwhale and contributing on other issues. -Thank you! - -Features: - -- Funkwhale now works behind an Apache2 reverse proxy (!165) - check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2 - if you want to try it! -- Users can now request password reset by email, assuming a SMTP server was - correctly configured (#187) - -Enhancements: - -- Added a fix_track_files command to run checks and fixes against library - (#183) -- Avoid fetching Actor object on every request authentication -- Can now relaunch errored jobs and batches (#176) -- List pending requests by default, added a status filter for requests (#109) -- More structured menus in sidebar, added labels with notifications -- Sample virtual-host file for Apache2 reverse-proxy (!165) -- Store high-level settings (such as federation or auth-related ones) in - database (#186) - -Bugfixes: - -- Ensure in place imported files get a proper mimetype (#183) -- Federation cache suppression is now simpler and also deletes orphaned files - (#189) -- Fixed small UI glitches/bugs in federation tabs (#184) -- X-sendfile not working with in place import (#182) - -Documentation: - -- Added a documentation area for third-party projects (#180) -- Added documentation for optimizing Funkwhale and reduce its memory footprint. -- Document that the database should use an utf-8 encoding (#185) -- Foundations for API documentation with Swagger (#178) - -### Database storage for high-level settings - -Due to the work done in #186, the following environment variables have been -deprecated: - -- FEDERATION_ENABLED -- FEDERATION_COLLECTION_PAGE_SIZE -- FEDERATION_MUSIC_NEEDS_APPROVAL -- FEDERATION_ACTOR_FETCH_DELAY -- PLAYLISTS_MAX_TRACKS -- API_AUTHENTICATION_REQUIRED - -Configuration for this settings has been moved to database, as it will provide -a better user-experience, by allowing you to edit these values on-the-fly, -without restarting Funkwhale processes. - -You can leave those environment variables in your .env file for now, as the -values will be used to populate the database entries. We'll make a proper -announcement when the variables won't be used anymore. - -Please browse https://docs.funkwhale.audio/configuration.html#instance-settings -for more information about instance configuration using the web interface. - -### System emails - -Starting from this release, Funkwhale will send two types -of emails: - -- Email confirmation emails, to ensure a user's email is valid -- Password reset emails, enabling user to reset their password without an admin's intervention - -Email sending is disabled by default, as it requires additional configuration. -In this mode, emails are simply outputted on stdout. - -If you want to actually send those emails to your users, you should edit your -.env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` -for more details. - -```{note} -As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, -which was not documented, has no effect anymore. You can safely remove it from -your .env file if it is set. -``` - -### Proxy headers for non-docker deployments - -For non-docker deployments, add `--proxy-headers` at the end of the `daphne` -command in :file:`/etc/systemd/system/funkwhale-server.service`. - -This will ensure the application receive the correct IP address from the client -and not the proxy's one. - -## 0.10 (2018-04-23) - -Features: - -- Can now import files in-place from the CLI importer (#155) - -Enhancements: - -- Avoid downloading audio files multiple times from remote libraries (#163) -- Better file import performance and error handling (#144) -- Import job and batch API and front-end have been improved with better - performance, pagination and additional filters (#171) -- Increased max_length on TrackFile.source, this will help when importing files - with a really long path (#142) -- Player is back in Queue tab (#150) - -Bugfixes: - -- Fail graciously when AP representation includes a null_value for mediaType -- Fix sidebar tabs not showing under small resolution under Chrome (#173) -- Fixed broken login due to badly configured Axios (#172) -- Fixed broken playlist modal after login (#155) -- Fixed queue reorder or track deletion restarting currently playing track - (#151) -- Radio will now append new track if you delete the last track in queue (#145) -- Reset all sensitive front-end data on logout (#124) -- Typos/not showing text due to i18n work (#175) - -Documentation: - -- Better documentation for hardware requirements and memory usage (#165) - -### In-place import - -This release includes in-place imports for the CLI import. This means you can -load gigabytes of music into funkwhale without worrying about about Funkwhale -copying those music files in its internal storage and eating your disk space. - -[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) -and require additional configuration to ensure funkwhale and your webserver can -serve those files properly. - -**Non-docker users:** - -Assuming your music is stored in `/srv/funkwhale/data/music`, add the following -block to your nginx configuration: - -```nginx -location /_protected/music { - internal; - alias /srv/funkwhale/data/music; -} -``` - -And the following to your .env file: - -```sh -MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music -``` - -**Docker users:** - -Assuming your music is stored in `/srv/funkwhale/data/music`, add the following -block to your nginx configuration: - -```nginx -location /_protected/music { - internal; - alias /srv/funkwhale/data/music; -} -``` - -Assuming you have the following volume directive in your `docker-compose.yml` -(it's the default): `/srv/funkwhale/data/music:/music:ro`, then add -the following to your .env file: - -```sh -# this is the path in the container -MUSIC_DIRECTORY_PATH=/music -# this is the path on the host -MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music -``` - -## 0.9.1 (2018-04-17) - -Bugfixes: - -- Allow null values for musicbrainz_id in Audio ActivityPub representation -- Fixed broken permission check on library scanning and too aggressive page - validation - -## 0.9 (2018-04-17) - -Features: - -- Add internationalization support (#5) -- Can now follow and import music from remote libraries (#136, #137) - -Enhancements: - -- Added a i18n-extract yarn script to extract strings to PO files (#162) -- User admin now includes signup and last login dates (#148) -- We now use a proper user agent including instance version and url during - outgoing requests - -### Federation is here! - -This is for real this time, and includes: - -- Following other Funkwhale libraries -- Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time) -- Searching across federated catalogs - -Note that by default, federation is opt-in, on a per-instance basis: -instances will request access to your catalog, and you can accept or refuse -those requests. You can also revoke the access at any time. - -Documentation was updated with relevant instructions to use and benefit -from this new feature: https://docs.funkwhale.audio/federation.html - -### Preparing internationalization - -Funkwhale's front-end as always been english-only, and this is a barrier -to new users. The work make Funkwhale's interface translatable was started -in this release by Baptiste. Although nothing is translated yet, -this release includes behind the stage changes that will make it possible in -the near future. - -Many thank to Baptiste for the hard work and for figuring out a proper solution -to this difficult problem. - -### Upgrade path - -In addition to the usual instructions from -https://docs.funkwhale.audio/upgrading.html, non-docker users will have -to setup an additional systemd unit file for recurrent tasks. - -This was forgotten in the deployment documentation, but recurrent tasks, -managed by the celery beat process, will be needed more and more in subsequent -releases. Right now, we'll be using to clear the cache for federated music files -and keep disk usage to a minimum. - -In the future, they will also be needed to refetch music metadata or federated -information periodically. - -Celery beat can be enabled easily: - -```sh -curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" -# Also edit /etc/systemd/system/funkwhale.target -# and ensure the Wants= line contains the following: -# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service -nano /etc/systemd/system/funkwhale.target -# reload configuration -systemctl daemon-reload -``` - -Docker users already have celerybeat enabled. - -## 0.8 (2018-04-02) - -Features: - -- Add a detail page for radios (#64) -- Implemented page title binding (#1) -- Previous Track button restart playback after 3 seconds (#146) - -Enhancements: - -- Added credits to Francis Gading for the logotype (#101) -- API endpoint for fetching instance activity and updated timeline to use this - new endpoint (#141) -- Better error messages in case of missing environment variables (#140) -- Implemented a @test@yourfunkwhaledomain bot to ensure federation works - properly. Send it "/ping" and it will answer back :) -- Queue shuffle now apply only to tracks after the current one (#97) -- Removed player from queue tab and consistently show current track in queue - (#131) -- We now restrict some usernames from being used during signup (#139) - -Bugfixes: - -- Better error handling during file import (#120) -- Better handling of utf-8 filenames during file import (#138) -- Converted favicon from .ico to .png (#130) -- Upgraded to Python 3.6 to fix weird but harmless weakref error on django task - (#121) - -Documentation: - -- Documented the upgrade process (#127) - -### Preparing for federation - -Federation of music libraries is one of the most asked feature. -While there is still a lot of work to do, this version includes -the foundation that will enable funkwhale servers to communicate -between each others, and with other federated software, such as -Mastodon. - -Funkwhale will use ActivityPub as it's federation protocol. - -In order to prepare for federation (see #136 and #137), new API endpoints -have been added under /federation and /.well-known/webfinger. - -For these endpoints to work, you will need to update your nginx configuration, -and add the following snippets: - -```nginx -location /federation/ { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/federation/; -} -location /.well-known/webfinger { - include /etc/nginx/funkwhale_proxy.conf; - proxy_pass http://funkwhale-api/.well-known/webfinger; -} -``` - -This will ensure federation endpoints will be reachable in the future. -You can of course skip this part if you know you will not federate your instance. - -A new `FEDERATION_ENABLED` env var have also been added to control whether -federation is enabled or not on the application side. This settings defaults -to True, which should have no consequences at the moment, since actual -federation is not implemented and the only available endpoints are for -testing purposes. - -Add `FEDERATION_ENABLED=false` to your .env file to disable federation -on the application side. - -To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, -and sending it "/ping", for example, via Mastodon, should trigger -a response. - -## 0.7 (2018-03-21) - -Features: - -- Can now filter artists and albums with no listenable tracks (#114) -- Improve the style of the sidebar to make it easier to understand which tab is - selected (#118) -- On artist page, albums are not sorted by release date, if any (#116) -- Playlists are here \o/ :tada: (#3, #93, #94) -- Use django-cacheops to cache common ORM requests (#117) - -Bugfixes: - -- Fixed broken import request admin (#115) -- Fixed forced redirection to login event with - API_AUTHENTICATION_REQUIRED=False (#119) -- Fixed position not being reset properly when playing the same track - multiple times in a row -- Fixed synchronized start/stop radio buttons for all custom radios (#103) -- Fixed typo and missing icon on homepage (#96) - -Documentation: - -- Up-to-date and complete development and contribution instructions in - README.rst (#123) - -## 0.6.1 (2018-03-06) - -Features: - -- Can now skip acoustid on file import with the --no-acoustid flag (#111) - -Bugfixes: - -- Added missing batch id in output during import (#112) -- Added some feedback on the play button (#100) -- Smarter pagination which takes a fixed size (#84) - -Other: - -- Completely removed django-cachalot from the codebase (#110). You can safely - remove the CACHALOT_ENABLED setting from your .env file - -## 0.6 (2018-03-04) - -Features: - -- Basic activity stream for listening and favorites (#23) -- Switched to django-channels and daphne for serving HTTP and websocket (#34) - -### Upgrades notes - -This version contains breaking changes in the way funkwhale is deployed, -please read the notes carefully. - -### Instance timeline - -A new "Activity" page is now available from the sidebar, where you can -browse your instance activity. At the moment, this includes other users -favorites and listening, but more activity types will be implemented in the -future. - -Internally, we implemented those events by following the Activity Stream -specification, which will help us to be compatible with other networks -in the long-term. - -A new settings page has been added to control the visibility of your activity. -By default, your activity will be browsable by anyone on your instance, -but you can switch to a full private mode where nothing is shared. - -The setting form is available in your profile. - -### Switch from gunicorn to daphne - -This release include an important change in the way we serve the HTTP API. -To prepare for new realtime features and enable websocket support in Funkwhale, -we are now using django-channels and daphne to serve HTTP and websocket traffic. - -This replaces gunicorn and the switch should be easy assuming you -follow the upgrade process described below. - -If you are using docker, please remove the command instruction inside the -api service, as the up-to-date command is now included directly in the image -as the default entry point: - -```yaml -services: - api: - restart: unless-stopped - image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} - command: ./compose/django/gunicorn.sh # You can remove this line -``` - -On non docker setups, you'll have to update the `[Service]` block of your -funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. - -The new configuration should be similar to this: - -```ini -[Service] -User=funkwhale -# adapt this depending on the path of your funkwhale installation -WorkingDirectory=/srv/funkwhale/api -EnvironmentFile=/srv/funkwhale/config/.env -ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application -``` - -Ensure you update funkwhale's dependencies as usual to install the required -packages. - -On both docker and non-docker setup, you'll also have to update your nginx -configuration for websocket support. Ensure you have the following blocks -included in your virtualhost file: - -```nginx -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -server { - # ... - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; -} -``` - -Remember to reload your nginx server after the edit. - -## 0.5.4 (2018-02-28) - -Features: - -- Now stop running radio when clearing queue (#98) - -Bugfixes: - -- Fixed queue skipping tracks (#91) -- Now loop properly on queue when we only have one track (#95) - -## 0.5.3 (2018-02-27) - -Features: - -- Added admin interface for radios, track files, favorites and import requests (#80) -- Added basic instance stats on /about (#82) -- Search now unaccent letters for queries like "The Dø" or "Björk" yielding more results (#81) - -Bugfixes: - -- Always use username in sidebar (#89) -- Click event outside of player icons (#83) -- Fixed broken import because of missing transaction -- Now always load next radio track on last queue track ended (#87) -- Now exclude tracks without file from radio candidates (#88) -- skip to next track properly on 40X errors (#86) - -Other: - -- Switched to towncrier for changelog management and compilation - -## 0.5.2 (2018-02-26) - -- Fixed broken file import due to wrong url (#73) -- More accurate mimetype detection -- Fixed really small size on small screens -- Added masonry layout for artists, requests and radios (#68) -- We now have a favicon! -- Fixed truncated play icon (#65) - -## 0.5.1 (2018-02-24) - -- Front: Fixed broken ajax call on radio builder (#69) -- Front: Shuffle now restart next track from beginning (#70) -- Front: volume slider should now have the same style everywhere (#72) - -## 0.5 (2018-02-24) - -- Front: Now reset player colors when track has no cover (#46) -- Front: play button now disabled for unplayable tracks -- API: You can now enable or disable registration on the fly, via a preference (#58) -- Front: can now signup via the web interface (#35) -- Front: Fixed broken redirection on login -- Front: Fixed broken error handling on settings and login form - -About page: - -There is a brand new about page on instances (/about), and instance -owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/). - -Transcoding: - -Basic transcoding is now available to/from the following formats : ogg and mp3. - -_This is still an alpha feature at the moment, please report any bug._ - -This relies internally on FFMPEG and can put some load on your server. -It's definitely recommended you setup some caching for the transcoded files -at your webserver level. Check the the example nginx file at deploy/nginx.conf -for an implementation. - -On the frontend, usage of transcoding should be transparent in the player. - -Music Requests: - -This release includes a new feature, music requests, which allows users -to request music they'd like to see imported. -Admins can browse those requests and mark them as completed when -an import is made. - -## 0.4 (2018-02-18) - -- Front: ambiant colors in player based on current track cover (#59) -- Front: simplified front dev setup thanks to webpack proxy (#59) -- Front: added some unittests for the store (#55) -- Front: fixed broken login redirection when 401 -- Front: Removed autoplay on page reload -- API: Added a /instance/settings endpoint -- Front: load /instance/settings on page load -- Added settings to report JS and Python error to a Sentry instance - This is disabled by default, but feel free to enable it if you want - to help us by sending your error reports :) (#8) - -## 0.3.5 (2018-01-07) - -- Smarter BACKEND_URL in frontend - -## 0.3.4 (2018-01-07) - -- Fixed wrong URL construction in ajax call - -## 0.3.3 (2018-01-07) - -- Users can now create their own dynamic radios (#51) - -## 0.3.2 - -- Fixed an issue in the main dockerfile - -## 0.3.1 - -- Revamped all import logic, everything is more tested and consistent -- Can now use Acoustid in file imports to automatically grab metadata from musicbrainz -- Brand new file import wizard - -## 0.2.7 - -- Shortcuts: can now use the `f` shortcut to toggle the currently playing track - as a favorite (#53) -- Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) -- Player: Added looping controls and shortcuts (#52) -- Player: Added shuffling controls and shortcuts (#52) -- Favorites: can now modify the ordering of track list (#50) -- Library: can now search/reorder results on artist browsing view (#50) -- Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files -- Fixed #56: invalidate tokens on password change, also added change password form -- Fixed #57: now refresh jwt token on page refresh -- removed ugly dividers in batch import list -- Fixed a few padding issues -- Now persist/restore queue/radio/player state automatically -- Removed old broken imports -- Now force tests paths -- Fixed #54: Now use pytest everywhere \o/ -- Now use vuex to manage state for favorites -- Now use vuex to manage state for authentication -- Now use vuex to manage state for player/queue/radios - -## 0.2.6 (2017-12-15) - -- Fixed broken Dockerfile - -## 0.2.5 (2017-12-15) - -Features: - -- Import: can now specify search template when querying import sources (#45) -- Login form: now redirect to previous page after login (#2) -- 404: a decent 404 template, at least (#48) - -Bugfixes: - -- Player: better handling of errors when fetching the audio file (#46) -- Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49) - -Tech: - -- Django 2 compatibility, lot of packages upgrades (#47) - -## 0.2.4 (2017-12-14) - -Features: - -- Models: now store release group mbid on Album model (#7) -- Models: now bind import job to track files (#44) - -Bugfixes: - -- Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43) diff --git a/Makefile b/Makefile index e1f64e782..9f07f488c 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,41 @@ docker-build: docker-metadata build-metadata: ./scripts/build_metadata.py --format env | tee build_metadata.env + +BUILD_DIR = dist +package: + rm -Rf $(BUILD_DIR) + mkdir -p $(BUILD_DIR) + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-api.tar.gz' \ + --owner='root' \ + --group='root' \ + --exclude-vcs \ + api/config \ + api/funkwhale_api \ + api/install_os_dependencies.sh \ + api/manage.py \ + api/poetry.lock \ + api/pyproject.toml \ + api/Readme.md + + cd '$(BUILD_DIR)' && \ + tar --extract --gunzip --file='funkwhale-api.tar.gz' && \ + zip -q 'funkwhale-api.zip' -r api && \ + rm -Rf api + + tar --create --gunzip --file='$(BUILD_DIR)/funkwhale-front.tar.gz' \ + --owner='root' \ + --group='root' \ + --exclude-vcs \ + --transform='s/^front\/dist/front/' \ + front/dist + + cd '$(BUILD_DIR)' && \ + tar --extract --gunzip --file='funkwhale-front.tar.gz' && \ + zip -q 'funkwhale-front.zip' -r front && \ + rm -Rf front + + cd '$(BUILD_DIR)' && \ + cp ../front/tauri/target/release/bundle/appimage/funkwhale_*.AppImage FunkwhaleDesktop.AppImage + + cd '$(BUILD_DIR)' && sha256sum * > SHA256SUMS diff --git a/README.md b/README.md index 361e9a1fc..2400701de 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ If you find a security issue or vulnerability, please report it on our [GitLab i ## Code of conduct -The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/en_US/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. +The Funkwhale collective adheres to a [code of conduct](https://funkwhale.audio/code-of-conduct) in all our community spaces. Please familiarize yourself with this code and follow it when participating in discussions in our spaces. diff --git a/api/Dockerfile b/api/Dockerfile index c6e0ee473..fe400c5b7 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -1,8 +1,4 @@ -FROM alpine:3.17 as requirements - -# We need this additional step to avoid having poetrys deps interacting with our -# dependencies. This is only required until alpine 3.16 is released, since this -# allows us to install poetry as package. +FROM alpine:3.19 as requirements RUN set -eux; \ apk add --no-cache \ @@ -16,7 +12,7 @@ RUN set -eux; \ poetry export --without-hashes --extras typesense > requirements.txt; \ poetry export --without-hashes --with dev > dev-requirements.txt; -FROM alpine:3.17 as builder +FROM alpine:3.19 as builder ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 @@ -41,11 +37,11 @@ RUN set -eux; \ openssl-dev \ postgresql-dev \ zlib-dev \ - py3-cryptography=38.0.3-r1 \ + py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=9.3.0-r0 \ - py3-psycopg2=2.9.5-r0 \ - py3-watchfiles=0.18.1-r0 \ + py3-pillow=10.2.0-r0 \ + py3-psycopg2=2.9.9-r0 \ + py3-watchfiles=0.19.0-r1 \ python3-dev # Create virtual env @@ -65,11 +61,11 @@ RUN --mount=type=cache,target=~/.cache/pip; \ # to install the deps using pip. grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /requirements.txt \ | pip3 install -r /dev/stdin \ - cryptography==38.0.3 \ + cryptography==41.0.7 \ lxml==4.9.3 \ - pillow==9.3.0 \ - psycopg2==2.9.5 \ - watchfiles==0.18.1 + pillow==10.2.0 \ + psycopg2==2.9.9 \ + watchfiles==0.19.0 ARG install_dev_deps=0 RUN --mount=type=cache,target=~/.cache/pip; \ @@ -77,14 +73,14 @@ RUN --mount=type=cache,target=~/.cache/pip; \ if [ "$install_dev_deps" = "1" ] ; then \ grep -Ev 'cryptography|lxml|pillow|psycopg2|watchfiles' /dev-requirements.txt \ | pip3 install -r /dev/stdin \ - cryptography==38.0.3 \ + cryptography==41.0.7 \ lxml==4.9.3 \ - pillow==9.3.0 \ - psycopg2==2.9.5 \ - watchfiles==0.18.1; \ + pillow==10.2.0 \ + psycopg2==2.9.9 \ + watchfiles==0.19.0; \ fi -FROM alpine:3.17 as production +FROM alpine:3.19 as production ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 @@ -101,11 +97,11 @@ RUN set -eux; \ libpq \ libxml2 \ libxslt \ - py3-cryptography=38.0.3-r1 \ + py3-cryptography=41.0.7-r0 \ py3-lxml=4.9.3-r1 \ - py3-pillow=9.3.0-r0 \ - py3-psycopg2=2.9.5-r0 \ - py3-watchfiles=0.18.1-r0 \ + py3-pillow=10.2.0-r0 \ + py3-psycopg2=2.9.9-r0 \ + py3-watchfiles=0.19.0-r1 \ python3 \ tzdata diff --git a/api/Makefile b/api/Makefile index a31857fad..f946180cc 100644 --- a/api/Makefile +++ b/api/Makefile @@ -4,7 +4,7 @@ CPU_CORES := $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) .PHONY: install lint install: - poetry install + poetry install --all-extras lint: poetry run pylint \ diff --git a/api/config/api_urls.py b/api/config/api_urls.py deleted file mode 100644 index 6fa17b3c6..000000000 --- a/api/config/api_urls.py +++ /dev/null @@ -1,97 +0,0 @@ -from django.conf.urls import include, url -from rest_framework import routers -from rest_framework.urlpatterns import format_suffix_patterns - -from funkwhale_api.activity import views as activity_views -from funkwhale_api.audio import views as audio_views -from funkwhale_api.common import routers as common_routers -from funkwhale_api.common import views as common_views -from funkwhale_api.music import views -from funkwhale_api.playlists import views as playlists_views -from funkwhale_api.subsonic.views import SubsonicViewSet -from funkwhale_api.tags import views as tags_views - -router = common_routers.OptionalSlashRouter() -router.register(r"activity", activity_views.ActivityViewSet, "activity") -router.register(r"tags", tags_views.TagViewSet, "tags") -router.register(r"plugins", common_views.PluginViewSet, "plugins") -router.register(r"tracks", views.TrackViewSet, "tracks") -router.register(r"uploads", views.UploadViewSet, "uploads") -router.register(r"libraries", views.LibraryViewSet, "libraries") -router.register(r"listen", views.ListenViewSet, "listen") -router.register(r"stream", views.StreamViewSet, "stream") -router.register(r"artists", views.ArtistViewSet, "artists") -router.register(r"channels", audio_views.ChannelViewSet, "channels") -router.register(r"subscriptions", audio_views.SubscriptionsViewSet, "subscriptions") -router.register(r"albums", views.AlbumViewSet, "albums") -router.register(r"licenses", views.LicenseViewSet, "licenses") -router.register(r"playlists", playlists_views.PlaylistViewSet, "playlists") -router.register(r"mutations", common_views.MutationViewSet, "mutations") -router.register(r"attachments", common_views.AttachmentViewSet, "attachments") -v1_patterns = router.urls - -subsonic_router = routers.SimpleRouter(trailing_slash=False) -subsonic_router.register(r"subsonic/rest", SubsonicViewSet, basename="subsonic") - - -v1_patterns += [ - url(r"^oembed/$", views.OembedView.as_view(), name="oembed"), - url( - r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), - ), - url( - r"^manage/", - include(("funkwhale_api.manage.urls", "manage"), namespace="manage"), - ), - url( - r"^moderation/", - include( - ("funkwhale_api.moderation.urls", "moderation"), namespace="moderation" - ), - ), - url( - r"^federation/", - include( - ("funkwhale_api.federation.api_urls", "federation"), namespace="federation" - ), - ), - url( - r"^providers/", - include(("funkwhale_api.providers.urls", "providers"), namespace="providers"), - ), - url( - r"^favorites/", - include(("funkwhale_api.favorites.urls", "favorites"), namespace="favorites"), - ), - url(r"^search$", views.Search.as_view(), name="search"), - url( - r"^radios/", - include(("funkwhale_api.radios.urls", "radios"), namespace="radios"), - ), - url( - r"^history/", - include(("funkwhale_api.history.urls", "history"), namespace="history"), - ), - url( - r"^", - include(("funkwhale_api.users.api_urls", "users"), namespace="users"), - ), - # XXX: remove if Funkwhale 1.1 - url( - r"^users/", - include(("funkwhale_api.users.api_urls", "users"), namespace="users-nested"), - ), - url( - r"^oauth/", - include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), - ), - url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), - url( - r"^text-preview/?$", common_views.TextPreviewView.as_view(), name="text-preview" - ), -] - -urlpatterns = [ - url(r"^v1/", include((v1_patterns, "v1"), namespace="v1")) -] + format_suffix_patterns(subsonic_router.urls, allowed=["view"]) diff --git a/api/config/routing.py b/api/config/routing.py index ec5f90e6e..2b440518f 100644 --- a/api/config/routing.py +++ b/api/config/routing.py @@ -1,7 +1,7 @@ from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter -from django.conf.urls import url from django.core.asgi import get_asgi_application +from django.urls import re_path from funkwhale_api.instance import consumers @@ -10,7 +10,12 @@ application = ProtocolTypeRouter( # Empty for now (http->django views is added by default) "websocket": AuthMiddlewareStack( URLRouter( - [url("^api/v1/activity$", consumers.InstanceActivityConsumer.as_asgi())] + [ + re_path( + "^api/v1/activity$", + consumers.InstanceActivityConsumer.as_asgi(), + ) + ] ) ), "http": get_asgi_application(), diff --git a/api/config/settings/common.py b/api/config/settings/common.py index de4117edc..5865bf9a0 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -2,7 +2,7 @@ import logging.config import sys import warnings from collections import OrderedDict -from urllib.parse import urlsplit +from urllib.parse import urlparse, urlsplit import environ from celery.schedules import crontab @@ -13,7 +13,29 @@ APPS_DIR = ROOT_DIR.path("funkwhale_api") env = environ.Env() ENV = env -LOGLEVEL = env("LOGLEVEL", default="info").upper() +# If DEBUG is `true`, we automatically set the loglevel to "DEBUG" +# If DEBUG is `false`, we try to read the level from LOGLEVEL environment and default to "INFO" +LOGLEVEL = ( + "DEBUG" if env.bool("DEBUG", False) else env("LOGLEVEL", default="info").upper() +) +""" +Default logging level for the Funkwhale processes. + +.. note:: + The `DEBUG` variable overrides the `LOGLEVEL` if it is set to `TRUE`. + + The `LOGLEVEL` value only applies if `DEBUG` is `false` or not present. + +Available levels: + +- ``debug`` +- ``info`` +- ``warning`` +- ``error`` +- ``critical`` + +""" + IS_DOCKER_SETUP = env.bool("IS_DOCKER_SETUP", False) @@ -35,19 +57,6 @@ if env("FUNKWHALE_SENTRY_DSN", default=None) is not None: ) sentry_sdk.set_tag("instance", env("FUNKWHALE_HOSTNAME")) -""" -Default logging level for the Funkwhale processes - -Available levels: - -- ``debug`` -- ``info`` -- ``warning`` -- ``error`` -- ``critical`` - -""" # pylint: disable=W0105 - LOGGING_CONFIG = None logging.config.dictConfig( { @@ -187,9 +196,7 @@ request errors related to this. FUNKWHALE_SPA_HTML_CACHE_DURATION = env.int( "FUNKWHALE_SPA_HTML_CACHE_DURATION", default=60 * 15 ) -FUNKWHALE_EMBED_URL = env( - "FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/front/embed.html" -) +FUNKWHALE_EMBED_URL = env("FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/embed.html") FUNKWHALE_SPA_REWRITE_MANIFEST = env.bool( "FUNKWHALE_SPA_REWRITE_MANIFEST", default=True ) @@ -217,6 +224,13 @@ ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=[]) + [FUNKWHALE_HOSTNA List of allowed hostnames for which the Funkwhale server will answer. """ +CSRF_TRUSTED_ORIGINS = [urlparse(o, FUNKWHALE_PROTOCOL).geturl() for o in ALLOWED_HOSTS] +""" +List of origins that are trusted for unsafe requests +We simply consider all allowed hosts to be trusted origins +See https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-trusted-origins +""" + # APP CONFIGURATION # ------------------------------------------------------------------------------ DJANGO_APPS = ( @@ -823,7 +837,7 @@ If you're using password auth (the extra slash is important) .. note:: If you want to use Redis over unix sockets, you also need to update - :attr:`CELERY_BROKER_URL`, because the scheme differ from the one used by + :attr:`CELERY_BROKER_URL`, because the scheme differs from the one used by :attr:`CACHE_URL`. """ @@ -874,7 +888,7 @@ to use a different server or use Redis sockets to connect. Example: -- ``redis://127.0.0.1:6379/0`` +- ``unix://127.0.0.1:6379/0`` - ``redis+socket:///run/redis/redis.sock?virtual_host=0`` """ @@ -935,12 +949,14 @@ CELERY_BEAT_SCHEDULE = { ), "options": {"expires": 60 * 60}, }, - "typesense.build_canonical_index": { +} + +if env.str("TYPESENSE_API_KEY", default=None): + CELERY_BEAT_SCHEDULE["typesense.build_canonical_index"] = { "task": "typesense.build_canonical_index", "schedule": crontab(day_of_week="*/2", minute="0", hour="3"), "options": {"expires": 60 * 60 * 24}, - }, -} + } if env.bool("ADD_ALBUM_TAGS_FROM_TRACKS", default=True): CELERY_BEAT_SCHEDULE["music.albums_set_tags_from_tracks"] = { @@ -1186,7 +1202,7 @@ if BROWSABLE_API_ENABLED: "rest_framework.renderers.BrowsableAPIRenderer", ) -REST_AUTH_SERIALIZERS = { +REST_AUTH = { "PASSWORD_RESET_SERIALIZER": "funkwhale_api.users.serializers.PasswordResetSerializer", # noqa "PASSWORD_RESET_CONFIRM_SERIALIZER": "funkwhale_api.users.serializers.PasswordResetConfirmSerializer", # noqa } diff --git a/api/config/settings/local.py b/api/config/settings/local.py index b1dc93f19..10cfbdbc3 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -96,8 +96,6 @@ CELERY_TASK_ALWAYS_EAGER = False # Your local stuff: Below this line define 3rd party library settings -CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS] - REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "funkwhale_api.schema.CustomAutoSchema" SPECTACULAR_SETTINGS = { "TITLE": "Funkwhale API", diff --git a/api/config/settings/production.py b/api/config/settings/production.py index 589286ab2..815828bd5 100644 --- a/api/config/settings/production.py +++ b/api/config/settings/production.py @@ -41,14 +41,6 @@ SECRET_KEY = env("DJANGO_SECRET_KEY") # SESSION_COOKIE_HTTPONLY = True # SECURE_SSL_REDIRECT = env.bool("DJANGO_SECURE_SSL_REDIRECT", default=True) -# SITE CONFIGURATION -# ------------------------------------------------------------------------------ -# Hosts/domain names that are valid for this site -# See https://docs.djangoproject.com/en/1.6/ref/settings/#allowed-hosts -CSRF_TRUSTED_ORIGINS = ALLOWED_HOSTS - -# END SITE CONFIGURATION - # Static Assets # ------------------------ STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage" diff --git a/api/config/urls/__init__.py b/api/config/urls/__init__.py index d8b4c891e..257249b1f 100644 --- a/api/config/urls/__init__.py +++ b/api/config/urls/__init__.py @@ -1,7 +1,6 @@ from django.conf import settings -from django.conf.urls import url from django.conf.urls.static import static -from django.urls import include, path +from django.urls import include, path, re_path from django.views import defaults as default_views from config import plugins @@ -10,34 +9,34 @@ from funkwhale_api.common import admin plugins_patterns = plugins.trigger_filter(plugins.URLS, [], enabled=True) api_patterns = [ - url("v1/", include("config.urls.api")), - url("v2/", include("config.urls.api_v2")), - url("subsonic/", include("config.urls.subsonic")), + re_path("v1/", include("config.urls.api")), + re_path("v2/", include("config.urls.api_v2")), + re_path("subsonic/", include("config.urls.subsonic")), ] urlpatterns = [ # Django Admin, use {% url 'admin:index' %} - url(settings.ADMIN_URL, admin.site.urls), - url(r"^api/", include((api_patterns, "api"), namespace="api")), - url( + re_path(settings.ADMIN_URL, admin.site.urls), + re_path(r"^api/", include((api_patterns, "api"), namespace="api")), + re_path( r"^", include( ("funkwhale_api.federation.urls", "federation"), namespace="federation" ), ), - url(r"^api/v1/auth/", include("funkwhale_api.users.rest_auth_urls")), - url(r"^accounts/", include("allauth.urls")), + re_path(r"^api/v1/auth/", include("funkwhale_api.users.rest_auth_urls")), + re_path(r"^accounts/", include("allauth.urls")), ] + plugins_patterns if settings.DEBUG: # This allows the error pages to be debugged during development, just visit # these url in browser to see how these error pages look like. urlpatterns += [ - url(r"^400/$", default_views.bad_request), - url(r"^403/$", default_views.permission_denied), - url(r"^404/$", default_views.page_not_found), - url(r"^500/$", default_views.server_error), + re_path(r"^400/$", default_views.bad_request), + re_path(r"^403/$", default_views.permission_denied), + re_path(r"^404/$", default_views.page_not_found), + re_path(r"^500/$", default_views.server_error), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if "debug_toolbar" in settings.INSTALLED_APPS: @@ -49,5 +48,5 @@ if settings.DEBUG: if "silk" in settings.INSTALLED_APPS: urlpatterns = [ - url(r"^api/silk/", include("silk.urls", namespace="silk")) + re_path(r"^api/silk/", include("silk.urls", namespace="silk")) ] + urlpatterns diff --git a/api/config/urls/api.py b/api/config/urls/api.py index 520224f9f..87df7ff99 100644 --- a/api/config/urls/api.py +++ b/api/config/urls/api.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.activity import views as activity_views from funkwhale_api.audio import views as audio_views @@ -28,61 +29,61 @@ router.register(r"attachments", common_views.AttachmentViewSet, "attachments") v1_patterns = router.urls v1_patterns += [ - url(r"^oembed/$", views.OembedView.as_view(), name="oembed"), - url( + re_path(r"^oembed/$", views.OembedView.as_view(), name="oembed"), + re_path( r"^instance/", include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), ), - url( + re_path( r"^manage/", include(("funkwhale_api.manage.urls", "manage"), namespace="manage"), ), - url( + re_path( r"^moderation/", include( ("funkwhale_api.moderation.urls", "moderation"), namespace="moderation" ), ), - url( + re_path( r"^federation/", include( ("funkwhale_api.federation.api_urls", "federation"), namespace="federation" ), ), - url( + re_path( r"^providers/", include(("funkwhale_api.providers.urls", "providers"), namespace="providers"), ), - url( + re_path( r"^favorites/", include(("funkwhale_api.favorites.urls", "favorites"), namespace="favorites"), ), - url(r"^search$", views.Search.as_view(), name="search"), - url( + re_path(r"^search$", views.Search.as_view(), name="search"), + re_path( r"^radios/", include(("funkwhale_api.radios.urls", "radios"), namespace="radios"), ), - url( + re_path( r"^history/", include(("funkwhale_api.history.urls", "history"), namespace="history"), ), - url( + re_path( r"^", include(("funkwhale_api.users.api_urls", "users"), namespace="users"), ), # XXX: remove if Funkwhale 1.1 - url( + re_path( r"^users/", include(("funkwhale_api.users.api_urls", "users"), namespace="users-nested"), ), - url( + re_path( r"^oauth/", include(("funkwhale_api.users.oauth.urls", "oauth"), namespace="oauth"), ), - url(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), - url( + re_path(r"^rate-limit/?$", common_views.RateLimitView.as_view(), name="rate-limit"), + re_path( r"^text-preview/?$", common_views.TextPreviewView.as_view(), name="text-preview" ), ] -urlpatterns = [url("", include((v1_patterns, "v1"), namespace="v1"))] +urlpatterns = [re_path("", include((v1_patterns, "v1"), namespace="v1"))] diff --git a/api/config/urls/api_v2.py b/api/config/urls/api_v2.py index d5e040337..a1d0befc8 100644 --- a/api/config/urls/api_v2.py +++ b/api/config/urls/api_v2.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.common import routers as common_routers @@ -6,14 +7,14 @@ router = common_routers.OptionalSlashRouter() v2_patterns = router.urls v2_patterns += [ - url( + re_path( r"^instance/", - include(("funkwhale_api.instance.urls", "instance"), namespace="instance"), + include(("funkwhale_api.instance.urls_v2", "instance"), namespace="instance"), ), - url( + re_path( r"^radios/", include(("funkwhale_api.radios.urls_v2", "radios"), namespace="radios"), ), ] -urlpatterns = [url("", include((v2_patterns, "v2"), namespace="v2"))] +urlpatterns = [re_path("", include((v2_patterns, "v2"), namespace="v2"))] diff --git a/api/config/urls/subsonic.py b/api/config/urls/subsonic.py index 08adebf93..ee049e90e 100644 --- a/api/config/urls/subsonic.py +++ b/api/config/urls/subsonic.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from rest_framework import routers from rest_framework.urlpatterns import format_suffix_patterns @@ -8,7 +9,9 @@ subsonic_router = routers.SimpleRouter(trailing_slash=False) subsonic_router.register(r"rest", SubsonicViewSet, basename="subsonic") subsonic_patterns = format_suffix_patterns(subsonic_router.urls, allowed=["view"]) -urlpatterns = [url("", include((subsonic_patterns, "subsonic"), namespace="subsonic"))] +urlpatterns = [ + re_path("", include((subsonic_patterns, "subsonic"), namespace="subsonic")) +] # urlpatterns = [ # url( diff --git a/api/funkwhale_api/common/authentication.py b/api/funkwhale_api/common/authentication.py index 9e63d580d..e40e09be0 100644 --- a/api/funkwhale_api/common/authentication.py +++ b/api/funkwhale_api/common/authentication.py @@ -1,6 +1,6 @@ -from allauth.account.utils import send_email_confirmation +from allauth.account.models import EmailAddress from django.core.cache import cache -from django.utils.translation import ugettext as _ +from django.utils.translation import gettext as _ from oauth2_provider.contrib.rest_framework.authentication import ( OAuth2Authentication as BaseOAuth2Authentication, ) @@ -20,9 +20,13 @@ def resend_confirmation_email(request, user): if cache.get(cache_key): return False - done = send_email_confirmation(request, user) + # We do the sending of the conformation by hand because we don't want to pass the request down + # to the email rendering, which would cause another UnverifiedEmail Exception and restarts the sending + # again and again + email = EmailAddress.objects.get_for_user(user, user.email) + email.send_confirmation() cache.set(cache_key, True, THROTTLE_DELAY) - return done + return True class OAuth2Authentication(BaseOAuth2Authentication): diff --git a/api/funkwhale_api/common/filters.py b/api/funkwhale_api/common/filters.py index 6fb4b1b45..65f5e008d 100644 --- a/api/funkwhale_api/common/filters.py +++ b/api/funkwhale_api/common/filters.py @@ -1,5 +1,6 @@ from django import forms from django.db.models import Q +from django.db.models.functions import Lower from django_filters import rest_framework as filters from django_filters import widgets from drf_spectacular.utils import extend_schema_field @@ -239,3 +240,19 @@ class ActorScopeFilter(filters.CharFilter): raise EmptyQuerySet() return Q(**{self.actor_field: actor}) + + +class CaseInsensitiveNameOrderingFilter(filters.OrderingFilter): + def filter(self, qs, value): + order_by = [] + + if value is None: + return qs + + for param in value: + if param == "name": + order_by.append(Lower("name")) + else: + order_by.append(self.get_ordering_value(param)) + + return qs.order_by(*order_by) diff --git a/api/funkwhale_api/common/management/commands/gitpod.py b/api/funkwhale_api/common/management/commands/gitpod.py index 78d8c9ddb..3887c7f3c 100644 --- a/api/funkwhale_api/common/management/commands/gitpod.py +++ b/api/funkwhale_api/common/management/commands/gitpod.py @@ -36,22 +36,7 @@ class Command(BaseCommand): self.stdout.write("") def init(self): - try: - user = User.objects.get(username="gitpod") - except Exception: - call_command( - "createsuperuser", - username="gitpod", - email="gitpod@example.com", - no_input=False, - ) - user = User.objects.get(username="gitpod") - - user.set_password("gitpod") - if not user.actor: - user.create_actor() - - user.save() + user = User.objects.get(username="gitpod") # Allow anonymous access preferences.set("common__api_authentication_required", False) diff --git a/api/funkwhale_api/common/management/commands/testdata.py b/api/funkwhale_api/common/management/commands/testdata.py index fa7ae631b..f65ef1985 100644 --- a/api/funkwhale_api/common/management/commands/testdata.py +++ b/api/funkwhale_api/common/management/commands/testdata.py @@ -10,7 +10,7 @@ class Command(BaseCommand): self.help = "Helper to generate randomized testdata" self.type_choices = {"notifications": self.handle_notifications} - self.missing_args_message = f"Please specify one of the following sub-commands: { *self.type_choices.keys(), }" + self.missing_args_message = f"Please specify one of the following sub-commands: {*self.type_choices.keys(), }" def add_arguments(self, parser): subparsers = parser.add_subparsers(dest="subcommand") diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py index b83beb2e6..63ba1b378 100644 --- a/api/funkwhale_api/common/middleware.py +++ b/api/funkwhale_api/common/middleware.py @@ -150,7 +150,9 @@ def get_default_head_tags(path): { "tag": "meta", "property": "og:image", - "content": utils.join_url(settings.FUNKWHALE_URL, "/front/favicon.png"), + "content": utils.join_url( + settings.FUNKWHALE_URL, "/android-chrome-512x512.png" + ), }, { "tag": "meta", diff --git a/api/funkwhale_api/common/models.py b/api/funkwhale_api/common/models.py index ebd705813..575ff864b 100644 --- a/api/funkwhale_api/common/models.py +++ b/api/funkwhale_api/common/models.py @@ -60,12 +60,12 @@ class NullsLastSQLCompiler(SQLCompiler): class NullsLastQuery(models.sql.query.Query): """Use a custom compiler to inject 'NULLS LAST' (for PostgreSQL).""" - def get_compiler(self, using=None, connection=None): + def get_compiler(self, using=None, connection=None, elide_empty=True): if using is None and connection is None: raise ValueError("Need either using or connection") if using: connection = connections[using] - return NullsLastSQLCompiler(self, connection, using) + return NullsLastSQLCompiler(self, connection, using, elide_empty) class NullsLastQuerySet(models.QuerySet): diff --git a/api/funkwhale_api/common/preferences.py b/api/funkwhale_api/common/preferences.py index 930bd9e27..8483d4487 100644 --- a/api/funkwhale_api/common/preferences.py +++ b/api/funkwhale_api/common/preferences.py @@ -2,7 +2,7 @@ import json from django import forms from django.conf import settings -from django.contrib.postgres.forms import JSONField +from django.forms import JSONField from dynamic_preferences import serializers, types from dynamic_preferences.registries import global_preferences_registry @@ -93,7 +93,6 @@ class SerializedPreference(types.BasePreferenceType): serializer """ - serializer = JSONSerializer data_serializer_class = None field_class = JSONField widget = forms.Textarea diff --git a/api/funkwhale_api/common/serializers.py b/api/funkwhale_api/common/serializers.py index d10969eeb..03817424e 100644 --- a/api/funkwhale_api/common/serializers.py +++ b/api/funkwhale_api/common/serializers.py @@ -5,8 +5,8 @@ import os import PIL from django.core.exceptions import ObjectDoesNotExist from django.core.files.uploadedfile import SimpleUploadedFile -from django.utils.encoding import smart_text -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import smart_str +from django.utils.translation import gettext_lazy as _ from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema_field from rest_framework import serializers @@ -52,7 +52,7 @@ class RelatedField(serializers.RelatedField): self.fail( "does_not_exist", related_field_name=self.related_field_name, - value=smart_text(data), + value=smart_str(data), ) except (TypeError, ValueError): self.fail("invalid") @@ -349,7 +349,7 @@ class ScopesSerializer(serializers.Serializer): class IdentSerializer(serializers.Serializer): type = serializers.CharField() - id = serializers.IntegerField() + id = serializers.CharField() class RateLimitSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/common/signals.py b/api/funkwhale_api/common/signals.py index 1d8e953cc..500e47d84 100644 --- a/api/funkwhale_api/common/signals.py +++ b/api/funkwhale_api/common/signals.py @@ -1,6 +1,6 @@ import django.dispatch -mutation_created = django.dispatch.Signal(providing_args=["mutation"]) -mutation_updated = django.dispatch.Signal( - providing_args=["mutation", "old_is_approved", "new_is_approved"] -) +""" Required args: mutation """ +mutation_created = django.dispatch.Signal() +""" Required args: mutation, old_is_approved, new_is_approved """ +mutation_updated = django.dispatch.Signal() diff --git a/api/funkwhale_api/common/throttling.py b/api/funkwhale_api/common/throttling.py index 06b99f9f0..264bb92c5 100644 --- a/api/funkwhale_api/common/throttling.py +++ b/api/funkwhale_api/common/throttling.py @@ -7,7 +7,7 @@ from rest_framework import throttling as rest_throttling def get_ident(user, request): if user and user.is_authenticated: - return {"type": "authenticated", "id": user.pk} + return {"type": "authenticated", "id": f"{user.pk}"} ident = rest_throttling.BaseThrottle().get_ident(request) return {"type": "anonymous", "id": ident} diff --git a/api/funkwhale_api/common/validators.py b/api/funkwhale_api/common/validators.py index ee69391e4..8a55d77b2 100644 --- a/api/funkwhale_api/common/validators.py +++ b/api/funkwhale_api/common/validators.py @@ -6,7 +6,7 @@ from django.core.exceptions import ValidationError from django.core.files.images import get_image_dimensions from django.template.defaultfilters import filesizeformat from django.utils.deconstruct import deconstructible -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ @deconstructible diff --git a/api/funkwhale_api/contrib/listenbrainz/client.py b/api/funkwhale_api/contrib/listenbrainz/client.py deleted file mode 100644 index 70db31dc3..000000000 --- a/api/funkwhale_api/contrib/listenbrainz/client.py +++ /dev/null @@ -1,168 +0,0 @@ -# Copyright (c) 2018 Philipp Wolfer <ph.wolfer@gmail.com> -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -import json -import logging -import ssl -import time -from http.client import HTTPSConnection - -HOST_NAME = "api.listenbrainz.org" -PATH_SUBMIT = "/1/submit-listens" -SSL_CONTEXT = ssl.create_default_context() - - -class Track: - """ - Represents a single track to submit. - - See https://listenbrainz.readthedocs.io/en/latest/dev/json.html - """ - - def __init__(self, artist_name, track_name, release_name=None, additional_info={}): - """ - Create a new Track instance - @param artist_name as str - @param track_name as str - @param release_name as str - @param additional_info as dict - """ - self.artist_name = artist_name - self.track_name = track_name - self.release_name = release_name - self.additional_info = additional_info - - @staticmethod - def from_dict(data): - return Track( - data["artist_name"], - data["track_name"], - data.get("release_name", None), - data.get("additional_info", {}), - ) - - def to_dict(self): - return { - "artist_name": self.artist_name, - "track_name": self.track_name, - "release_name": self.release_name, - "additional_info": self.additional_info, - } - - def __repr__(self): - return f"Track({self.artist_name}, {self.track_name})" - - -class ListenBrainzClient: - """ - Submit listens to ListenBrainz.org. - - See https://listenbrainz.readthedocs.io/en/latest/dev/api.html - """ - - def __init__(self, user_token, logger=logging.getLogger(__name__)): - self.__next_request_time = 0 - self.user_token = user_token - self.logger = logger - - def listen(self, listened_at, track): - """ - Submit a listen for a track - @param listened_at as int - @param entry as Track - """ - payload = _get_payload(track, listened_at) - return self._submit("single", [payload]) - - def playing_now(self, track): - """ - Submit a playing now notification for a track - @param track as Track - """ - payload = _get_payload(track) - return self._submit("playing_now", [payload]) - - def import_tracks(self, tracks): - """ - Import a list of tracks as (listened_at, Track) pairs - @param track as [(int, Track)] - """ - payload = _get_payload_many(tracks) - return self._submit("import", payload) - - def _submit(self, listen_type, payload, retry=0): - self._wait_for_ratelimit() - self.logger.debug("ListenBrainz %s: %r", listen_type, payload) - data = {"listen_type": listen_type, "payload": payload} - headers = { - "Authorization": "Token %s" % self.user_token, - "Content-Type": "application/json", - } - body = json.dumps(data) - conn = HTTPSConnection(HOST_NAME, context=SSL_CONTEXT) - conn.request("POST", PATH_SUBMIT, body, headers) - response = conn.getresponse() - response_text = response.read() - try: - response_data = json.loads(response_text) - except json.decoder.JSONDecodeError: - response_data = response_text - - self._handle_ratelimit(response) - log_msg = f"Response {response.status}: {response_data!r}" - if response.status == 429 and retry < 5: # Too Many Requests - self.logger.warning(log_msg) - return self._submit(listen_type, payload, retry + 1) - elif response.status == 200: - self.logger.debug(log_msg) - else: - self.logger.error(log_msg) - return response - - def _wait_for_ratelimit(self): - now = time.time() - if self.__next_request_time > now: - delay = self.__next_request_time - now - self.logger.debug("Rate limit applies, delay %d", delay) - time.sleep(delay) - - def _handle_ratelimit(self, response): - remaining = int(response.getheader("X-RateLimit-Remaining", 0)) - reset_in = int(response.getheader("X-RateLimit-Reset-In", 0)) - self.logger.debug("X-RateLimit-Remaining: %i", remaining) - self.logger.debug("X-RateLimit-Reset-In: %i", reset_in) - if remaining == 0: - self.__next_request_time = time.time() + reset_in - - -def _get_payload_many(tracks): - payload = [] - for listened_at, track in tracks: - data = _get_payload(track, listened_at) - payload.append(data) - return payload - - -def _get_payload(track, listened_at=None): - data = {"track_metadata": track.to_dict()} - if listened_at is not None: - data["listened_at"] = listened_at - return data diff --git a/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py b/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py index 81b391840..8671c129b 100644 --- a/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py +++ b/api/funkwhale_api/contrib/listenbrainz/funkwhale_ready.py @@ -1,7 +1,9 @@ +import liblistenbrainz +from django.utils import timezone + import funkwhale_api from config import plugins -from .client import ListenBrainzClient, Track from .funkwhale_startup import PLUGIN @@ -13,15 +15,14 @@ def submit_listen(listening, conf, **kwargs): logger = PLUGIN["logger"] logger.info("Submitting listen to ListenBrainz") - client = ListenBrainzClient(user_token=user_token, logger=logger) - track = get_track(listening.track) - client.listen(int(listening.creation_date.timestamp()), track) + client = liblistenbrainz.ListenBrainz() + client.set_auth_token(user_token) + listen = get_listen(listening.track) + + client.submit_single_listen(listen) -def get_track(track): - artist = track.artist.name - title = track.title - album = None +def get_listen(track): additional_info = { "media_player": "Funkwhale", "media_player_version": funkwhale_api.__version__, @@ -36,7 +37,7 @@ def get_track(track): if track.album: if track.album.title: - album = track.album.title + release_name = track.album.title if track.album.mbid: additional_info["release_mbid"] = str(track.album.mbid) @@ -47,4 +48,10 @@ def get_track(track): if upload: additional_info["duration"] = upload.duration - return Track(artist, title, album, additional_info) + return liblistenbrainz.Listen( + track_name=track.title, + artist_name=track.artist.name, + listened_at=int(timezone.now()), + release_name=release_name, + additional_info=additional_info, + ) diff --git a/api/funkwhale_api/federation/urls.py b/api/funkwhale_api/federation/urls.py index 7bb6fc8a6..3380f3a0d 100644 --- a/api/funkwhale_api/federation/urls.py +++ b/api/funkwhale_api/federation/urls.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from rest_framework import routers from . import views @@ -23,6 +24,8 @@ music_router.register(r"tracks", views.MusicTrackViewSet, "tracks") index_router.register(r"index", views.IndexViewSet, "index") urlpatterns = router.urls + [ - url("federation/music/", include((music_router.urls, "music"), namespace="music")), - url("federation/", include((index_router.urls, "index"), namespace="index")), + re_path( + "federation/music/", include((music_router.urls, "music"), namespace="music") + ), + re_path("federation/", include((index_router.urls, "index"), namespace="index")), ] diff --git a/api/funkwhale_api/instance/dynamic_preferences_registry.py b/api/funkwhale_api/instance/dynamic_preferences_registry.py index d34fb814f..402fe7e16 100644 --- a/api/funkwhale_api/instance/dynamic_preferences_registry.py +++ b/api/funkwhale_api/instance/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from django.core.validators import FileExtensionValidator from django.forms import widgets from dynamic_preferences import types @@ -170,3 +171,18 @@ class Banner(ImagePreference): default = None help_text = "This banner will be displayed on your pod's landing and about page. At least 600x100px recommended." field_kwargs = {"required": False} + + +@global_preferences_registry.register +class Location(types.ChoicePreference): + show_in_api = True + section = instance + name = "location" + verbose_name = "Server Location" + default = "" + choices = [(country.alpha_2, country.name) for country in pycountry.countries] + help_text = ( + "The country or territory in which your server is located. This is displayed in the server's Nodeinfo " + "endpoint." + ) + field_kwargs = {"choices": choices, "required": False} diff --git a/api/funkwhale_api/instance/serializers.py b/api/funkwhale_api/instance/serializers.py index 15eeaed59..7856df065 100644 --- a/api/funkwhale_api/instance/serializers.py +++ b/api/funkwhale_api/instance/serializers.py @@ -12,6 +12,17 @@ class SoftwareSerializer(serializers.Serializer): return "funkwhale" +class SoftwareSerializer_v2(SoftwareSerializer): + repository = serializers.SerializerMethodField() + homepage = serializers.SerializerMethodField() + + def get_repository(self, obj): + return "https://dev.funkwhale.audio/funkwhale/funkwhale" + + def get_homepage(self, obj): + return "https://funkwhale.audio" + + class ServicesSerializer(serializers.Serializer): inbound = serializers.ListField(child=serializers.CharField(), default=[]) outbound = serializers.ListField(child=serializers.CharField(), default=[]) @@ -31,6 +42,8 @@ class UsersUsageSerializer(serializers.Serializer): class UsageSerializer(serializers.Serializer): users = UsersUsageSerializer() + localPosts = serializers.IntegerField(required=False) + localComments = serializers.IntegerField(required=False) class TotalCountSerializer(serializers.Serializer): @@ -92,19 +105,14 @@ class MetadataSerializer(serializers.Serializer): private = serializers.SerializerMethodField() shortDescription = serializers.SerializerMethodField() longDescription = serializers.SerializerMethodField() - rules = serializers.SerializerMethodField() contactEmail = serializers.SerializerMethodField() - terms = serializers.SerializerMethodField() nodeName = serializers.SerializerMethodField() banner = serializers.SerializerMethodField() defaultUploadQuota = serializers.SerializerMethodField() - library = serializers.SerializerMethodField() supportedUploadExtensions = serializers.ListField(child=serializers.CharField()) allowList = serializers.SerializerMethodField() - reportTypes = ReportTypeSerializer(source="report_types", many=True) funkwhaleSupportMessageEnabled = serializers.SerializerMethodField() instanceSupportMessage = serializers.SerializerMethodField() - endpoints = EndpointsSerializer() usage = MetadataUsageSerializer(source="stats", required=False) def get_private(self, obj) -> bool: @@ -116,15 +124,9 @@ class MetadataSerializer(serializers.Serializer): def get_longDescription(self, obj) -> str: return obj["preferences"].get("instance__long_description") - def get_rules(self, obj) -> str: - return obj["preferences"].get("instance__rules") - def get_contactEmail(self, obj) -> str: return obj["preferences"].get("instance__contact_email") - def get_terms(self, obj) -> str: - return obj["preferences"].get("instance__terms") - def get_nodeName(self, obj) -> str: return obj["preferences"].get("instance__name") @@ -137,15 +139,6 @@ class MetadataSerializer(serializers.Serializer): def get_defaultUploadQuota(self, obj) -> int: return obj["preferences"].get("users__upload_quota") - @extend_schema_field(NodeInfoLibrarySerializer) - def get_library(self, obj): - data = obj["stats"] or {} - data["federationEnabled"] = obj["preferences"].get("federation__enabled") - data["anonymousCanListen"] = not obj["preferences"].get( - "common__api_authentication_required" - ) - return NodeInfoLibrarySerializer(data).data - @extend_schema_field(AllowListStatSerializer) def get_allowList(self, obj): return AllowListStatSerializer( @@ -166,6 +159,62 @@ class MetadataSerializer(serializers.Serializer): return MetadataUsageSerializer(obj["stats"]).data +class Metadata20Serializer(MetadataSerializer): + library = serializers.SerializerMethodField() + reportTypes = ReportTypeSerializer(source="report_types", many=True) + endpoints = EndpointsSerializer() + rules = serializers.SerializerMethodField() + terms = serializers.SerializerMethodField() + + def get_rules(self, obj) -> str: + return obj["preferences"].get("instance__rules") + + def get_terms(self, obj) -> str: + return obj["preferences"].get("instance__terms") + + @extend_schema_field(NodeInfoLibrarySerializer) + def get_library(self, obj): + data = obj["stats"] or {} + data["federationEnabled"] = obj["preferences"].get("federation__enabled") + data["anonymousCanListen"] = not obj["preferences"].get( + "common__api_authentication_required" + ) + return NodeInfoLibrarySerializer(data).data + + +class MetadataContentLocalSerializer(serializers.Serializer): + artists = serializers.IntegerField() + releases = serializers.IntegerField() + recordings = serializers.IntegerField() + hoursOfContent = serializers.IntegerField() + + +class MetadataContentCategorySerializer(serializers.Serializer): + name = serializers.CharField() + count = serializers.IntegerField() + + +class MetadataContentSerializer(serializers.Serializer): + local = MetadataContentLocalSerializer() + topMusicCategories = MetadataContentCategorySerializer(many=True) + topPodcastCategories = MetadataContentCategorySerializer(many=True) + + +class Metadata21Serializer(MetadataSerializer): + languages = serializers.ListField(child=serializers.CharField()) + location = serializers.CharField() + content = MetadataContentSerializer() + features = serializers.ListField(child=serializers.CharField()) + codeOfConduct = serializers.SerializerMethodField() + + def get_codeOfConduct(self, obj) -> str: + return ( + full_url("/about/pod#rules") + if obj["preferences"].get("instance__rules") + else "" + ) + + class NodeInfo20Serializer(serializers.Serializer): version = serializers.SerializerMethodField() software = SoftwareSerializer() @@ -196,9 +245,36 @@ class NodeInfo20Serializer(serializers.Serializer): usage = {"users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}} return UsageSerializer(usage).data - @extend_schema_field(MetadataSerializer) + @extend_schema_field(Metadata20Serializer) def get_metadata(self, obj): - return MetadataSerializer(obj).data + return Metadata20Serializer(obj).data + + +class NodeInfo21Serializer(NodeInfo20Serializer): + version = serializers.SerializerMethodField() + software = SoftwareSerializer_v2() + + def get_version(self, obj) -> str: + return "2.1" + + @extend_schema_field(UsageSerializer) + def get_usage(self, obj): + usage = None + if obj["preferences"]["instance__nodeinfo_stats_enabled"]: + usage = obj["stats"] + usage["localPosts"] = 0 + usage["localComments"] = 0 + else: + usage = { + "users": {"total": 0, "activeMonth": 0, "activeHalfyear": 0}, + "localPosts": 0, + "localComments": 0, + } + return UsageSerializer(usage).data + + @extend_schema_field(Metadata21Serializer) + def get_metadata(self, obj): + return Metadata21Serializer(obj).data class SpaManifestIconSerializer(serializers.Serializer): diff --git a/api/funkwhale_api/instance/stats.py b/api/funkwhale_api/instance/stats.py index 923a1dadb..9353eb53e 100644 --- a/api/funkwhale_api/instance/stats.py +++ b/api/funkwhale_api/instance/stats.py @@ -1,6 +1,6 @@ import datetime -from django.db.models import Sum +from django.db.models import Count, F, Sum from django.utils import timezone from funkwhale_api.favorites.models import TrackFavorite @@ -22,6 +22,39 @@ def get(): } +def get_content(): + return { + "local": { + "artists": get_artists(), + "releases": get_albums(), + "recordings": get_tracks(), + "hoursOfContent": get_music_duration(), + }, + "topMusicCategories": get_top_music_categories(), + "topPodcastCategories": get_top_podcast_categories(), + } + + +def get_top_music_categories(): + return ( + models.Track.objects.filter(artist__content_category="music") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + +def get_top_podcast_categories(): + return ( + models.Track.objects.filter(artist__content_category="podcast") + .exclude(tagged_items__tag_id=None) + .values(name=F("tagged_items__tag__name")) + .annotate(count=Count("name")) + .order_by("-count")[:3] + ) + + def get_users(): qs = User.objects.filter(is_active=True) now = timezone.now() diff --git a/api/funkwhale_api/instance/urls.py b/api/funkwhale_api/instance/urls.py index 6047eca19..9922495bc 100644 --- a/api/funkwhale_api/instance/urls.py +++ b/api/funkwhale_api/instance/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -8,7 +8,7 @@ admin_router = routers.OptionalSlashRouter() admin_router.register(r"admin/settings", views.AdminSettings, "admin-settings") urlpatterns = [ - url(r"^nodeinfo/2.0/?$", views.NodeInfo.as_view(), name="nodeinfo-2.0"), - url(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), - url(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), + re_path(r"^nodeinfo/2.0/?$", views.NodeInfo20.as_view(), name="nodeinfo-2.0"), + re_path(r"^settings/?$", views.InstanceSettings.as_view(), name="settings"), + re_path(r"^spa-manifest.json", views.SpaManifest.as_view(), name="spa-manifest"), ] + admin_router.urls diff --git a/api/funkwhale_api/instance/urls_v2.py b/api/funkwhale_api/instance/urls_v2.py new file mode 100644 index 000000000..3d4ed8b4e --- /dev/null +++ b/api/funkwhale_api/instance/urls_v2.py @@ -0,0 +1,7 @@ +from django.urls import re_path + +from . import views + +urlpatterns = [ + re_path(r"^nodeinfo/2.1/?$", views.NodeInfo21.as_view(), name="nodeinfo-2.1"), +] diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index ffde3db4a..f87704452 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -11,6 +11,7 @@ from dynamic_preferences.api import viewsets as preferences_viewsets from dynamic_preferences.api.serializers import GlobalPreferenceSerializer from dynamic_preferences.registries import global_preferences_registry from rest_framework import generics, views +from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from funkwhale_api import __version__ as funkwhale_version @@ -58,9 +59,11 @@ class InstanceSettings(generics.GenericAPIView): @method_decorator(ensure_csrf_cookie, name="dispatch") -class NodeInfo(views.APIView): +class NodeInfo20(views.APIView): permission_classes = [] authentication_classes = [] + serializer_class = serializers.NodeInfo20Serializer + renderer_classes = (JSONRenderer,) @extend_schema( responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" @@ -81,6 +84,7 @@ class NodeInfo(views.APIView): data = { "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, "preferences": pref, "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() if pref["instance__nodeinfo_stats_enabled"] @@ -112,7 +116,65 @@ class NodeInfo(views.APIView): data["endpoints"]["channels"] = reverse( "federation:index:index-channels" ) - serializer = serializers.NodeInfo20Serializer(data) + serializer = self.serializer_class(data) + return Response( + serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE + ) + + +class NodeInfo21(NodeInfo20): + serializer_class = serializers.NodeInfo21Serializer + + @extend_schema( + responses=serializers.NodeInfo20Serializer, operation_id="getNodeInfo20" + ) + def get(self, request): + pref = preferences.all() + if ( + pref["moderation__allow_list_public"] + and pref["moderation__allow_list_enabled"] + ): + allowed_domains = list( + Domain.objects.filter(allowed=True) + .order_by("name") + .values_list("name", flat=True) + ) + else: + allowed_domains = None + + data = { + "software": {"version": funkwhale_version}, + "services": {"inbound": ["atom1.0"], "outbound": ["atom1.0"]}, + "preferences": pref, + "stats": cache_memoize(600, prefix="memoize:instance:stats")(stats.get)() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "actorId": get_service_actor().fid, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowed_domains": allowed_domains, + "languages": pref.get("moderation__languages"), + "location": pref.get("instance__location"), + "content": cache_memoize(600, prefix="memoize:instance:content")( + stats.get_content + )() + if pref["instance__nodeinfo_stats_enabled"] + else None, + "features": [ + "channels", + "podcasts", + ], + } + + if not pref.get("common__api_authentication_required"): + data["features"].append("anonymousCanListen") + + if pref.get("federation__enabled"): + data["features"].append("federation") + + if pref.get("music__only_allow_musicbrainz_tagged_files"): + data["features"].append("onlyMbidTaggedContent") + + serializer = self.serializer_class(data) return Response( serializer.data, status=200, content_type=NODEINFO_2_CONTENT_TYPE ) diff --git a/api/funkwhale_api/manage/urls.py b/api/funkwhale_api/manage/urls.py index 9cf6acced..422849d5c 100644 --- a/api/funkwhale_api/manage/urls.py +++ b/api/funkwhale_api/manage/urls.py @@ -1,4 +1,5 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path from funkwhale_api.common import routers @@ -32,14 +33,16 @@ other_router.register(r"channels", views.ManageChannelViewSet, "channels") other_router.register(r"tags", views.ManageTagViewSet, "tags") urlpatterns = [ - url( + re_path( r"^federation/", include((federation_router.urls, "federation"), namespace="federation"), ), - url(r"^library/", include((library_router.urls, "instance"), namespace="library")), - url( + re_path( + r"^library/", include((library_router.urls, "instance"), namespace="library") + ), + re_path( r"^moderation/", include((moderation_router.urls, "moderation"), namespace="moderation"), ), - url(r"^users/", include((users_router.urls, "instance"), namespace="users")), + re_path(r"^users/", include((users_router.urls, "instance"), namespace="users")), ] + other_router.urls diff --git a/api/funkwhale_api/moderation/dynamic_preferences_registry.py b/api/funkwhale_api/moderation/dynamic_preferences_registry.py index fbbcd6a61..bda9b5952 100644 --- a/api/funkwhale_api/moderation/dynamic_preferences_registry.py +++ b/api/funkwhale_api/moderation/dynamic_preferences_registry.py @@ -1,3 +1,4 @@ +import pycountry from dynamic_preferences import types from dynamic_preferences.registries import global_preferences_registry from rest_framework import serializers @@ -92,3 +93,18 @@ class SignupFormCustomization(common_preferences.SerializedPreference): required = False default = {} data_serializer_class = CustomFormSerializer + + +@global_preferences_registry.register +class Languages(common_preferences.StringListPreference): + show_in_api = True + section = moderation + name = "languages" + default = ["en"] + verbose_name = "Moderation languages" + help_text = ( + "The language(s) spoken by the server moderator(s). Set this to inform users " + "what languages they should write reports and requests in." + ) + choices = [(lang.alpha_3, lang.name) for lang in pycountry.languages] + field_kwargs = {"choices": choices, "required": False} diff --git a/api/funkwhale_api/moderation/signals.py b/api/funkwhale_api/moderation/signals.py index 16be236e0..d879f4599 100644 --- a/api/funkwhale_api/moderation/signals.py +++ b/api/funkwhale_api/moderation/signals.py @@ -1,3 +1,4 @@ import django.dispatch -report_created = django.dispatch.Signal(providing_args=["report"]) +""" Required argument: report """ +report_created = django.dispatch.Signal() diff --git a/api/funkwhale_api/music/dynamic_preferences_registry.py b/api/funkwhale_api/music/dynamic_preferences_registry.py index 13d5ae56a..20890fde8 100644 --- a/api/funkwhale_api/music/dynamic_preferences_registry.py +++ b/api/funkwhale_api/music/dynamic_preferences_registry.py @@ -32,3 +32,18 @@ class MusicCacheDuration(types.IntPreference): "will be erased and retranscoded on the next listening." ) field_kwargs = {"required": False} + + +@global_preferences_registry.register +class MbidTaggedContent(types.BooleanPreference): + show_in_api = True + section = music + name = "only_allow_musicbrainz_tagged_files" + verbose_name = "Only allow Musicbrainz tagged files" + help_text = ( + "Requires uploaded files to be tagged with a MusicBrainz ID. " + "Enabling this setting has no impact on previously uploaded files. " + "You can use the CLI to clear files that don't contain an MBID or " + "or enable quality filtering to hide untagged content from API calls. " + ) + default = False diff --git a/api/funkwhale_api/music/filters.py b/api/funkwhale_api/music/filters.py index 0fc18bd8a..94fa15e14 100644 --- a/api/funkwhale_api/music/filters.py +++ b/api/funkwhale_api/music/filters.py @@ -104,7 +104,7 @@ class ArtistFilter( distinct=True, library_field="tracks__uploads__library", ) - ordering = django_filters.OrderingFilter( + ordering = common_filters.CaseInsensitiveNameOrderingFilter( fields=( ("id", "id"), ("name", "name"), diff --git a/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py b/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py new file mode 100644 index 000000000..b60ed129e --- /dev/null +++ b/api/funkwhale_api/music/management/commands/prune_non_mbid_content.py @@ -0,0 +1,61 @@ +from django.core.management.base import BaseCommand +from django.db import transaction + +from funkwhale_api.music import models + + +class Command(BaseCommand): + help = """Deletes any tracks not tagged with a MusicBrainz ID from the database. By default, any tracks that + have been favorited by a user or added to a playlist are preserved.""" + + def add_arguments(self, parser): + parser.add_argument( + "--no-dry-run", + action="store_true", + dest="no_dry_run", + default=True, + help="Disable dry run mode and apply pruning for real on the database", + ) + + parser.add_argument( + "--include-playlist-content", + action="store_true", + dest="include_playlist_content", + default=False, + help="Allow tracks included in playlists to be pruned", + ) + + parser.add_argument( + "--include-favorites-content", + action="store_true", + dest="include_favorited_content", + default=False, + help="Allow favorited tracks to be pruned", + ) + + parser.add_argument( + "--include-listened-content", + action="store_true", + dest="include_listened_content", + default=False, + help="Allow tracks with listening history to be pruned", + ) + + @transaction.atomic + def handle(self, *args, **options): + tracks = models.Track.objects.filter(mbid__isnull=True) + if not options["include_favorited_content"]: + tracks = tracks.filter(track_favorites__isnull=True) + if not options["include_playlist_content"]: + tracks = tracks.filter(playlist_tracks__isnull=True) + if not options["include_listened_content"]: + tracks = tracks.filter(listenings__isnull=True) + + pruned_total = tracks.count() + total = models.Track.objects.count() + + if options["no_dry_run"]: + self.stdout.write(f"Deleting {pruned_total}/{total} tracks…") + tracks.delete() + else: + self.stdout.write(f"Would prune {pruned_total}/{total} tracks") diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 46a118817..5b6abf21d 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -226,17 +226,18 @@ class TrackAlbumSerializer(serializers.ModelSerializer): ) -def serialize_upload(upload) -> object: - return { - "uuid": str(upload.uuid), - "listen_url": upload.listen_url, - "size": upload.size, - "duration": upload.duration, - "bitrate": upload.bitrate, - "mimetype": upload.mimetype, - "extension": upload.extension, - "is_local": federation_utils.is_local(upload.fid), - } +class TrackUploadSerializer(serializers.Serializer): + uuid = serializers.UUIDField() + listen_url = serializers.URLField() + size = serializers.IntegerField() + duration = serializers.IntegerField() + bitrate = serializers.IntegerField() + mimetype = serializers.CharField() + extension = serializers.CharField() + is_local = serializers.SerializerMethodField() + + def get_is_local(self, upload) -> bool: + return federation_utils.is_local(upload.fid) def sort_uploads_for_listen(uploads): @@ -281,11 +282,14 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer): def get_listen_url(self, obj): return obj.listen_url - @extend_schema_field({"type": "array", "items": {"type": "object"}}) + # @extend_schema_field({"type": "array", "items": {"type": "object"}}) + @extend_schema_field(TrackUploadSerializer(many=True)) def get_uploads(self, obj): uploads = getattr(obj, "playable_uploads", []) # we put local uploads first - uploads = [serialize_upload(u) for u in sort_uploads_for_listen(uploads)] + uploads = [ + TrackUploadSerializer(u).data for u in sort_uploads_for_listen(uploads) + ] uploads = sorted(uploads, key=lambda u: u["is_local"], reverse=True) return list(uploads) diff --git a/api/funkwhale_api/music/signals.py b/api/funkwhale_api/music/signals.py index 47ea37e98..d71784768 100644 --- a/api/funkwhale_api/music/signals.py +++ b/api/funkwhale_api/music/signals.py @@ -1,5 +1,4 @@ import django.dispatch -upload_import_status_updated = django.dispatch.Signal( - providing_args=["old_status", "new_status", "upload"] -) +""" Required args: old_status, new_status, upload """ +upload_import_status_updated = django.dispatch.Signal() diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 2d4e173d7..54801967c 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -247,6 +247,13 @@ def process_upload(upload, update_denormalization=True): return fail_import( upload, "invalid_metadata", detail=detail, file_metadata=metadata_dump ) + check_mbid = preferences.get("music__only_allow_musicbrainz_tagged_files") + if check_mbid and not serializer.validated_data.get("mbid"): + return fail_import( + upload, + "Only content tagged with a MusicBrainz ID is permitted on this pod.", + detail="You can tag your files with MusicBrainz Picard", + ) final_metadata = collections.ChainMap( additional_data, serializer.validated_data, internal_config diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 20942a952..282ceca24 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -297,8 +297,6 @@ class LibraryViewSet( ) instance.delete() - follows = action - @extend_schema( responses=federation_api_serializers.LibraryFollowSerializer(many=True) ) diff --git a/api/funkwhale_api/musicbrainz/urls.py b/api/funkwhale_api/musicbrainz/urls.py index b9e24994f..76209fc60 100644 --- a/api/funkwhale_api/musicbrainz/urls.py +++ b/api/funkwhale_api/musicbrainz/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -7,22 +7,22 @@ from . import views router = routers.OptionalSlashRouter() router.register(r"search", views.SearchViewSet, "search") urlpatterns = [ - url( + re_path( "releases/(?P<uuid>[0-9a-z-]+)/$", views.ReleaseDetail.as_view(), name="release-detail", ), - url( + re_path( "artists/(?P<uuid>[0-9a-z-]+)/$", views.ArtistDetail.as_view(), name="artist-detail", ), - url( + re_path( "release-groups/browse/(?P<artist_uuid>[0-9a-z-]+)/$", views.ReleaseGroupBrowse.as_view(), name="release-group-browse", ), - url( + re_path( "releases/browse/(?P<release_group_uuid>[0-9a-z-]+)/$", views.ReleaseBrowse.as_view(), name="release-browse", diff --git a/api/funkwhale_api/providers/urls.py b/api/funkwhale_api/providers/urls.py index dc8afeee7..d2df4d849 100644 --- a/api/funkwhale_api/providers/urls.py +++ b/api/funkwhale_api/providers/urls.py @@ -1,7 +1,8 @@ -from django.conf.urls import include, url +from django.conf.urls import include +from django.urls import re_path urlpatterns = [ - url( + re_path( r"^musicbrainz/", include( ("funkwhale_api.musicbrainz.urls", "musicbrainz"), namespace="musicbrainz" diff --git a/api/funkwhale_api/radios/lb_recommendations.py b/api/funkwhale_api/radios/lb_recommendations.py index a50441418..1ec84d4c8 100644 --- a/api/funkwhale_api/radios/lb_recommendations.py +++ b/api/funkwhale_api/radios/lb_recommendations.py @@ -38,14 +38,12 @@ def validate(config): return True -def build_radio_queryset(patch, config, radio_qs): - """Take a troi patch and its arg, match the missing mbid and then build a radio queryset""" - - logger.info("Config used for troi radio generation is " + str(config)) +def build_radio_queryset(patch, radio_qs): + """Take a troi patch, match the missing mbid and then build a radio queryset""" start_time = time.time() try: - recommendations = troi.core.generate_playlist(patch, config) + recommendations = patch.generate_playlist() except ConnectTimeout: raise ValueError( "Timed out while connecting to ListenBrainz. No candidates could be retrieved for the radio." @@ -56,33 +54,37 @@ def build_radio_queryset(patch, config, radio_qs): if not recommendations: raise ValueError("No candidates found by troi") - recommended_recording_mbids = [ + recommended_mbids = [ recommended_recording.mbid for recommended_recording in recommendations.playlists[0].recordings ] logger.info("Searching for MusicBrainz ID in Funkwhale database") - qs_mbid = music_models.Track.objects.all().filter( - mbid__in=recommended_recording_mbids + qs_recommended = ( + music_models.Track.objects.all() + .filter(mbid__in=recommended_mbids) + .order_by("mbid", "pk") + .distinct("mbid") ) - mbids_found = [str(i.mbid) for i in qs_mbid] + qs_recommended_mbid = [str(i.mbid) for i in qs_recommended] - recommended_recording_mbids_not_found = [ - mbid for mbid in recommended_recording_mbids if mbid not in mbids_found + recommended_mbids_not_qs = [ + mbid for mbid in recommended_mbids if mbid not in qs_recommended_mbid ] - cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) + cached_match = cache.get_many(recommended_mbids_not_qs) + cached_match_mbid = [str(i) for i in cached_match.keys()] - if qs_mbid and cached_mbid_match: + if qs_recommended and cached_match_mbid: logger.info("MusicBrainz IDs found in Funkwhale database and redis") - mbids_found = [str(i.mbid) for i in qs_mbid] - mbids_found.extend([i for i in cached_mbid_match.keys()]) - elif qs_mbid and not cached_mbid_match: + qs_recommended_mbid.extend(cached_match_mbid) + mbids_found = qs_recommended_mbid + elif qs_recommended and not cached_match_mbid: logger.info("MusicBrainz IDs found in Funkwhale database") - mbids_found = mbids_found - elif not qs_mbid and cached_mbid_match: + mbids_found = qs_recommended_mbid + elif not qs_recommended and cached_match_mbid: logger.info("MusicBrainz IDs found in redis cache") - mbids_found = [i for i in cached_mbid_match.keys()] + mbids_found = cached_match_mbid else: logger.info( "Couldn't find any matches in Funkwhale database. Trying to match all" @@ -106,23 +108,32 @@ def build_radio_queryset(patch, config, radio_qs): + str(end_time_resolv - start_time_resolv) ) - cached_mbid_match = cache.get_many(recommended_recording_mbids_not_found) + cached_match = cache.get_many(recommended_mbids) - if not qs_mbid and not cached_mbid_match: + if not mbids_found and not cached_match: raise ValueError("No candidates found for troi radio") - logger.info("Radio generation with troi took " + str(end_time_resolv - start_time)) - logger.info("qs_mbid is " + str(mbids_found)) + mbids_found_pks = list( + music_models.Track.objects.all() + .filter(mbid__in=mbids_found) + .order_by("mbid", "pk") + .distinct("mbid") + .values_list("pk", flat=True) + ) - if qs_mbid and cached_mbid_match: + mbids_found_pks_unique = [ + i for i in mbids_found_pks if i not in cached_match.keys() + ] + + if mbids_found and cached_match: return radio_qs.filter( - Q(mbid__in=mbids_found) | Q(pk__in=cached_mbid_match.values()) + Q(pk__in=mbids_found_pks_unique) | Q(pk__in=cached_match.values()) ) - if qs_mbid and not cached_mbid_match: - return radio_qs.filter(mbid__in=mbids_found) + if mbids_found and not cached_match: + return radio_qs.filter(pk__in=mbids_found_pks_unique) - if not qs_mbid and cached_mbid_match: - return radio_qs.filter(pk__in=cached_mbid_match.values()) + if not mbids_found and cached_match: + return radio_qs.filter(pk__in=cached_match.values()) class TroiPatch: @@ -132,4 +143,4 @@ class TroiPatch: def get_queryset(self, config, qs): patch_string = config.pop("patch") patch = patches[patch_string] - return build_radio_queryset(patch(), config, qs) + return build_radio_queryset(patch(config), qs) diff --git a/api/funkwhale_api/subsonic/renderers.py b/api/funkwhale_api/subsonic/renderers.py index f11940222..b715526e0 100644 --- a/api/funkwhale_api/subsonic/renderers.py +++ b/api/funkwhale_api/subsonic/renderers.py @@ -6,6 +6,10 @@ from rest_framework import renderers import funkwhale_api +class TagValue(str): + """Use this for string values that must be rendered as tags instead of attributes in XML.""" + + # from https://stackoverflow.com/a/8915039 # because I want to avoid a lxml dependency just for outputting cdata properly # in a RSS feed @@ -31,10 +35,14 @@ ET._serialize_xml = ET._serialize["xml"] = _serialize_xml def structure_payload(data): payload = { + # funkwhaleVersion is deprecated and will be removed in a future + # release. Use serverVersion instead. "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, "status": "ok", "type": "funkwhale", "version": "1.16.0", + "openSubsonic": "true", } payload.update(data) if "detail" in payload: @@ -81,6 +89,10 @@ def dict_to_xml_tree(root_tag, d, parent=None): el = ET.Element(key) el.text = str(obj) root.append(el) + elif isinstance(value, TagValue): + el = ET.Element(key) + el.text = str(value) + root.append(el) else: if key == "value": root.text = str(value) diff --git a/api/funkwhale_api/subsonic/serializers.py b/api/funkwhale_api/subsonic/serializers.py index 5a615126b..d610b61a5 100644 --- a/api/funkwhale_api/subsonic/serializers.py +++ b/api/funkwhale_api/subsonic/serializers.py @@ -7,6 +7,8 @@ from funkwhale_api.history import models as history_models from funkwhale_api.music import models as music_models from funkwhale_api.music import utils as music_utils +from .renderers import TagValue + def to_subsonic_date(date): """ @@ -50,6 +52,7 @@ def get_artist_data(artist_values): "name": artist_values["name"], "albumCount": artist_values["_albums_count"], "coverArt": "ar-{}".format(artist_values["id"]), + "musicBrainzId": str(artist_values.get("mbid", "")), } @@ -58,7 +61,7 @@ class GetArtistsSerializer(serializers.Serializer): payload = {"ignoredArticles": "", "index": []} queryset = queryset.with_albums_count() queryset = queryset.order_by(functions.Lower("name")) - values = queryset.values("id", "_albums_count", "name") + values = queryset.values("id", "_albums_count", "name", "mbid") first_letter_mapping = collections.defaultdict(list) for artist in values: @@ -102,6 +105,23 @@ class GetArtistSerializer(serializers.Serializer): return payload +class GetArtistInfo2Serializer(serializers.Serializer): + def to_representation(self, artist): + payload = {} + if artist.mbid: + payload["musicBrainzId"] = TagValue(artist.mbid) + if artist.attachment_cover: + payload["mediumImageUrl"] = TagValue( + artist.attachment_cover.download_url_medium_square_crop + ) + payload["largeImageUrl"] = TagValue( + artist.attachment_cover.download_url_large_square_crop + ) + if artist.description: + payload["biography"] = TagValue(artist.description.rendered) + return payload + + def get_track_data(album, track, upload): data = { "id": track.pk, @@ -126,11 +146,13 @@ def get_track_data(album, track, upload): "albumId": album.pk if album else "", "artistId": album.artist.pk if album else track.artist.pk, "type": "music", + "mediaType": "song", + "musicBrainzId": str(track.mbid or ""), } if album and album.attachment_cover_id: data["coverArt"] = f"al-{album.id}" if upload.bitrate: - data["bitrate"] = int(upload.bitrate / 1000) + data["bitRate"] = int(upload.bitrate / 1000) if upload.size: data["size"] = upload.size if album and album.release_date: @@ -149,13 +171,17 @@ def get_album2_data(album): "created": to_subsonic_date(album.creation_date), "duration": album.duration, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, + "mediaType": "album", + "musicBrainzId": str(album.mbid or ""), } if album.attachment_cover_id: payload["coverArt"] = f"al-{album.id}" if album.tagged_items: + genres = [{"name": i.tag.name} for i in album.tagged_items.all()] # exposes only first genre since the specification uses singular noun - first_genre = album.tagged_items.first() - payload["genre"] = first_genre.tag.name if first_genre else "" + payload["genre"] = genres[0]["name"] if len(genres) > 0 else "" + # OpenSubsonic full genre list + payload["genres"] = genres if album.release_date: payload["year"] = album.release_date.year try: @@ -343,7 +369,7 @@ def get_channel_episode_data(upload, channel_id): "genre": "Podcast", "size": upload.size if upload.size else "", "duration": upload.duration if upload.duration else "", - "bitrate": upload.bitrate / 1000 if upload.bitrate else "", + "bitRate": upload.bitrate / 1000 if upload.bitrate else "", "contentType": upload.mimetype or "audio/mpeg", "suffix": upload.extension or "mp3", "status": "completed", diff --git a/api/funkwhale_api/subsonic/views.py b/api/funkwhale_api/subsonic/views.py index 316cce706..87edc51ed 100644 --- a/api/funkwhale_api/subsonic/views.py +++ b/api/funkwhale_api/subsonic/views.py @@ -180,6 +180,19 @@ class SubsonicViewSet(viewsets.GenericViewSet): } return response.Response(data, status=200) + @action( + detail=False, + methods=["get", "post"], + url_name="get_open_subsonic_extensions", + permission_classes=[], + url_path="getOpenSubsonicExtensions", + ) + def get_open_subsonic_extensions(self, request, *args, **kwargs): + data = { + "openSubsonicExtensions": [{"name": "formPost", "versions": [1]}], + } + return response.Response(data, status=200) + @action( detail=False, methods=["get", "post"], @@ -255,7 +268,9 @@ class SubsonicViewSet(viewsets.GenericViewSet): ) @find_object(music_models.Artist.objects.all(), filter_playable=True) def get_artist_info2(self, request, *args, **kwargs): - payload = {"artist-info2": {}} + artist = kwargs.pop("obj") + data = serializers.GetArtistInfo2Serializer(artist).data + payload = {"artistInfo2": data} return response.Response(payload, status=200) @@ -523,7 +538,7 @@ class SubsonicViewSet(viewsets.GenericViewSet): "search_fields": ["name"], "queryset": ( music_models.Artist.objects.with_albums_count().values( - "id", "_albums_count", "name" + "id", "_albums_count", "name", "mbid" ) ), "serializer": lambda qs: [serializers.get_artist_data(a) for a in qs], diff --git a/api/funkwhale_api/tags/filters.py b/api/funkwhale_api/tags/filters.py index 38bec5b90..bcd6894af 100644 --- a/api/funkwhale_api/tags/filters.py +++ b/api/funkwhale_api/tags/filters.py @@ -24,7 +24,7 @@ class TagFilter(filters.FilterSet): def get_by_similar_tags(qs, tags): """ - Return a queryset of obects with at least one matching tag. + Return a queryset of objects with at least one matching tag. Annotate the queryset so you can order later by number of matches. """ qs = qs.filter(tagged_items__tag__name__in=tags).annotate( diff --git a/api/funkwhale_api/users/admin.py b/api/funkwhale_api/users/admin.py index b5c3bde36..26c58f448 100644 --- a/api/funkwhale_api/users/admin.py +++ b/api/funkwhale_api/users/admin.py @@ -1,7 +1,7 @@ from django import forms from django.contrib.auth.admin import UserAdmin as AuthUserAdmin from django.contrib.auth.forms import UserChangeForm, UserCreationForm -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from funkwhale_api.common import admin diff --git a/api/funkwhale_api/users/api_urls.py b/api/funkwhale_api/users/api_urls.py index b0a057028..1ca8cdcd4 100644 --- a/api/funkwhale_api/users/api_urls.py +++ b/api/funkwhale_api/users/api_urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from funkwhale_api.common import routers @@ -8,6 +8,6 @@ router = routers.OptionalSlashRouter() router.register(r"users", views.UserViewSet, "users") urlpatterns = [ - url(r"^users/login/?$", views.login, name="login"), - url(r"^users/logout/?$", views.logout, name="logout"), + re_path(r"^users/login/?$", views.login, name="login"), + re_path(r"^users/logout/?$", views.logout, name="logout"), ] + router.urls diff --git a/api/funkwhale_api/users/models.py b/api/funkwhale_api/users/models.py index ad9523c45..14efbca19 100644 --- a/api/funkwhale_api/users/models.py +++ b/api/funkwhale_api/users/models.py @@ -12,7 +12,7 @@ from django.db.models import JSONField from django.dispatch import receiver from django.urls import reverse from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django_auth_ldap.backend import populate_user as ldap_populate_user from oauth2_provider import models as oauth2_models from oauth2_provider import validators as oauth2_validators diff --git a/api/funkwhale_api/users/oauth/urls.py b/api/funkwhale_api/users/oauth/urls.py index 4230668e4..411656a2a 100644 --- a/api/funkwhale_api/users/oauth/urls.py +++ b/api/funkwhale_api/users/oauth/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from django.views.decorators.csrf import csrf_exempt from funkwhale_api.common import routers @@ -10,7 +10,9 @@ router.register(r"apps", views.ApplicationViewSet, "apps") router.register(r"grants", views.GrantViewSet, "grants") urlpatterns = router.urls + [ - url("^authorize/$", csrf_exempt(views.AuthorizeView.as_view()), name="authorize"), - url("^token/$", views.TokenView.as_view(), name="token"), - url("^revoke/$", views.RevokeTokenView.as_view(), name="revoke"), + re_path( + "^authorize/$", csrf_exempt(views.AuthorizeView.as_view()), name="authorize" + ), + re_path("^token/$", views.TokenView.as_view(), name="token"), + re_path("^revoke/$", views.RevokeTokenView.as_view(), name="revoke"), ] diff --git a/api/funkwhale_api/users/oauth/views.py b/api/funkwhale_api/users/oauth/views.py index 9f0677cbf..44e81e187 100644 --- a/api/funkwhale_api/users/oauth/views.py +++ b/api/funkwhale_api/users/oauth/views.py @@ -200,7 +200,7 @@ class AuthorizeView(views.APIView, oauth_views.AuthorizationView): return self.json_payload({"non_field_errors": ["Invalid application"]}, 400) def redirect(self, redirect_to, application): - if self.request.is_ajax(): + if self.request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest": # Web client need this to be able to redirect the user query = urllib.parse.urlparse(redirect_to).query code = urllib.parse.parse_qs(query)["code"][0] diff --git a/api/funkwhale_api/users/rest_auth_urls.py b/api/funkwhale_api/users/rest_auth_urls.py index 21d91685c..bbd14eefe 100644 --- a/api/funkwhale_api/users/rest_auth_urls.py +++ b/api/funkwhale_api/users/rest_auth_urls.py @@ -1,38 +1,38 @@ from dj_rest_auth import views as rest_auth_views -from django.conf.urls import url +from django.urls import re_path from django.views.generic import TemplateView from . import views urlpatterns = [ # URLs that do not require a session or valid token - url( + re_path( r"^password/reset/$", views.PasswordResetView.as_view(), name="rest_password_reset", ), - url( + re_path( r"^password/reset/confirm/$", views.PasswordResetConfirmView.as_view(), name="rest_password_reset_confirm", ), # URLs that require a user to be logged in with a valid session / token. - url( + re_path( r"^user/$", rest_auth_views.UserDetailsView.as_view(), name="rest_user_details" ), - url( + re_path( r"^password/change/$", views.PasswordChangeView.as_view(), name="rest_password_change", ), # Registration URLs - url(r"^registration/$", views.RegisterView.as_view(), name="rest_register"), - url( + re_path(r"^registration/$", views.RegisterView.as_view(), name="rest_register"), + re_path( r"^registration/verify-email/?$", views.VerifyEmailView.as_view(), name="rest_verify_email", ), - url( + re_path( r"^registration/change-password/?$", views.PasswordChangeView.as_view(), name="change_password", @@ -47,7 +47,7 @@ urlpatterns = [ # If you don't want to use API on that step, then just use ConfirmEmailView # view from: # https://github.com/pennersr/django-allauth/blob/a62a370681/allauth/account/views.py#L291 - url( + re_path( r"^registration/account-confirm-email/(?P<key>\w+)/?$", TemplateView.as_view(), name="account_confirm_email", diff --git a/api/funkwhale_api/users/serializers.py b/api/funkwhale_api/users/serializers.py index 4a8747620..3b72c5b51 100644 --- a/api/funkwhale_api/users/serializers.py +++ b/api/funkwhale_api/users/serializers.py @@ -340,4 +340,8 @@ class UserChangeEmailSerializer(serializers.Serializer): email=request.user.email, defaults={"verified": False, "primary": True}, ) - current.change(request, self.validated_data["email"], confirm=True) + if request.user.email != self.validated_data["email"]: + current.email = self.validated_data["email"] + current.verified = False + current.save() + current.send_confirmation() diff --git a/api/funkwhale_api/users/views.py b/api/funkwhale_api/users/views.py index 0771e5d6e..d86277fde 100644 --- a/api/funkwhale_api/users/views.py +++ b/api/funkwhale_api/users/views.py @@ -1,6 +1,7 @@ import json from allauth.account.adapter import get_adapter +from allauth.account.utils import send_email_confirmation from dj_rest_auth import views as rest_auth_views from dj_rest_auth.registration import views as registration_views from django import http @@ -11,7 +12,7 @@ from rest_framework import mixins, viewsets from rest_framework.decorators import action from rest_framework.response import Response -from funkwhale_api.common import authentication, preferences, throttling +from funkwhale_api.common import preferences, throttling from . import models, serializers, tasks @@ -37,7 +38,7 @@ class RegisterView(registration_views.RegisterView): user = super().perform_create(serializer) if not user.is_active: # manual approval, we need to send the confirmation e-mail by hand - authentication.send_email_confirmation(self.request, user) + send_email_confirmation(self.request, user) if user.invitation: user.invitation.set_invited_user(user) diff --git a/api/poetry.lock b/api/poetry.lock index e61ff25cd..d4c7ae379 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,126 +1,114 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.9.1" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, ] [package.dependencies] aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" yarl = ">=1.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] +speedups = ["Brotli", "aiodns", "brotlicffi"] [[package]] name = "aioresponses" -version = "0.7.4" +version = "0.7.6" description = "Mock out requests made by ClientSession from aiohttp package" optional = false python-versions = "*" files = [ - {file = "aioresponses-0.7.4-py2.py3-none-any.whl", hash = "sha256:1160486b5ea96fcae6170cf2bdef029b9d3a283b7dbeabb3d7f1182769bfb6b7"}, - {file = "aioresponses-0.7.4.tar.gz", hash = "sha256:9b8c108b36354c04633bad0ea752b55d956a7602fe3e3234b939fc44af96f1d8"}, + {file = "aioresponses-0.7.6-py2.py3-none-any.whl", hash = "sha256:d2c26defbb9b440ea2685ec132e90700907fd10bcca3e85ec2f157219f0d26f7"}, + {file = "aioresponses-0.7.6.tar.gz", hash = "sha256:f795d9dbda2d61774840e7e32f5366f45752d1adc1b74c9362afd017296c7ee1"}, ] [package.dependencies] -aiohttp = ">=2.0.0,<4.0.0" +aiohttp = ">=3.3.0,<4.0.0" [[package]] name = "aiosignal" @@ -138,48 +126,49 @@ frozenlist = ">=1.1.0" [[package]] name = "amqp" -version = "5.1.1" +version = "5.2.0" description = "Low-level AMQP client for Python (fork of amqplib)." optional = false python-versions = ">=3.6" files = [ - {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, - {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, + {file = "amqp-5.2.0-py3-none-any.whl", hash = "sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637"}, + {file = "amqp-5.2.0.tar.gz", hash = "sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd"}, ] [package.dependencies] -vine = ">=5.0.0" +vine = ">=5.0.0,<6.0.0" [[package]] name = "anyio" -version = "4.0.0" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] [[package]] @@ -215,23 +204,36 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] [[package]] name = "astroid" -version = "2.15.6" +version = "3.0.3" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.8.0" files = [ - {file = "astroid-2.15.6-py3-none-any.whl", hash = "sha256:389656ca57b6108f939cf5d2f9a2a825a3be50ba9d589670f393236e0a03b91c"}, - {file = "astroid-2.15.6.tar.gz", hash = "sha256:903f024859b7c7687d7a7f3a3f73b17301f8e42dfd9cc9df9d4418172d3e2dbd"}, + {file = "astroid-3.0.3-py3-none-any.whl", hash = "sha256:92fcf218b89f449cdf9f7b39a269f8d5d617b27be68434912e11e79203963a17"}, + {file = "astroid-3.0.3.tar.gz", hash = "sha256:4148645659b08b70d72460ed1921158027a9e53ae8b7234149b1400eddacbb93"}, ] [package.dependencies] -lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} -wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, + +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -256,21 +258,22 @@ files = [ [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "autobahn" @@ -354,52 +357,52 @@ files = [ {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, ] +[package.dependencies] +tzdata = {version = "*", optional = true, markers = "extra == \"tzdata\""} + [package.extras] tzdata = ["tzdata"] [[package]] name = "billiard" -version = "3.6.4.0" +version = "4.2.0" description = "Python multiprocessing fork with improvements and bugfixes" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, + {file = "billiard-4.2.0-py3-none-any.whl", hash = "sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d"}, + {file = "billiard-4.2.0.tar.gz", hash = "sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c"}, ] [[package]] name = "black" -version = "23.3.0" +version = "24.1.1" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [package.dependencies] @@ -409,23 +412,23 @@ packaging = ">=22.0" pathspec = ">=0.9.0" platformdirs = ">=2" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] +d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -433,8 +436,7 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "boto3" @@ -476,151 +478,141 @@ crt = ["awscrt (==0.16.9)"] [[package]] name = "cachetools" -version = "5.3.1" +version = "5.3.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, ] [[package]] name = "celery" -version = "5.2.7" +version = "5.3.6" description = "Distributed Task Queue." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "celery-5.2.7-py3-none-any.whl", hash = "sha256:138420c020cd58d6707e6257b6beda91fd39af7afde5d36c6334d175302c0e14"}, - {file = "celery-5.2.7.tar.gz", hash = "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d"}, + {file = "celery-5.3.6-py3-none-any.whl", hash = "sha256:9da4ea0118d232ce97dff5ed4974587fb1c0ff5c10042eb15278487cdd27d1af"}, + {file = "celery-5.3.6.tar.gz", hash = "sha256:870cc71d737c0200c397290d730344cc991d13a057534353d124c9380267aab9"}, ] [package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0.3,<9.0" -click-didyoumean = ">=0.0.3" +"backports.zoneinfo" = {version = ">=0.2.1", markers = "python_version < \"3.9\""} +billiard = ">=4.2.0,<5.0" +click = ">=8.1.2,<9.0" +click-didyoumean = ">=0.3.0" click-plugins = ">=1.1.1" click-repl = ">=0.2.0" -kombu = ">=5.2.3,<6.0" -pytz = ">=2021.3" -vine = ">=5.0.0,<6.0" +kombu = ">=5.3.4,<6.0" +python-dateutil = ">=2.8.2" +tzdata = ">=2022.7" +vine = ">=5.1.0,<6.0" [package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] +arangodb = ["pyArango (>=2.0.2)"] +auth = ["cryptography (==41.0.5)"] +azureblockblob = ["azure-storage-blob (>=12.15.0)"] brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] +cassandra = ["cassandra-driver (>=3.25.0,<4)"] +consul = ["python-consul2 (==0.1.5)"] +cosmosdbsql = ["pydocumentdb (==2.3.5)"] couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] +couchdb = ["pycouchdb (==1.14.2)"] +django = ["Django (>=2.2.28)"] +dynamodb = ["boto3 (>=1.26.143)"] +elasticsearch = ["elastic-transport (<=8.10.0)", "elasticsearch (<=8.11.0)"] eventlet = ["eventlet (>=0.32.0)"] gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.11.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -s3 = ["boto3 (>=1.9.125)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +memcache = ["pylibmc (==1.6.3)"] +mongodb = ["pymongo[srv] (>=4.0.2)"] +msgpack = ["msgpack (==1.0.7)"] +pymemcache = ["python-memcached (==1.59)"] +pyro = ["pyro4 (==4.82)"] +pytest = ["pytest-celery (==0.0.0)"] +redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] +s3 = ["boto3 (>=1.26.143)"] slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] +solar = ["ephem (==4.1.5)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.0)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] +zstd = ["zstandard (==0.22.0)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -669,86 +661,101 @@ tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -827,13 +834,13 @@ files = [ [[package]] name = "constantly" -version = "15.1.0" +version = "23.10.4" description = "Symbolic constants in Python" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, - {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, + {file = "constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9"}, + {file = "constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd"}, ] [[package]] @@ -848,61 +855,63 @@ files = [ [[package]] name = "coverage" -version = "6.5.0" +version = "7.4.1" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "coverage-6.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53"}, - {file = "coverage-6.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04"}, - {file = "coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466"}, - {file = "coverage-6.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a"}, - {file = "coverage-6.5.0-cp310-cp310-win32.whl", hash = "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32"}, - {file = "coverage-6.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e"}, - {file = "coverage-6.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b"}, - {file = "coverage-6.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa"}, - {file = "coverage-6.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b"}, - {file = "coverage-6.5.0-cp311-cp311-win32.whl", hash = "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578"}, - {file = "coverage-6.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b"}, - {file = "coverage-6.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef"}, - {file = "coverage-6.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c"}, - {file = "coverage-6.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f"}, - {file = "coverage-6.5.0-cp37-cp37m-win32.whl", hash = "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b"}, - {file = "coverage-6.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c"}, - {file = "coverage-6.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398"}, - {file = "coverage-6.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f"}, - {file = "coverage-6.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e"}, - {file = "coverage-6.5.0-cp38-cp38-win32.whl", hash = "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d"}, - {file = "coverage-6.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745"}, - {file = "coverage-6.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf"}, - {file = "coverage-6.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518"}, - {file = "coverage-6.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f"}, - {file = "coverage-6.5.0-cp39-cp39-win32.whl", hash = "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72"}, - {file = "coverage-6.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"}, - {file = "coverage-6.5.0-pp36.pp37.pp38-none-any.whl", hash = "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a"}, - {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:077d366e724f24fc02dbfe9d946534357fda71af9764ff99d73c3c596001bbd7"}, + {file = "coverage-7.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0193657651f5399d433c92f8ae264aff31fc1d066deee4b831549526433f3f61"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d17bbc946f52ca67adf72a5ee783cd7cd3477f8f8796f59b4974a9b59cacc9ee"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3277f5fa7483c927fe3a7b017b39351610265308f5267ac6d4c2b64cc1d8d25"}, + {file = "coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dceb61d40cbfcf45f51e59933c784a50846dc03211054bd76b421a713dcdf19"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6008adeca04a445ea6ef31b2cbaf1d01d02986047606f7da266629afee982630"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c61f66d93d712f6e03369b6a7769233bfda880b12f417eefdd4f16d1deb2fc4c"}, + {file = "coverage-7.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9bb62fac84d5f2ff523304e59e5c439955fb3b7f44e3d7b2085184db74d733b"}, + {file = "coverage-7.4.1-cp310-cp310-win32.whl", hash = "sha256:f86f368e1c7ce897bf2457b9eb61169a44e2ef797099fb5728482b8d69f3f016"}, + {file = "coverage-7.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:869b5046d41abfea3e381dd143407b0d29b8282a904a19cb908fa24d090cc018"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b8ffb498a83d7e0305968289441914154fb0ef5d8b3157df02a90c6695978295"}, + {file = "coverage-7.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3cacfaefe6089d477264001f90f55b7881ba615953414999c46cc9713ff93c8c"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d6850e6e36e332d5511a48a251790ddc545e16e8beaf046c03985c69ccb2676"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e961aa13b6d47f758cc5879383d27b5b3f3dcd9ce8cdbfdc2571fe86feb4dd"}, + {file = "coverage-7.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfd1e1b9f0898817babf840b77ce9fe655ecbe8b1b327983df485b30df8cc011"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6b00e21f86598b6330f0019b40fb397e705135040dbedc2ca9a93c7441178e74"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:536d609c6963c50055bab766d9951b6c394759190d03311f3e9fcf194ca909e1"}, + {file = "coverage-7.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ac8f8eb153724f84885a1374999b7e45734bf93a87d8df1e7ce2146860edef6"}, + {file = "coverage-7.4.1-cp311-cp311-win32.whl", hash = "sha256:f3771b23bb3675a06f5d885c3630b1d01ea6cac9e84a01aaf5508706dba546c5"}, + {file = "coverage-7.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:9d2f9d4cc2a53b38cabc2d6d80f7f9b7e3da26b2f53d48f05876fef7956b6968"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f68ef3660677e6624c8cace943e4765545f8191313a07288a53d3da188bd8581"}, + {file = "coverage-7.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23b27b8a698e749b61809fb637eb98ebf0e505710ec46a8aa6f1be7dc0dc43a6"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3424c554391dc9ef4a92ad28665756566a28fecf47308f91841f6c49288e66"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0860a348bf7004c812c8368d1fc7f77fe8e4c095d661a579196a9533778e156"}, + {file = "coverage-7.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe558371c1bdf3b8fa03e097c523fb9645b8730399c14fe7721ee9c9e2a545d3"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3468cc8720402af37b6c6e7e2a9cdb9f6c16c728638a2ebc768ba1ef6f26c3a1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:02f2edb575d62172aa28fe00efe821ae31f25dc3d589055b3fb64d51e52e4ab1"}, + {file = "coverage-7.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ca6e61dc52f601d1d224526360cdeab0d0712ec104a2ce6cc5ccef6ed9a233bc"}, + {file = "coverage-7.4.1-cp312-cp312-win32.whl", hash = "sha256:ca7b26a5e456a843b9b6683eada193fc1f65c761b3a473941efe5a291f604c74"}, + {file = "coverage-7.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:85ccc5fa54c2ed64bd91ed3b4a627b9cce04646a659512a051fa82a92c04a448"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bdb0285a0202888d19ec6b6d23d5990410decb932b709f2b0dfe216d031d218"}, + {file = "coverage-7.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:918440dea04521f499721c039863ef95433314b1db00ff826a02580c1f503e45"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:379d4c7abad5afbe9d88cc31ea8ca262296480a86af945b08214eb1a556a3e4d"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b094116f0b6155e36a304ff912f89bbb5067157aff5f94060ff20bbabdc8da06"}, + {file = "coverage-7.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f5968608b1fe2a1d00d01ad1017ee27efd99b3437e08b83ded9b7af3f6f766"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:10e88e7f41e6197ea0429ae18f21ff521d4f4490aa33048f6c6f94c6045a6a75"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a4a3907011d39dbc3e37bdc5df0a8c93853c369039b59efa33a7b6669de04c60"}, + {file = "coverage-7.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d224f0c4c9c98290a6990259073f496fcec1b5cc613eecbd22786d398ded3ad"}, + {file = "coverage-7.4.1-cp38-cp38-win32.whl", hash = "sha256:23f5881362dcb0e1a92b84b3c2809bdc90db892332daab81ad8f642d8ed55042"}, + {file = "coverage-7.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:a07f61fc452c43cd5328b392e52555f7d1952400a1ad09086c4a8addccbd138d"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8e738a492b6221f8dcf281b67129510835461132b03024830ac0e554311a5c54"}, + {file = "coverage-7.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46342fed0fff72efcda77040b14728049200cbba1279e0bf1188f1f2078c1d70"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9641e21670c68c7e57d2053ddf6c443e4f0a6e18e547e86af3fad0795414a628"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aeb2c2688ed93b027eb0d26aa188ada34acb22dceea256d76390eea135083950"}, + {file = "coverage-7.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d12c923757de24e4e2110cf8832d83a886a4cf215c6e61ed506006872b43a6d1"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0491275c3b9971cdbd28a4595c2cb5838f08036bca31765bad5e17edf900b2c7"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8dfc5e195bbef80aabd81596ef52a1277ee7143fe419efc3c4d8ba2754671756"}, + {file = "coverage-7.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1a78b656a4d12b0490ca72651fe4d9f5e07e3c6461063a9b6265ee45eb2bdd35"}, + {file = "coverage-7.4.1-cp39-cp39-win32.whl", hash = "sha256:f90515974b39f4dea2f27c0959688621b46d96d5a626cf9c53dbc653a895c05c"}, + {file = "coverage-7.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:64e723ca82a84053dd7bfcc986bdb34af8d9da83c521c19d6b472bc6880e191a"}, + {file = "coverage-7.4.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:32a8d985462e37cfdab611a6f95b09d7c091d07668fdc26e47a725ee575fe166"}, + {file = "coverage-7.4.1.tar.gz", hash = "sha256:1ed4b95480952b1a26d863e546fa5094564aa0065e1e5f0d4d0041f293251d04"}, ] [package.dependencies] @@ -913,49 +922,48 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "38.0.4" +version = "41.0.7" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"}, - {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"}, - {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, - {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf"}, + {file = "cryptography-41.0.7-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a"}, + {file = "cryptography-41.0.7-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157"}, + {file = "cryptography-41.0.7-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406"}, + {file = "cryptography-41.0.7-cp37-abi3-win32.whl", hash = "sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d"}, + {file = "cryptography-41.0.7-cp37-abi3-win_amd64.whl", hash = "sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7"}, + {file = "cryptography-41.0.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c"}, + {file = "cryptography-41.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248"}, + {file = "cryptography-41.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309"}, + {file = "cryptography-41.0.7.tar.gz", hash = "sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc"}, ] [package.dependencies] cffi = ">=1.12" [package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] [[package]] name = "daphne" @@ -1044,51 +1052,52 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "dill" -version = "0.3.7" +version = "0.3.8" description = "serialize all of Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, - {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "dj-rest-auth" -version = "2.2.8" +version = "5.0.2" description = "Authentication and Registration in Django Rest Framework" optional = false -python-versions = ">=3.5" -files = [ - {file = "dj-rest-auth-2.2.8.tar.gz", hash = "sha256:9fb3492888185ede8b2064ad6803120c7b0b83ab08e2347a02e9b44282374242"}, -] - -[package.dependencies] -Django = ">=2.0" -django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} -djangorestframework = ">=3.7.0" - -[package.extras] -with-social = ["django-allauth (>=0.40.0,<0.53.0)"] - -[[package]] -name = "django" -version = "3.2.20" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.20-py3-none-any.whl", hash = "sha256:a477ab326ae7d8807dc25c186b951ab8c7648a3a23f9497763c37307a2b5ef87"}, - {file = "Django-3.2.20.tar.gz", hash = "sha256:dec2a116787b8e14962014bf78e120bba454135108e1af9e9b91ade7b2964c40"}, + {file = "dj-rest-auth-5.0.2.tar.gz", hash = "sha256:aad7d912476169e9991547bf98645344d3939be2d7052098048d819524c115d9"}, ] [package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" +Django = ">=3.2" +djangorestframework = ">=3.13.0" + +[package.extras] +with-social = ["django-allauth (>=0.56.0,<0.58.0)"] + +[[package]] +name = "django" +version = "4.2.9" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Django-4.2.9-py3-none-any.whl", hash = "sha256:2cc2fc7d1708ada170ddd6c99f35cc25db664f165d3794bc7723f46b2f8c8984"}, + {file = "Django-4.2.9.tar.gz", hash = "sha256:12498cc3cb8bc8038539fef9e90e95f507502436c1f0c3a673411324fa675d14"}, +] + +[package.dependencies] +asgiref = ">=3.6.0,<4" +"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] argon2 = ["argon2-cffi (>=19.1.0)"] @@ -1096,20 +1105,24 @@ bcrypt = ["bcrypt"] [[package]] name = "django-allauth" -version = "0.42.0" +version = "0.55.2" description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "django-allauth-0.42.0.tar.gz", hash = "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30"}, + {file = "django-allauth-0.55.2.tar.gz", hash = "sha256:7b713c9947f1917e5c1c5a106fd6208d2c2c71435542fec6d60b01fd7bada3a8"}, ] [package.dependencies] -Django = ">=2.0" +Django = ">=3.1" +pyjwt = {version = ">=1.7", extras = ["crypto"]} python3-openid = ">=3.0.8" -requests = "*" +requests = ">=2.0.0" requests-oauthlib = ">=0.3.0" +[package.extras] +saml = ["python3-saml (>=1.15.0,<2.0.0)"] + [[package]] name = "django-auth-ldap" version = "4.1.0" @@ -1141,43 +1154,43 @@ dev = ["black", "flake8", "therapist", "tox", "twine"] [[package]] name = "django-cacheops" -version = "6.1" +version = "7.0.2" description = "A slick ORM cache with automatic granular event-driven invalidation for Django." optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "django-cacheops-6.1.tar.gz", hash = "sha256:b684ef39fd434189d3cbb7d85417cd972af635289a032447982473b4a89f727d"}, + {file = "django-cacheops-7.0.2.tar.gz", hash = "sha256:77a37c73d7facfc7299365ed66a12be7a487dd745dd86c1d33ca2ebfd3b32878"}, ] [package.dependencies] -django = ">=2.1" -funcy = ">=1.8,<2.0" +django = ">=3.2" +funcy = ">=1.8,<3.0" redis = ">=3.0.0" -six = ">=1.4.0" [[package]] name = "django-cleanup" -version = "6.0.0" +version = "8.1.0" description = "Deletes old files." optional = false python-versions = "*" files = [ - {file = "django-cleanup-6.0.0.tar.gz", hash = "sha256:922e06ef8839c92bd3ab37a84db6058b8764f3fe44dbb4487bbca941d288280a"}, - {file = "django_cleanup-6.0.0-py2.py3-none-any.whl", hash = "sha256:997feab3b1f7a2e84f71c29e83b1d664459ec0d4b1924977b1fa25b5babb8703"}, + {file = "django-cleanup-8.1.0.tar.gz", hash = "sha256:70df905076a44e7a111b31198199af633dee08876e199e6dce36ca8dd6b8b10f"}, + {file = "django_cleanup-8.1.0-py2.py3-none-any.whl", hash = "sha256:7903873ea73b3f7e61e055340d27dba49b70634f60c87a573ad748e172836458"}, ] [[package]] name = "django-cors-headers" -version = "3.13.0" +version = "4.3.1" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, - {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, + {file = "django-cors-headers-4.3.1.tar.gz", hash = "sha256:0bf65ef45e606aff1994d35503e6b677c0b26cafff6506f8fd7187f3be840207"}, + {file = "django_cors_headers-4.3.1-py3-none-any.whl", hash = "sha256:0b1fd19297e37417fc9f835d39e45c8c642938ddba1acce0c1753d3edef04f36"}, ] [package.dependencies] +asgiref = ">=3.6" Django = ">=3.2" [[package]] @@ -1196,13 +1209,13 @@ coverage = "*" [[package]] name = "django-debug-toolbar" -version = "3.8.1" +version = "4.2.0" description = "A configurable set of panels that display various debug information about the current request/response." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "django_debug_toolbar-3.8.1-py3-none-any.whl", hash = "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478"}, - {file = "django_debug_toolbar-3.8.1.tar.gz", hash = "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27"}, + {file = "django_debug_toolbar-4.2.0-py3-none-any.whl", hash = "sha256:af99128c06e8e794479e65ab62cc6c7d1e74e1c19beb44dcbf9bad7a9c017327"}, + {file = "django_debug_toolbar-4.2.0.tar.gz", hash = "sha256:bc7fdaafafcdedefcc67a4a5ad9dac96efd6e41db15bc74d402a54a2ba4854dc"}, ] [package.dependencies] @@ -1256,13 +1269,13 @@ Django = ">=3.2" [[package]] name = "django-filter" -version = "22.1" +version = "23.5" description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." optional = false python-versions = ">=3.7" files = [ - {file = "django-filter-22.1.tar.gz", hash = "sha256:ed473b76e84f7e83b2511bb2050c3efb36d135207d0128dfe3ae4b36e3594ba5"}, - {file = "django_filter-22.1-py3-none-any.whl", hash = "sha256:ed429e34760127e3520a67f415bec4c905d4649fbe45d0d6da37e6ff5e0287eb"}, + {file = "django-filter-23.5.tar.gz", hash = "sha256:67583aa43b91fe8c49f74a832d95f4d8442be628fd4c6d65e9f811f5153a4e5c"}, + {file = "django_filter-23.5-py3-none-any.whl", hash = "sha256:99122a201d83860aef4fe77758b69dda913e874cc5e0eaa50a86b0b18d708400"}, ] [package.dependencies] @@ -1327,18 +1340,19 @@ sftp = ["paramiko (>=1.10.0)"] [[package]] name = "django-versatileimagefield" -version = "2.2" +version = "3.1" description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." optional = false python-versions = "*" files = [ - {file = "django-versatileimagefield-2.2.tar.gz", hash = "sha256:6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3"}, - {file = "django_versatileimagefield-2.2-py2.py3-none-any.whl", hash = "sha256:03766f4d2332f192978879fdb196e18c53e6ccef6c55c5c26b59747b76a97288"}, + {file = "django-versatileimagefield-3.1.tar.gz", hash = "sha256:3390e20048098e897bf299b0360763d10cd089665b7aef8eba900eecbaead0d8"}, + {file = "django_versatileimagefield-3.1-py2.py3-none-any.whl", hash = "sha256:dfdffa11a0d4c169e44f164481d2b26f94a0a00517216ee85748324c2f96a669"}, ] [package.dependencies] -Pillow = ">=2.4.0" -python-magic = ">=0.4.15,<1.0.0" +Django = ">=3.0" +Pillow = ">=6.2.0" +python-magic = ">=0.4.22,<1.0.0" [[package]] name = "djangorestframework" @@ -1357,13 +1371,13 @@ pytz = "*" [[package]] name = "drf-spectacular" -version = "0.26.1" +version = "0.26.5" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" optional = false python-versions = ">=3.6" files = [ - {file = "drf-spectacular-0.26.1.tar.gz", hash = "sha256:1599a204bf9cc6be7ef3e509859885a38d4f871fe287a1f191479868afd9e234"}, - {file = "drf_spectacular-0.26.1-py3-none-any.whl", hash = "sha256:6df86ff6c2dc663792e5ff618643bf41d2ac9dc6fb5d1b0f273e2778bab951e5"}, + {file = "drf-spectacular-0.26.5.tar.gz", hash = "sha256:aee55330a774ba8a9cbdb125714d1c9ee05a8aafd3ce3be8bfd26527649aeb44"}, + {file = "drf_spectacular-0.26.5-py3-none-any.whl", hash = "sha256:c0002a820b11771fdbf37853deb371947caf0159d1afeeffe7598e964bc1db94"}, ] [package.dependencies] @@ -1380,18 +1394,32 @@ sidecar = ["drf-spectacular-sidecar"] [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "factory-boy" version = "3.2.1" @@ -1412,17 +1440,18 @@ doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] [[package]] name = "faker" -version = "15.3.4" +version = "23.2.1" description = "Faker is a Python package that generates fake data for you." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Faker-15.3.4-py3-none-any.whl", hash = "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76"}, - {file = "Faker-15.3.4.tar.gz", hash = "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc"}, + {file = "Faker-23.2.1-py3-none-any.whl", hash = "sha256:0520a6b97e07c658b2798d7140971c1d5bc4bcd5013e7937fe075fd054aa320c"}, + {file = "Faker-23.2.1.tar.gz", hash = "sha256:f07b64d27f67b62c7f0536a72f47813015b3b51cd4664918454011094321e464"}, ] [package.dependencies] python-dateutil = ">=2.4" +typing-extensions = {version = ">=3.10.0.1", markers = "python_version <= \"3.8\""} [[package]] name = "feedparser" @@ -1456,144 +1485,159 @@ pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "frozendict" -version = "2.3.8" +version = "2.4.0" description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, + {file = "frozendict-2.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:475c65202a6f5421df8cacb8a2f29c5087134a0542b0540ae95fbf4db7af2ff9"}, + {file = "frozendict-2.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2607e82efdd2c277224a58bda3994d4cd48e49eff7fa31e404cf3066e8dbfeae"}, + {file = "frozendict-2.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fd4583194baabe100c135883017da76259a315d34e303eddf198541b7e02e44"}, + {file = "frozendict-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efca7281184b54f7abab6980cf25837b709f72ced62791f62dabcd7b184d958a"}, + {file = "frozendict-2.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4cba1ced988ce9020dfcaae6fe3f5521eebc00c5772b511aaf691b0be91e6"}, + {file = "frozendict-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8fab616e7c0fea2ac928f107c740bd9ba516fc083adfcd1c391d6bfc9164403d"}, + {file = "frozendict-2.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:09ba8ee37d260adde311b8eb4cd12bf27f64071242f736757ae6a11d331eb860"}, + {file = "frozendict-2.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:0615ed71570eec3cc96df063930ea6e563211efeeac86e3f3cc8bdfc9c9bfab7"}, + {file = "frozendict-2.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc754117a7d60ba8e55b3c39abd67f37fbc05dd63cdcb03d1717a382fe0a3421"}, + {file = "frozendict-2.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2804ea4bd2179bb33b99483cc8d69246630cc00632b9affe2914e8666f1cc7e5"}, + {file = "frozendict-2.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4700c3f0aebdc8f4375c35590135794b1dbf2aca132f4756b584fa9910af2d"}, + {file = "frozendict-2.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:da4406d95c340e0b1cc43a3858fac729f52689325bcf61a9182eb94aff7451dc"}, + {file = "frozendict-2.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:1875e7b70a5724bf964354da8fd542240d2cead0d80053ac96bf4494ce3517fa"}, + {file = "frozendict-2.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a60f353496637ca21396289a7d969af1eb4ec4d11a7c37a0e7f25fc1761a0c97"}, + {file = "frozendict-2.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b666f9c6c8a9e794d2713a944b10a65480ff459579d75b5f686c75031c2c2dfc"}, + {file = "frozendict-2.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d81fb396ea81fcba3b3dde4a4b51adcb74ff31632014fbfd030f8acd5a7292"}, + {file = "frozendict-2.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4925c8e82d2bd23d45996cd0827668a52b9c51103897c98ce409a763d0c00c61"}, + {file = "frozendict-2.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa86325da6a6071284b4ed3d9d2cd9db068560aebad503b658d6a889a0575683"}, + {file = "frozendict-2.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5bb5b62d4e2bce12e91800496d94de41bec8f16e4d8a7b16e8f263676ae2031a"}, + {file = "frozendict-2.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3909df909516cfd7bcefd9a3003948970a12a50c5648d8bbddafcef171f2117f"}, + {file = "frozendict-2.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:204f2c5c10fc018d1ba8ccc67758aa83fe769c782547bd26dc250317a7ccba71"}, + {file = "frozendict-2.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8d1d269874c94b1ed2b6667e5e43dcf4541838019b1caa4c48f848ac73634df"}, + {file = "frozendict-2.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:809f1cffb602cf06e5186c69c0e3b74bec7a3684593145331f9aa2a65b5ba3b7"}, + {file = "frozendict-2.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b017cba5f73869b04c2977139ad08e57a7480de1e384c34193939698119baa1d"}, + {file = "frozendict-2.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0b75e5e231621dedaef88334997e79fbd137dd89895543d3862fe0220fc3572c"}, + {file = "frozendict-2.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df3819a5d48ab3aae1548e62093d0111ad7c3b62ff9392421b7bbf149c08b629"}, + {file = "frozendict-2.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:42a9b33ccf9d417b22146e59803c53d5c39d7d9151d2df8df59c235f6a1a5ed7"}, + {file = "frozendict-2.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3f51bfa64e0c4a6608e3f2878bab1211a6b3b197de6fa57151bbe73f1184457"}, + {file = "frozendict-2.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a1d232f092dc686e6ef23d436bde30f82c018f31cef1b89b31caef03814b1617"}, + {file = "frozendict-2.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e530658134e88607ff8c2c8934a07b2bb5e9fffab5045f127746f6542c6c77e"}, + {file = "frozendict-2.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23a52bbea30c9e35b89291273944393770fb031e522a172e3aff19b62cc50047"}, + {file = "frozendict-2.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f91acaff475d0ef0d3436b805c9b91fc627a6a8a281771a24f7ab7f458a0b34f"}, + {file = "frozendict-2.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:08d9c7c1aa92b94538b3a79c43999f999012e174588435f197794d5e5a80e0f5"}, + {file = "frozendict-2.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:05c5a77957ecba4286c7ab33861a8f4f2badc7ea86fc82b834fb360d3aa4c108"}, + {file = "frozendict-2.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:c8af8a6a39e0050d3f3193cda56c42b43534a9b3995c44241bb9527e3c3fd451"}, + {file = "frozendict-2.4.0.tar.gz", hash = "sha256:c26758198e403337933a92b01f417a8240c954f553e1d4b5e0f8e39d9c8e3f0a"}, ] [[package]] name = "frozenlist" -version = "1.4.0" +version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, + {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, + {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, + {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, + {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, + {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, + {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, + {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, + {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, + {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, + {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, + {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, + {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, + {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, + {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, + {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, + {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, + {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, + {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, + {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, + {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, + {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, + {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, + {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, + {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, + {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, + {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, + {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] [[package]] name = "funcy" -version = "1.18" +version = "2.0" description = "A fancy and practical functional tools" optional = false python-versions = "*" files = [ - {file = "funcy-1.18-py2.py3-none-any.whl", hash = "sha256:00ce91afc850357a131dc54f0db2ad8a1110d5087f1fa4480d7ea3ba0249f89d"}, - {file = "funcy-1.18.tar.gz", hash = "sha256:15448d19a8ebcc7a585afe7a384a19186d0bd67cbf56fb42cd1fd0f76313f9b2"}, + {file = "funcy-2.0-py2.py3-none-any.whl", hash = "sha256:53df23c8bb1651b12f095df764bfb057935d49537a56de211b098f4c79614bb0"}, + {file = "funcy-2.0.tar.gz", hash = "sha256:3963315d59d41c6f30c04bc910e10ab50a3ac4a225868bfa96feed133df075cb"}, ] [[package]] name = "gunicorn" -version = "20.1.0" +version = "21.2.0" description = "WSGI HTTP Server for UNIX" optional = false python-versions = ">=3.5" files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, ] [package.dependencies] -setuptools = ">=3.0" +packaging = "*" [package.extras] eventlet = ["eventlet (>=0.24.1)"] @@ -1614,46 +1658,47 @@ files = [ [[package]] name = "httptools" -version = "0.6.0" +version = "0.6.1" description = "A collection of framework independent HTTP protocol utils." optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.8.0" files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, ] [package.extras] @@ -1675,43 +1720,43 @@ idna = ">=2.5" [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" -version = "6.0.1" +version = "5.13.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-5.13.0-py3-none-any.whl", hash = "sha256:9f7bd0c97b79972a6cce36a366356d16d5e13b09679c11a58f1014bfdf8e64b2"}, + {file = "importlib_resources-5.13.0.tar.gz", hash = "sha256:82d5c6cca930697dbbd86c93333bb2c2e72861d4789a11c2662b933e5ad2b528"}, ] [package.dependencies] @@ -1776,13 +1821,13 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < [[package]] name = "ipython" -version = "7.34.0" +version = "8.12.3" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, + {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, + {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, ] [package.dependencies] @@ -1794,48 +1839,48 @@ jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] [[package]] name = "isort" -version = "5.12.0" +version = "5.13.2" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.8.0" files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, ] [package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] +colors = ["colorama (>=0.4.6)"] [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -1844,7 +1889,7 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jmespath" @@ -1859,13 +1904,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.0" +version = "4.21.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, + {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, ] [package.dependencies] @@ -1882,27 +1927,27 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.7.1" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" +referencing = ">=0.31.0" [[package]] name = "jwcrypto" -version = "1.5.0" +version = "1.5.1" description = "Implementation of JOSE Web standards" optional = false python-versions = ">= 3.6" files = [ - {file = "jwcrypto-1.5.0.tar.gz", hash = "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d"}, + {file = "jwcrypto-1.5.1.tar.gz", hash = "sha256:48bb9bf433777136253579e52b75ffe0f9a4a721d133d01f45a0b91ed5f4f1ae"}, ] [package.dependencies] @@ -1911,204 +1956,167 @@ deprecated = "*" [[package]] name = "kombu" -version = "5.2.4" +version = "5.3.4" description = "Messaging library for Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, - {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, + {file = "kombu-5.3.4-py3-none-any.whl", hash = "sha256:63bb093fc9bb80cfb3a0972336a5cec1fa7ac5f9ef7e8237c6bf8dda9469313e"}, + {file = "kombu-5.3.4.tar.gz", hash = "sha256:0bb2e278644d11dea6272c17974a3dbb9688a949f3bb60aeb5b791329c44fadc"}, ] [package.dependencies] -amqp = ">=5.0.9,<6.0.0" +amqp = ">=5.1.1,<6.0.0" +"backports.zoneinfo" = {version = ">=0.2.1", extras = ["tzdata"], markers = "python_version < \"3.9\""} +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} vine = "*" [package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] +azureservicebus = ["azure-servicebus (>=7.10.0)"] +azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] +confluentkafka = ["confluent-kafka (>=2.2.0)"] +consul = ["python-consul2"] librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] +mongodb = ["pymongo (>=4.1.1)"] msgpack = ["msgpack"] pyro = ["pyro4"] qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] +redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "lazy-object-proxy" -version = "1.9.0" -description = "A fast and thorough lazy object proxy." -optional = false -python-versions = ">=3.7" -files = [ - {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, - {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, - {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, - {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, - {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, - {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, -] +zookeeper = ["kazoo (>=2.8.0)"] [[package]] name = "lb-matching-tools" -version = "0.1.0" -description = "" +version = "2024.1.25.0rc1" +description = "ListenBrainz tools for matching metadata to and from MusicBrainz." optional = false -python-versions = ">=3.7" -files = [] -develop = false +python-versions = ">=3.8" +files = [ + {file = "lb-matching-tools-2024.1.25.0rc1.tar.gz", hash = "sha256:fdfe14608b36d3f58f25f7887ae522e20ff4eae1b07ec3e48444920742979309"}, + {file = "lb_matching_tools-2024.1.25.0rc1-py3-none-any.whl", hash = "sha256:8af16870e4dd588ccdb836399a2dd47ebcf80495c317d606ac24c44e19673782"}, +] [package.dependencies] regex = "*" -[package.source] -type = "git" -url = "https://github.com/metabrainz/listenbrainz-matching-tools.git" -reference = "main" -resolved_reference = "5de037ab3e35f3d45d2c6b2b458a818042dd4b12" +[package.extras] +build = ["build", "twine"] + +[[package]] +name = "liblistenbrainz" +version = "0.5.5" +description = "A simple ListenBrainz client library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "liblistenbrainz-0.5.5-py3-none-any.whl", hash = "sha256:6ffd5ed013c3a4b341a880136ccd5eb683e0a7a8983305f423aaf1b7adbad366"}, + {file = "liblistenbrainz-0.5.5.tar.gz", hash = "sha256:56eb564d0b0dab1b1bf77c01ec95c255fee3d84d51744b31851f2772ac95f41c"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +requests = ">=2.31.0" + +[package.extras] +build = ["build", "twine"] +docs = ["sphinx (==3.0.1)"] +tests = ["pytest (==5.4.1)", "pytest-cov (==2.8.1)"] [[package]] name = "lxml" -version = "4.9.3" +version = "5.1.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, + {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, + {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, + {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, + {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, + {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, + {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, + {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, + {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, + {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, + {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, + {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, + {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, + {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, + {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, + {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, + {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, + {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, + {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, + {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, + {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, + {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, + {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, + {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, + {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, + {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, + {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, + {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, + {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, + {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, + {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, + {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, + {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, + {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, + {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, + {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, + {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, + {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, + {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, + {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, + {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] +source = ["Cython (>=3.0.7)"] [[package]] name = "markdown" @@ -2155,168 +2163,177 @@ files = [ [[package]] name = "more-itertools" -version = "10.1.0" +version = "10.2.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" files = [ - {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, - {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, + {file = "more-itertools-10.2.0.tar.gz", hash = "sha256:8fccb480c43d3e99a00087634c06dd02b0d50fbf088b380de5a41a015ec239e1"}, + {file = "more_itertools-10.2.0-py3-none-any.whl", hash = "sha256:686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684"}, ] [[package]] name = "msgpack" -version = "1.0.5" +version = "1.0.7" description = "MessagePack serializer" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, - {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, - {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, - {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, - {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, - {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, - {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, - {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, - {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, - {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, - {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, - {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, - {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, - {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, - {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, - {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, + {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee"}, + {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1"}, + {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681"}, + {file = "msgpack-1.0.7-cp310-cp310-win32.whl", hash = "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9"}, + {file = "msgpack-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"}, + {file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"}, + {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"}, + {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"}, + {file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"}, + {file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4"}, + {file = "msgpack-1.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672"}, + {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c"}, + {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5"}, + {file = "msgpack-1.0.7-cp312-cp312-win32.whl", hash = "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9"}, + {file = "msgpack-1.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5b6ccc0c85916998d788b295765ea0e9cb9aac7e4a8ed71d12e7d8ac31c23c95"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:235a31ec7db685f5c82233bddf9858748b89b8119bf4538d514536c485c15fe0"}, + {file = "msgpack-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cab3db8bab4b7e635c1c97270d7a4b2a90c070b33cbc00c99ef3f9be03d3e1f7"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bfdd914e55e0d2c9e1526de210f6fe8ffe9705f2b1dfcc4aecc92a4cb4b533d"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36e17c4592231a7dbd2ed09027823ab295d2791b3b1efb2aee874b10548b7524"}, + {file = "msgpack-1.0.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38949d30b11ae5f95c3c91917ee7a6b239f5ec276f271f28638dec9156f82cfc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ff1d0899f104f3921d94579a5638847f783c9b04f2d5f229392ca77fba5b82fc"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dc43f1ec66eb8440567186ae2f8c447d91e0372d793dfe8c222aec857b81a8cf"}, + {file = "msgpack-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dd632777ff3beaaf629f1ab4396caf7ba0bdd075d948a69460d13d44357aca4c"}, + {file = "msgpack-1.0.7-cp38-cp38-win32.whl", hash = "sha256:4e71bc4416de195d6e9b4ee93ad3f2f6b2ce11d042b4d7a7ee00bbe0358bd0c2"}, + {file = "msgpack-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:8f5b234f567cf76ee489502ceb7165c2a5cecec081db2b37e35332b537f8157c"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81"}, + {file = "msgpack-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7"}, + {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd"}, + {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f"}, + {file = "msgpack-1.0.7-cp39-cp39-win32.whl", hash = "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad"}, + {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, + {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, ] [[package]] name = "multidict" -version = "6.0.4" +version = "6.0.5" description = "multidict implementation" optional = false python-versions = ">=3.7" files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, + {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, + {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, + {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, + {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, + {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, + {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, + {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, + {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, + {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, + {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, + {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, + {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, + {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, + {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, + {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, + {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, + {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, + {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, + {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, + {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, + {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, + {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, + {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, + {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, + {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, + {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, + {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, + {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, + {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, + {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, + {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, + {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, ] [[package]] @@ -2370,13 +2387,13 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2396,13 +2413,13 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] @@ -2418,13 +2435,13 @@ files = [ [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -2443,77 +2460,88 @@ files = [ [[package]] name = "pillow" -version = "9.3.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pkgutil-resolve-name" @@ -2528,28 +2556,28 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.3.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -2569,13 +2597,13 @@ files = [ [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.41" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.41-py3-none-any.whl", hash = "sha256:f36fe301fafb7470e86aaf90f036eef600a3210be4decf461a5b1ca8403d3cb2"}, + {file = "prompt_toolkit-3.0.41.tar.gz", hash = "sha256:941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"}, ] [package.dependencies] @@ -2583,91 +2611,105 @@ wcwidth = "*" [[package]] name = "psycopg2" -version = "2.9.7" +version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, - {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, - {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, - {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, - {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, - {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, - {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, - {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, - {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, + {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"}, + {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, + {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, + {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, + {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, + {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, + {file = "psycopg2-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:bac58c024c9922c23550af2a581998624d6e02350f4ae9c5f0bc642c633a2d5e"}, + {file = "psycopg2-2.9.9-cp39-cp39-win32.whl", hash = "sha256:c92811b2d4c9b6ea0285942b2e7cac98a59e166d59c588fe5cfe1eda58e72d59"}, + {file = "psycopg2-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913"}, + {file = "psycopg2-2.9.9.tar.gz", hash = "sha256:d1454bde93fb1e224166811694d600e746430c006fbb031ea06ecc2ea41bf156"}, ] [[package]] name = "psycopg2-binary" -version = "2.9.7" +version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "psycopg2-binary-2.9.7.tar.gz", hash = "sha256:1b918f64a51ffe19cd2e230b3240ba481330ce1d4b7875ae67305bd1d37b041c"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea5f8ee87f1eddc818fc04649d952c526db4426d26bab16efbe5a0c52b27d6ab"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2993ccb2b7e80844d534e55e0f12534c2871952f78e0da33c35e648bf002bbff"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbbc3c5d15ed76b0d9db7753c0db40899136ecfe97d50cbde918f630c5eb857a"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:692df8763b71d42eb8343f54091368f6f6c9cfc56dc391858cdb3c3ef1e3e584"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dcfd5d37e027ec393a303cc0a216be564b96c80ba532f3d1e0d2b5e5e4b1e6e"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17cc17a70dfb295a240db7f65b6d8153c3d81efb145d76da1e4a096e9c5c0e63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e5666632ba2b0d9757b38fc17337d84bdf932d38563c5234f5f8c54fd01349c9"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7db7b9b701974c96a88997d458b38ccb110eba8f805d4b4f74944aac48639b42"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c82986635a16fb1fa15cd5436035c88bc65c3d5ced1cfaac7f357ee9e9deddd4"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4fe13712357d802080cfccbf8c6266a3121dc0e27e2144819029095ccf708372"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win32.whl", hash = "sha256:122641b7fab18ef76b18860dd0c772290566b6fb30cc08e923ad73d17461dc63"}, - {file = "psycopg2_binary-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:f8651cf1f144f9ee0fa7d1a1df61a9184ab72962531ca99f077bbdcba3947c58"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ecc15666f16f97709106d87284c136cdc82647e1c3f8392a672616aed3c7151"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3fbb1184c7e9d28d67671992970718c05af5f77fc88e26fd7136613c4ece1f89"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7968fd20bd550431837656872c19575b687f3f6f98120046228e451e4064df"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:094af2e77a1976efd4956a031028774b827029729725e136514aae3cdf49b87b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26484e913d472ecb6b45937ea55ce29c57c662066d222fb0fbdc1fab457f18c5"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f309b77a7c716e6ed9891b9b42953c3ff7d533dc548c1e33fddc73d2f5e21f9"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d92e139ca388ccfe8c04aacc163756e55ba4c623c6ba13d5d1595ed97523e4b"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2df562bb2e4e00ee064779902d721223cfa9f8f58e7e52318c97d139cf7f012d"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4eec5d36dbcfc076caab61a2114c12094c0b7027d57e9e4387b634e8ab36fd44"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1011eeb0c51e5b9ea1016f0f45fa23aca63966a4c0afcf0340ccabe85a9f65bd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win32.whl", hash = "sha256:ded8e15f7550db9e75c60b3d9fcbc7737fea258a0f10032cdb7edc26c2a671fd"}, - {file = "psycopg2_binary-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:8a136c8aaf6615653450817a7abe0fc01e4ea720ae41dfb2823eccae4b9062a3"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2dec5a75a3a5d42b120e88e6ed3e3b37b46459202bb8e36cd67591b6e5feebc1"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc10da7e7df3380426521e8c1ed975d22df678639da2ed0ec3244c3dc2ab54c8"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee919b676da28f78f91b464fb3e12238bd7474483352a59c8a16c39dfc59f0c5"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb1c0e682138f9067a58fc3c9a9bf1c83d8e08cfbee380d858e63196466d5c86"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d8db270afb76f48a499f7bb8fa70297e66da67288471ca873db88382850bf4"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b0c2b466b2f4d89ccc33784c4ebb1627989bd84a39b79092e560e937a11d4ac"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:51d1b42d44f4ffb93188f9b39e6d1c82aa758fdb8d9de65e1ddfe7a7d250d7ad"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:11abdbfc6f7f7dea4a524b5f4117369b0d757725798f1593796be6ece20266cb"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f02f4a72cc3ab2565c6d9720f0343cb840fb2dc01a2e9ecb8bc58ccf95dc5c06"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:81d5dd2dd9ab78d31a451e357315f201d976c131ca7d43870a0e8063b6b7a1ec"}, - {file = "psycopg2_binary-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:62cb6de84d7767164a87ca97e22e5e0a134856ebcb08f21b621c6125baf61f16"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:59f7e9109a59dfa31efa022e94a244736ae401526682de504e87bd11ce870c22"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:95a7a747bdc3b010bb6a980f053233e7610276d55f3ca506afff4ad7749ab58a"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c721ee464e45ecf609ff8c0a555018764974114f671815a0a7152aedb9f3343"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4f37bbc6588d402980ffbd1f3338c871368fb4b1cfa091debe13c68bb3852b3"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac83ab05e25354dad798401babaa6daa9577462136ba215694865394840e31f8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:024eaeb2a08c9a65cd5f94b31ace1ee3bb3f978cd4d079406aef85169ba01f08"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1c31c2606ac500dbd26381145684d87730a2fac9a62ebcfbaa2b119f8d6c19f4"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:42a62ef0e5abb55bf6ffb050eb2b0fcd767261fa3faf943a4267539168807522"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7952807f95c8eba6a8ccb14e00bf170bb700cafcec3924d565235dffc7dc4ae8"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e02bc4f2966475a7393bd0f098e1165d470d3fa816264054359ed4f10f6914ea"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win32.whl", hash = "sha256:fdca0511458d26cf39b827a663d7d87db6f32b93efc22442a742035728603d5f"}, - {file = "psycopg2_binary-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:d0b16e5bb0ab78583f0ed7ab16378a0f8a89a27256bb5560402749dbe8a164d7"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6822c9c63308d650db201ba22fe6648bd6786ca6d14fdaf273b17e15608d0852"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f94cb12150d57ea433e3e02aabd072205648e86f1d5a0a692d60242f7809b15"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5ee89587696d808c9a00876065d725d4ae606f5f7853b961cdbc348b0f7c9a1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad5ec10b53cbb57e9a2e77b67e4e4368df56b54d6b00cc86398578f1c635f329"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:642df77484b2dcaf87d4237792246d8068653f9e0f5c025e2c692fc56b0dda70"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a8b575ac45af1eaccbbcdcf710ab984fd50af048fe130672377f78aaff6fc1"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f955aa50d7d5220fcb6e38f69ea126eafecd812d96aeed5d5f3597f33fad43bb"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad26d4eeaa0d722b25814cce97335ecf1b707630258f14ac4d2ed3d1d8415265"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ced63c054bdaf0298f62681d5dcae3afe60cbae332390bfb1acf0e23dcd25fc8"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2b04da24cbde33292ad34a40db9832a80ad12de26486ffeda883413c9e1b1d5e"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win32.whl", hash = "sha256:18f12632ab516c47c1ac4841a78fddea6508a8284c7cf0f292cb1a523f2e2379"}, - {file = "psycopg2_binary-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb3b8d55924a6058a26db69fb1d3e7e32695ff8b491835ba9f479537e14dcf9f"}, + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, ] [[package]] @@ -2681,15 +2723,29 @@ files = [ {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.5.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] [[package]] @@ -2717,6 +2773,20 @@ files = [ {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, ] +[[package]] +name = "pycountry" +version = "23.12.11" +description = "ISO country, subdivision, language, currency and script definitions and their translations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycountry-23.12.11-py3-none-any.whl", hash = "sha256:2ff91cff4f40ff61086e773d61e72005fe95de4a57bfc765509db05695dc50ab"}, + {file = "pycountry-23.12.11.tar.gz", hash = "sha256:00569d82eaefbc6a490a311bfa84a9c571cff9ddbf8b0a4f4e7b4f868b4ad925"}, +] + +[package.dependencies] +importlib-resources = {version = ">=5.12.0,<6.0.0", markers = "python_version < \"3.9\""} + [[package]] name = "pycparser" version = "2.21" @@ -2752,17 +2822,38 @@ files = [ [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pyld" @@ -2787,23 +2878,24 @@ requests = ["requests"] [[package]] name = "pylint" -version = "2.17.2" +version = "3.0.3" description = "python code static checker" optional = false -python-versions = ">=3.7.2" +python-versions = ">=3.8.0" files = [ - {file = "pylint-2.17.2-py3-none-any.whl", hash = "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8"}, - {file = "pylint-2.17.2.tar.gz", hash = "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb"}, + {file = "pylint-3.0.3-py3-none-any.whl", hash = "sha256:7a1585285aefc5165db81083c3e06363a27448f6b467b3b0f30dbd0ac1f73810"}, + {file = "pylint-3.0.3.tar.gz", hash = "sha256:58c2398b0301e049609a8429789ec6edf3aabe9b6c5fec916acd18639c16de8b"}, ] [package.dependencies] -astroid = ">=2.15.2,<=2.17.0-dev0" +astroid = ">=3.0.1,<=3.1.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] -isort = ">=4.2.5,<6" +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -2816,22 +2908,21 @@ testutils = ["gitpython (>3)"] [[package]] name = "pylint-django" -version = "2.5.3" +version = "2.5.5" description = "A Pylint plugin to help Pylint understand the Django web framework" optional = false -python-versions = "*" +python-versions = ">=3.7,<4.0" files = [ - {file = "pylint-django-2.5.3.tar.gz", hash = "sha256:0ac090d106c62fe33782a1d01bda1610b761bb1c9bf5035ced9d5f23a13d8591"}, - {file = "pylint_django-2.5.3-py3-none-any.whl", hash = "sha256:56b12b6adf56d548412445bd35483034394a1a94901c3f8571980a13882299d5"}, + {file = "pylint_django-2.5.5-py3-none-any.whl", hash = "sha256:5abd5c2228e0e5e2a4cb6d0b4fc1d1cef1e773d0be911412f4dd4fc1a1a440b7"}, + {file = "pylint_django-2.5.5.tar.gz", hash = "sha256:2f339e4bf55776958283395c5139c37700c91bd5ef1d8251ef6ac88b5abbba9b"}, ] [package.dependencies] -pylint = ">=2.0,<3" -pylint-plugin-utils = ">=0.7" +pylint = ">=2.0,<4" +pylint-plugin-utils = ">=0.8" [package.extras] -for-tests = ["coverage", "django-tables2", "django-tastypie", "factory-boy", "pylint (>=2.13)", "pytest", "wheel"] -with-django = ["Django"] +with-django = ["Django (>=2.2)"] [[package]] name = "pylint-plugin-utils" @@ -2847,65 +2938,59 @@ files = [ [package.dependencies] pylint = ">=1.7" -[[package]] -name = "pylistenbrainz" -version = "0.5.2" -description = "A simple ListenBrainz client library for Python" -optional = false -python-versions = ">=3.5" -files = [] -develop = false - -[package.dependencies] -importlib-metadata = {version = ">=3.10.0", markers = "python_version < \"3.10\""} -requests = ">=2.23.0" - -[package.source] -type = "git" -url = "https://github.com/metabrainz/pylistenbrainz.git" -reference = "v0.5.2" -resolved_reference = "f66414d2da3a260b9d4322d42f98ec7a6d6b982f" - [[package]] name = "pyopenssl" -version = "23.2.0" +version = "24.0.0" description = "Python wrapper module around the OpenSSL library" optional = false -python-versions = ">=3.6" -files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, -] - -[package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" - -[package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] - -[[package]] -name = "pytest" -version = "7.2.2" -description = "pytest: simple powerful testing with Python" -optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pyOpenSSL-24.0.0-py3-none-any.whl", hash = "sha256:ba07553fb6fd6a7a2259adb9b84e12302a9a8a75c44046e8bb5d3e5ee887e3c3"}, + {file = "pyOpenSSL-24.0.0.tar.gz", hash = "sha256:6aa33039a93fffa4563e655b61d11364d01264be8ccb49906101e02a334530bf"}, +] + +[package.dependencies] +cryptography = ">=41.0.5,<43" + +[package.extras] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0,!=7.2.5)", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.1.1" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "8.0.0" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-asyncio" @@ -2963,20 +3048,21 @@ testing = ["Django", "django-configurations (>=2.0)"] [[package]] name = "pytest-env" -version = "0.8.1" -description = "py.test plugin that allows you to add environment variables." +version = "1.1.3" +description = "pytest plugin that allows you to add environment variables." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest_env-0.8.1-py3-none-any.whl", hash = "sha256:8c0605ae09a5b7e41c20ebcc44f2c906eea9654095b4b0c342b3814bcc3a8492"}, - {file = "pytest_env-0.8.1.tar.gz", hash = "sha256:d7b2f5273ec6d1e221757998bc2f50d2474ed7d0b9331b92556011fadc4e9abf"}, + {file = "pytest_env-1.1.3-py3-none-any.whl", hash = "sha256:aada77e6d09fcfb04540a6e462c58533c37df35fa853da78707b17ec04d17dfc"}, + {file = "pytest_env-1.1.3.tar.gz", hash = "sha256:fcd7dc23bb71efd3d35632bde1bbe5ee8c8dc4489d6617fb010674880d96216b"}, ] [package.dependencies] -pytest = ">=7.1.3" +pytest = ">=7.4.3" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [package.extras] -test = ["coverage (>=6.5)", "pytest-mock (>=3.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "pytest-mock (>=3.12)"] [[package]] name = "pytest-mock" @@ -3012,13 +3098,13 @@ pytest = "*" [[package]] name = "pytest-sugar" -version = "0.9.7" +version = "1.0.0" description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." optional = false python-versions = "*" files = [ - {file = "pytest-sugar-0.9.7.tar.gz", hash = "sha256:f1e74c1abfa55f7241cf7088032b6e378566f16b938f3f08905e2cf4494edd46"}, - {file = "pytest_sugar-0.9.7-py2.py3-none-any.whl", hash = "sha256:8cb5a4e5f8bbcd834622b0235db9e50432f4cbd71fef55b467fe44e43701e062"}, + {file = "pytest-sugar-1.0.0.tar.gz", hash = "sha256:6422e83258f5b0c04ce7c632176c7732cab5fdb909cb39cca5c9139f81276c0a"}, + {file = "pytest_sugar-1.0.0-py3-none-any.whl", hash = "sha256:70ebcd8fc5795dc457ff8b69d266a4e2e8a74ae0c3edc749381c64b5246c8dfd"}, ] [package.dependencies] @@ -3045,13 +3131,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.0" +version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, ] [package.extras] @@ -3059,12 +3145,12 @@ cli = ["click (>=5.0)"] [[package]] name = "python-ldap" -version = "3.4.3" +version = "3.4.4" description = "Python modules for implementing LDAP clients" optional = false python-versions = ">=3.6" files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, + {file = "python-ldap-3.4.4.tar.gz", hash = "sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828"}, ] [package.dependencies] @@ -3102,13 +3188,13 @@ postgresql = ["psycopg2"] [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -3123,6 +3209,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3130,8 +3217,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3148,6 +3243,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3155,6 +3251,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -3162,13 +3259,13 @@ files = [ [[package]] name = "redis" -version = "4.5.5" +version = "5.0.1" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, + {file = "redis-5.0.1-py3-none-any.whl", hash = "sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f"}, + {file = "redis-5.0.1.tar.gz", hash = "sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f"}, ] [package.dependencies] @@ -3180,13 +3277,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "referencing" -version = "0.30.2" +version = "0.33.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, + {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, + {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, ] [package.dependencies] @@ -3195,117 +3292,122 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2023.8.8" +version = "2023.12.25" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, - {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, - {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, - {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, - {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, - {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, - {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, - {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, - {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, - {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, - {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, - {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, - {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, - {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, - {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, - {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, - {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, - {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, - {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, - {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, - {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, - {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, - {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, - {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, - {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, - {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, - {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, - {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, - {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, - {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, - {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, - {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -3365,108 +3467,110 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rpds-py" -version = "0.10.2" +version = "0.17.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.10.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c"}, - {file = "rpds_py-0.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08"}, - {file = "rpds_py-0.10.2-cp310-none-win32.whl", hash = "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a"}, - {file = "rpds_py-0.10.2-cp310-none-win_amd64.whl", hash = "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2"}, - {file = "rpds_py-0.10.2-cp311-none-win32.whl", hash = "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214"}, - {file = "rpds_py-0.10.2-cp311-none-win_amd64.whl", hash = "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab"}, - {file = "rpds_py-0.10.2-cp38-none-win32.whl", hash = "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a"}, - {file = "rpds_py-0.10.2-cp38-none-win_amd64.whl", hash = "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09"}, - {file = "rpds_py-0.10.2-cp39-none-win32.whl", hash = "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968"}, - {file = "rpds_py-0.10.2-cp39-none-win_amd64.whl", hash = "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1"}, - {file = "rpds_py-0.10.2.tar.gz", hash = "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, + {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, + {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, + {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, + {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, + {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, + {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, + {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, + {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, + {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, + {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, + {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, ] [[package]] @@ -3529,13 +3633,13 @@ tornado = ["tornado (>=5)"] [[package]] name = "service-identity" -version = "21.1.0" +version = "24.1.0" description = "Service identity verification for pyOpenSSL & cryptography." optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, - {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, + {file = "service_identity-24.1.0-py3-none-any.whl", hash = "sha256:a28caf8130c8a5c1c7a6f5293faaf239bbfb7751e4862436920ee6f2616f568a"}, + {file = "service_identity-24.1.0.tar.gz", hash = "sha256:6829c9d62fb832c2e1c435629b0a8c476e1929881f28bee4d20bc24161009221"}, ] [package.dependencies] @@ -3543,27 +3647,27 @@ attrs = ">=19.1.0" cryptography = "*" pyasn1 = "*" pyasn1-modules = "*" -six = "*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] -docs = ["furo", "sphinx"] +dev = ["pyopenssl", "service-identity[idna,mypy,tests]"] +docs = ["furo", "myst-parser", "pyopenssl", "sphinx", "sphinx-notfound-page"] idna = ["idna"] +mypy = ["idna", "mypy", "types-pyopenssl"] tests = ["coverage[toml] (>=5.0.2)", "pytest"] [[package]] name = "setuptools" -version = "68.2.1" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.1-py3-none-any.whl", hash = "sha256:eff96148eb336377ab11beee0c73ed84f1709a40c0b870298b0d058828761bae"}, - {file = "setuptools-68.2.1.tar.gz", hash = "sha256:56ee14884fd8d0cd015411f4a13f40b4356775a0aefd9ebc1d3bfb9a1acb32f1"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] @@ -3637,15 +3741,34 @@ dev = ["build", "flake8"] doc = ["sphinx"] test = ["pytest", "pytest-cov"] +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "termcolor" -version = "2.3.0" +version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, - {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, + {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, + {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, ] [package.extras] @@ -3664,65 +3787,67 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.1" +version = "0.12.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, - {file = "tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, + {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, + {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, ] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.14.1" description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, + {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "troi" -version = "0.1.0" +version = "2024.1.26.0" description = "An empathetic music recommendation system pipeline" optional = false -python-versions = ">=3.6" -files = [] -develop = false +python-versions = ">=3.8" +files = [ + {file = "troi-2024.1.26.0-py3-none-any.whl", hash = "sha256:85c66ab9a5a86f5e738471b315f73cf4aadbbabe7a26ca536331894fbd55985e"}, + {file = "troi-2024.1.26.0.tar.gz", hash = "sha256:2ccecad1662b65faa702c770092ef6b84f06979469d57248ef6f3f6f920437a3"}, +] [package.dependencies] click = ">=8.0" countryinfo = ">=0.1.2" -more_itertools = "*" +liblistenbrainz = ">=v0.5.5" +more-itertools = "*" psycopg2-binary = ">=2.9.3" -pylistenbrainz = {git = "https://github.com/metabrainz/pylistenbrainz.git", rev = "v0.5.2"} +pyparsing = "*" python-dateutil = ">=2.8.2" requests = "*" spotipy = ">=2.22.1" ujson = ">=5.4.0" -[package.source] -type = "git" -url = "https://github.com/metabrainz/troi-recommendation-playground.git" -reference = "main" -resolved_reference = "3c424ea4d7057ecc68d3b4b5a7036cf61bec816e" +[package.extras] +build = ["build"] +docs = ["Sphinx (==5.0.2)", "docutils (==0.17.1)", "sphinx-click (==4.3.0)", "sphinx-rtd-theme (==0.5.1)", "sphinxcontrib-httpdomain (==1.8.0)"] +tests = ["pytest (==7.1.2)", "pytest-cov (==4.1.0)", "requests-mock (==1.11.0)"] [[package]] name = "twisted" -version = "23.8.0" +version = "23.10.0" description = "An asynchronous networking framework written in Python" optional = false -python-versions = ">=3.7.1" +python-versions = ">=3.8.0" files = [ - {file = "twisted-23.8.0-py3-none-any.whl", hash = "sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd"}, - {file = "twisted-23.8.0.tar.gz", hash = "sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24"}, + {file = "twisted-23.10.0-py3-none-any.whl", hash = "sha256:4ae8bce12999a35f7fe6443e7f1893e6fe09588c8d2bed9c35cdce8ff2d5b444"}, + {file = "twisted-23.10.0.tar.gz", hash = "sha256:987847a0790a2c597197613686e2784fd54167df3a55d0fb17c8412305d76ce5"}, ] [package.dependencies] @@ -3735,19 +3860,18 @@ incremental = ">=22.10.0" pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} -typing-extensions = ">=3.10.0" +typing-extensions = ">=4.2.0" zope-interface = ">=5" [package.extras] -all-non-platform = ["twisted[conch,contextvars,http2,serial,test,tls]", "twisted[conch,contextvars,http2,serial,test,tls]"] +all-non-platform = ["twisted[conch,http2,serial,test,tls]", "twisted[conch,http2,serial,test,tls]"] conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] -contextvars = ["contextvars (>=2.4,<3)"] dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.4.0,<23.5.0)", "pydoctor (>=23.4.0,<23.5.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "sphinx (>=5,<7)", "sphinx (>=5,<7)", "sphinx-rtd-theme (>=1.2,<2.0)", "sphinx-rtd-theme (>=1.2,<2.0)", "towncrier (>=22.12,<23.0)", "towncrier (>=22.12,<23.0)", "urllib3 (<2)", "urllib3 (<2)"] +dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] -mypy = ["mypy (==0.981)", "mypy-extensions (==0.4.3)", "mypy-zope (==0.3.11)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] +mypy = ["mypy (>=1.5.1,<1.6.0)", "mypy-zope (>=1.0.1,<1.1.0)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] @@ -3813,83 +3937,98 @@ requests = "*" [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, +] + +[[package]] +name = "tzdata" +version = "2023.4" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] name = "ujson" -version = "5.8.0" +version = "5.9.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, - {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, - {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, - {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, - {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, - {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, - {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, - {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, - {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, - {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, - {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, - {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, - {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, - {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, - {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, - {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, - {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, - {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, - {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, - {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, - {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, - {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, - {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, - {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, - {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, - {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, - {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, - {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, - {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, + {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, + {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, + {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, + {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, + {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, + {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, + {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, + {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, + {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, + {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, + {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, + {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, + {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, + {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, + {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, + {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, + {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, + {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, + {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, + {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, + {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, + {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, + {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, + {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, + {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, + {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, + {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, + {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, + {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, ] [[package]] @@ -3909,13 +4048,13 @@ unidecode = "*" [[package]] name = "unidecode" -version = "1.3.6" +version = "1.3.7" description = "ASCII transliterations of Unicode text" optional = false python-versions = ">=3.5" files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, + {file = "Unidecode-1.3.7-py3-none-any.whl", hash = "sha256:663a537f506834ed836af26a81b210d90cbde044c47bfbdc0fbbc9f94c86a6e4"}, + {file = "Unidecode-1.3.7.tar.gz", hash = "sha256:3c90b4662aa0de0cb591884b934ead8d2225f1800d8da675a7750cbc3bd94610"}, ] [[package]] @@ -3931,17 +4070,17 @@ files = [ [[package]] name = "urllib3" -version = "1.26.16" +version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] @@ -3972,94 +4111,95 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "uvloop" -version = "0.17.0" +version = "0.19.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8.0" files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, + {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, + {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, + {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, + {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, + {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, + {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, + {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, + {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, + {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, + {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, + {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, + {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, + {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, + {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, + {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, + {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, ] [package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] [[package]] name = "vine" -version = "5.0.0" -description = "Promises, promises, promises." +version = "5.1.0" +description = "Python promises." optional = false python-versions = ">=3.6" files = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, + {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, + {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, ] [[package]] name = "watchdog" -version = "2.2.1" +version = "4.0.0" description = "Filesystem events monitoring" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, + {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"}, + {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"}, + {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"}, + {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"}, + {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"}, + {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"}, + {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"}, + {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"}, + {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"}, + {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"}, + {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"}, + {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, + {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] [package.extras] @@ -4067,33 +4207,86 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "watchfiles" -version = "0.20.0" +version = "0.21.0" description = "Simple, modern and high performance file watching and code reload in python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "watchfiles-0.20.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9"}, - {file = "watchfiles-0.20.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164"}, - {file = "watchfiles-0.20.0-cp37-abi3-win32.whl", hash = "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_amd64.whl", hash = "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_arm64.whl", hash = "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce"}, - {file = "watchfiles-0.20.0.tar.gz", hash = "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, ] [package.dependencies] @@ -4101,13 +4294,13 @@ anyio = ">=3.0.0" [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] @@ -4123,248 +4316,261 @@ files = [ [[package]] name = "websockets" -version = "11.0.3" +version = "12.0" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] name = "yarl" -version = "1.9.2" +version = "1.9.4" description = "Yet another URL library" optional = false python-versions = ">=3.7" files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, ] [package.dependencies] @@ -4373,63 +4579,69 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [[package]] name = "zope-interface" -version = "6.0" +version = "6.1" description = "Interfaces for Python" optional = false python-versions = ">=3.7" files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:43b576c34ef0c1f5a4981163b551a8781896f2a37f71b8655fd20b5af0386abb"}, + {file = "zope.interface-6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67be3ca75012c6e9b109860820a8b6c9a84bfb036fbd1076246b98e56951ca92"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b9bc671626281f6045ad61d93a60f52fd5e8209b1610972cf0ef1bbe6d808e3"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe81def9cf3e46f16ce01d9bfd8bea595e06505e51b7baf45115c77352675fd"}, + {file = "zope.interface-6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dc998f6de015723196a904045e5a2217f3590b62ea31990672e31fbc5370b41"}, + {file = "zope.interface-6.1-cp310-cp310-win_amd64.whl", hash = "sha256:239a4a08525c080ff833560171d23b249f7f4d17fcbf9316ef4159f44997616f"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ffdaa5290422ac0f1688cb8adb1b94ca56cee3ad11f29f2ae301df8aecba7d1"}, + {file = "zope.interface-6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c15ca9248f2e095ef2e93af2d633358c5f048c49fbfddf5fdfc47d5e263736"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b012d023b4fb59183909b45d7f97fb493ef7a46d2838a5e716e3155081894605"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97806e9ca3651588c1baaebb8d0c5ee3db95430b612db354c199b57378312ee8"}, + {file = "zope.interface-6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de"}, + {file = "zope.interface-6.1-cp311-cp311-win_amd64.whl", hash = "sha256:a0da79117952a9a41253696ed3e8b560a425197d4e41634a23b1507efe3273f1"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8bb9c990ca9027b4214fa543fd4025818dc95f8b7abce79d61dc8a2112b561a"}, + {file = "zope.interface-6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b51b64432eed4c0744241e9ce5c70dcfecac866dff720e746d0a9c82f371dfa7"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa6fd016e9644406d0a61313e50348c706e911dca29736a3266fc9e28ec4ca6d"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c8cf55261e15590065039696607f6c9c1aeda700ceee40c70478552d323b3ff"}, + {file = "zope.interface-6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e30506bcb03de8983f78884807e4fd95d8db6e65b69257eea05d13d519b83ac0"}, + {file = "zope.interface-6.1-cp312-cp312-win_amd64.whl", hash = "sha256:e33e86fd65f369f10608b08729c8f1c92ec7e0e485964670b4d2633a4812d36b"}, + {file = "zope.interface-6.1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:2f8d89721834524a813f37fa174bac074ec3d179858e4ad1b7efd4401f8ac45d"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13b7d0f2a67eb83c385880489dbb80145e9d344427b4262c49fbf2581677c11c"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef43ee91c193f827e49599e824385ec7c7f3cd152d74cb1dfe02cb135f264d83"}, + {file = "zope.interface-6.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e441e8b7d587af0414d25e8d05e27040d78581388eed4c54c30c0c91aad3a379"}, + {file = "zope.interface-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f89b28772fc2562ed9ad871c865f5320ef761a7fcc188a935e21fe8b31a38ca9"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70d2cef1bf529bff41559be2de9d44d47b002f65e17f43c73ddefc92f32bf00f"}, + {file = "zope.interface-6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ad54ed57bdfa3254d23ae04a4b1ce405954969c1b0550cc2d1d2990e8b439de1"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef467d86d3cfde8b39ea1b35090208b0447caaabd38405420830f7fd85fbdd56"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6af47f10cfc54c2ba2d825220f180cc1e2d4914d783d6fc0cd93d43d7bc1c78b"}, + {file = "zope.interface-6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9559138690e1bd4ea6cd0954d22d1e9251e8025ce9ede5d0af0ceae4a401e43"}, + {file = "zope.interface-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:964a7af27379ff4357dad1256d9f215047e70e93009e532d36dcb8909036033d"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:387545206c56b0315fbadb0431d5129c797f92dc59e276b3ce82db07ac1c6179"}, + {file = "zope.interface-6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57d0a8ce40ce440f96a2c77824ee94bf0d0925e6089df7366c2272ccefcb7941"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ebc4d34e7620c4f0da7bf162c81978fce0ea820e4fa1e8fc40ee763839805f3"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a804abc126b33824a44a7aa94f06cd211a18bbf31898ba04bd0924fbe9d282d"}, + {file = "zope.interface-6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f294a15f7723fc0d3b40701ca9b446133ec713eafc1cc6afa7b3d98666ee1ac"}, + {file = "zope.interface-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a41f87bb93b8048fe866fa9e3d0c51e27fe55149035dcf5f43da4b56732c0a40"}, + {file = "zope.interface-6.1.tar.gz", hash = "sha256:2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"}, ] [package.dependencies] setuptools = "*" [package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] +docs = ["Sphinx", "repoze.sphinx.autointerface", "sphinx-rtd-theme"] test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] @@ -4438,5 +4650,5 @@ typesense = ["typesense"] [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "b5d18d34f29b2ac96360cae13fd38fbc14b37c0a44989b21c905820d2234ae9e" +python-versions = "^3.8,<3.13" +content-hash = "3580dea40f4606a2d1cb36c8b35404e570aa75717dd984fc37e8ced8b1d6e0c7" diff --git a/api/pyproject.toml b/api/pyproject.toml index 70e65c47f..6d8b1bb23 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "funkwhale-api" -version = "1.3.3" +version = "1.4.0" description = "Funkwhale API" authors = ["Funkwhale Collective"] @@ -25,102 +25,104 @@ exclude = ["tests"] funkwhale-manage = 'funkwhale_api.main:main' [tool.poetry.dependencies] -python = "^3.8" +python = "^3.8,<3.13" # Django -dj-rest-auth = { extras = ["with_social"], version = "2.2.8" } -django = "==3.2.20" -django-allauth = "==0.42.0" +dj-rest-auth = "5.0.2" +django = "4.2.9" +django-allauth = "0.55.2" django-cache-memoize = "0.1.10" -django-cacheops = "==6.1" -django-cleanup = "==6.0.0" -django-cors-headers = "==3.13.0" +django-cacheops = "==7.0.2" +django-cleanup = "==8.1.0" +django-cors-headers = "==4.3.1" django-dynamic-preferences = "==1.14.0" django-environ = "==0.10.0" -django-filter = "==22.1" +django-filter = "==23.5" django-oauth-toolkit = "2.2.0" django-redis = "==5.2.0" django-storages = "==1.13.2" -django-versatileimagefield = "==2.2" +django-versatileimagefield = "==3.1" djangorestframework = "==3.14.0" -drf-spectacular = "==0.26.1" +drf-spectacular = "==0.26.5" markdown = "==3.4.4" persisting-theory = "==1.0" -psycopg2 = "==2.9.7" -redis = "==4.5.5" +psycopg2 = "==2.9.9" +redis = "==5.0.1" # Django LDAP django-auth-ldap = "==4.1.0" -python-ldap = "==3.4.3" +python-ldap = "==3.4.4" # Channels channels = { extras = ["daphne"], version = "==4.0.0" } channels-redis = "==4.1.0" # Celery -kombu = "==5.2.4" -celery = "==5.2.7" +kombu = "5.3.4" +celery = "5.3.6" # Deployment -gunicorn = "==20.1.0" +gunicorn = "==21.2.0" uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs -aiohttp = "==3.8.5" +aiohttp = "3.9.1" arrow = "==1.2.3" backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } -bleach = "==5.0.1" +bleach = "==6.1.0" boto3 = "==1.26.161" click = "==8.1.7" -cryptography = "==38.0.4" +cryptography = "==41.0.7" feedparser = "==6.0.10" +liblistenbrainz = "==0.5.5" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" -pillow = "==9.3.0" +pillow = "==10.2.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" -requests = "==2.28.2" +requests = "==2.31.0" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" -watchdog = "==2.2.1" -troi = { git = "https://github.com/metabrainz/troi-recommendation-playground.git", branch = "main"} -lb-matching-tools = { git = "https://github.com/metabrainz/listenbrainz-matching-tools.git", branch = "main"} -unidecode = "==1.3.6" +watchdog = "==4.0.0" +troi = "==2024.1.26.0" +lb-matching-tools = "==2024.1.25.0rc1" +unidecode = "==1.3.7" +pycountry = "23.12.11" # Typesense typesense = { version = "==0.15.1", optional = true } # Dependencies pinning -ipython = "==7.34.0" +ipython = "==8.12.3" pluralizer = "==1.2.0" -service-identity = "==21.1.0" +service-identity = "==24.1.0" unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] -aioresponses = "==0.7.4" +aioresponses = "==0.7.6" asynctest = "==0.13.0" -black = "==23.3.0" -coverage = { version = "==6.5.0", extras = ["toml"] } +black = "==24.1.1" +coverage = { version = "==7.4.1", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" -django-debug-toolbar = "==3.8.1" +django-debug-toolbar = "==4.2.0" factory-boy = "==3.2.1" -faker = "==15.3.4" +faker = "==23.2.1" flake8 = "==3.9.2" ipdb = "==0.13.13" -prompt-toolkit = "==3.0.39" -pytest = "==7.2.2" +pytest = "==8.0.0" pytest-asyncio = "==0.21.0" +prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" pytest-django = "==4.5.2" -pytest-env = "==0.8.1" +pytest-env = "==1.1.3" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" -pytest-sugar = "==0.9.7" +pytest-sugar = "==1.0.0" requests-mock = "==1.10.0" -pylint = "==2.17.2" -pylint-django = "==2.5.3" +pylint = "==3.0.3" +pylint-django = "==2.5.5" django-extensions = "==3.2.3" [tool.poetry.extras] diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 2a7251ab8..ff37ca380 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -108,7 +108,7 @@ def test_get_default_head_tags(preferences, settings): { "tag": "meta", "property": "og:image", - "content": settings.FUNKWHALE_URL + "/front/favicon.png", + "content": settings.FUNKWHALE_URL + "/android-chrome-512x512.png", }, {"tag": "meta", "property": "og:url", "content": settings.FUNKWHALE_URL + "/"}, ] diff --git a/api/tests/common/test_throttling.py b/api/tests/common/test_throttling.py index 5445bfbc9..272ff2367 100644 --- a/api/tests/common/test_throttling.py +++ b/api/tests/common/test_throttling.py @@ -17,7 +17,7 @@ def test_get_ident_anonymous(api_request): def test_get_ident_authenticated(api_request, factories): user = factories["users.User"]() request = api_request.get("/") - expected = {"id": user.pk, "type": "authenticated"} + expected = {"id": f"{user.pk}", "type": "authenticated"} assert throttling.get_ident(user, request) == expected @@ -26,7 +26,7 @@ def test_get_ident_authenticated(api_request, factories): [ ( "create", - {"id": 42, "type": "authenticated"}, + {"id": "42", "type": "authenticated"}, "throttling:create:authenticated:42", ), ( @@ -269,6 +269,7 @@ def test_throttle_calls_attach_info(method, mocker): def test_allow_request(api_request, settings, mocker): + settings.THROTTLING_ENABLED = True settings.THROTTLING_RATES = {"test": {"rate": "2/s"}} ip = "92.92.92.92" request = api_request.get("/", HTTP_X_FORWARDED_FOR=ip) diff --git a/api/tests/common/test_views.py b/api/tests/common/test_views.py index 7b08e50b4..1b4447a3d 100644 --- a/api/tests/common/test_views.py +++ b/api/tests/common/test_views.py @@ -160,7 +160,7 @@ def test_cannot_approve_reject_without_perm( def test_rate_limit(logged_in_api_client, now_time, settings, mocker): - expected_ident = {"type": "authenticated", "id": logged_in_api_client.user.pk} + expected_ident = {"type": "authenticated", "id": f"{logged_in_api_client.user.pk}"} expected = { "ident": expected_ident, diff --git a/api/tests/instance/test_nodeinfo.py b/api/tests/instance/test_nodeinfo.py index bd5b2e6cd..e8896e3bd 100644 --- a/api/tests/instance/test_nodeinfo.py +++ b/api/tests/instance/test_nodeinfo.py @@ -6,7 +6,7 @@ from funkwhale_api import __version__ as api_version from funkwhale_api.music.utils import SUPPORTED_EXTENSIONS -def test_nodeinfo_default(api_client): +def test_nodeinfo_20(api_client): url = reverse("api:v1:instance:nodeinfo-2.0") response = api_client.get(url) @@ -14,7 +14,7 @@ def test_nodeinfo_default(api_client): "version": "2.0", "software": OrderedDict([("name", "funkwhale"), ("version", api_version)]), "protocols": ["activitypub"], - "services": OrderedDict([("inbound", []), ("outbound", [])]), + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), "openRegistrations": False, "usage": { "users": OrderedDict( @@ -89,3 +89,74 @@ def test_nodeinfo_default(api_client): } assert response.data == expected + + +def test_nodeinfo_21(api_client): + url = reverse("api:v2:instance:nodeinfo-2.1") + response = api_client.get(url) + + expected = { + "version": "2.1", + "software": OrderedDict( + [ + ("name", "funkwhale"), + ("version", api_version), + ("repository", "https://dev.funkwhale.audio/funkwhale/funkwhale"), + ("homepage", "https://funkwhale.audio"), + ] + ), + "protocols": ["activitypub"], + "services": OrderedDict([("inbound", ["atom1.0"]), ("outbound", ["atom1.0"])]), + "openRegistrations": False, + "usage": { + "users": OrderedDict( + [("total", 0), ("activeHalfyear", 0), ("activeMonth", 0)] + ), + "localPosts": 0, + "localComments": 0, + }, + "metadata": { + "actorId": "https://test.federation/federation/actors/service", + "private": False, + "shortDescription": "", + "longDescription": "", + "contactEmail": "", + "nodeName": "", + "banner": None, + "defaultUploadQuota": 1000, + "supportedUploadExtensions": SUPPORTED_EXTENSIONS, + "allowList": {"enabled": False, "domains": None}, + "funkwhaleSupportMessageEnabled": True, + "instanceSupportMessage": "", + "usage": OrderedDict( + [ + ("favorites", OrderedDict([("tracks", {"total": 0})])), + ("listenings", OrderedDict([("total", 0)])), + ("downloads", OrderedDict([("total", 0)])), + ] + ), + "location": "", + "languages": ["en"], + "features": ["channels", "podcasts", "federation"], + "content": OrderedDict( + [ + ( + "local", + OrderedDict( + [ + ("artists", 0), + ("releases", 0), + ("recordings", 0), + ("hoursOfContent", 0), + ] + ), + ), + ("topMusicCategories", []), + ("topPodcastCategories", []), + ] + ), + "codeOfConduct": "", + }, + } + + assert response.data == expected diff --git a/api/tests/music/test_commands.py b/api/tests/music/test_commands.py index adee497b6..c46d5dad1 100644 --- a/api/tests/music/test_commands.py +++ b/api/tests/music/test_commands.py @@ -7,6 +7,7 @@ from funkwhale_api.music.management.commands import ( check_inplace_files, fix_uploads, prune_library, + prune_non_mbid_content, ) DATA_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -204,3 +205,45 @@ def test_check_inplace_files_no_dry_run(factories, tmpfile): for u in not_prunable: u.refresh_from_db() + + +def test_prune_non_mbid_content(factories): + prunable = factories["music.Track"](mbid=None) + + track = factories["music.Track"](mbid=None) + factories["playlists.PlaylistTrack"](track=track) + not_prunable = [factories["music.Track"](), track] + c = prune_non_mbid_content.Command() + options = { + "include_playlist_content": False, + "include_listened_content": False, + "include_favorited_content": True, + "no_dry_run": True, + } + c.handle(**options) + + with pytest.raises(prunable.DoesNotExist): + prunable.refresh_from_db() + + for t in not_prunable: + t.refresh_from_db() + + track = factories["music.Track"](mbid=None) + factories["playlists.PlaylistTrack"](track=track) + prunable = [factories["music.Track"](mbid=None), track] + + not_prunable = [factories["music.Track"]()] + options = { + "include_playlist_content": True, + "include_listened_content": False, + "include_favorited_content": False, + "no_dry_run": True, + } + c.handle(**options) + + for t in prunable: + with pytest.raises(t.DoesNotExist): + t.refresh_from_db() + + for t in not_prunable: + t.refresh_from_db() diff --git a/api/tests/music/test_filters.py b/api/tests/music/test_filters.py index 4879b6f38..54fc60072 100644 --- a/api/tests/music/test_filters.py +++ b/api/tests/music/test_filters.py @@ -3,9 +3,32 @@ import pytest from funkwhale_api.music import filters, models +def test_artist_filter_ordering(factories, mocker): + # Lista de prueba + artist1 = factories["music.Artist"](name="Anita Muller") + artist2 = factories["music.Artist"](name="Jane Smith") + artist3 = factories["music.Artist"](name="Adam Johnson") + artist4 = factories["music.Artist"](name="anita iux") + + qs = models.Artist.objects.all() + + cf = factories["moderation.UserFilter"](for_artist=True) + + # Request con ordenamiento + filterset = filters.ArtistFilter( + {"ordering": "name"}, request=mocker.Mock(user=cf.user), queryset=qs + ) + + expected_order = [artist3.name, artist4.name, artist1.name, artist2.name] + actual_order = list(filterset.qs.values_list("name", flat=True)) + + assert actual_order == expected_order + + def test_album_filter_hidden(factories, mocker, queryset_equal_list): factories["music.Album"]() cf = factories["moderation.UserFilter"](for_artist=True) + hidden_album = factories["music.Album"](artist=cf.target_artist) qs = models.Album.objects.all() diff --git a/api/tests/music/test_metadata.py b/api/tests/music/test_metadata.py index fbf448d07..49a7d799f 100644 --- a/api/tests/music/test_metadata.py +++ b/api/tests/music/test_metadata.py @@ -198,8 +198,8 @@ def test_can_get_pictures(name): cover_data = data.get_picture("cover_front", "other") assert cover_data["mimetype"].startswith("image/") assert len(cover_data["content"]) > 0 - assert type(cover_data["content"]) == bytes - assert type(cover_data["description"]) == str + assert type(cover_data["content"]) is bytes + assert type(cover_data["description"]) is str @pytest.mark.parametrize( diff --git a/api/tests/music/test_serializers.py b/api/tests/music/test_serializers.py index c5cc40464..7df47e537 100644 --- a/api/tests/music/test_serializers.py +++ b/api/tests/music/test_serializers.py @@ -245,7 +245,7 @@ def test_track_serializer(factories, to_api_date): "title": track.title, "position": track.position, "disc_number": track.disc_number, - "uploads": [serializers.serialize_upload(upload)], + "uploads": [serializers.TrackUploadSerializer(upload).data], "creation_date": to_api_date(track.creation_date), "listen_url": track.listen_url, "license": upload.track.license.code, @@ -373,7 +373,7 @@ def test_manage_upload_action_publish(factories, mocker): m.assert_any_call(tasks.process_upload.delay, upload_id=draft.pk) -def test_serialize_upload(factories): +def test_track_upload_serializer(factories): upload = factories["music.Upload"]() expected = { @@ -387,7 +387,7 @@ def test_serialize_upload(factories): "is_local": False, } - data = serializers.serialize_upload(upload) + data = serializers.TrackUploadSerializer(upload).data assert data == expected diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 43bb87dd3..b5b8a31e2 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -1400,3 +1400,53 @@ def test_fs_import(factories, cache, mocker, settings): } assert cache.get("fs-import:status") == "finished" assert "Pruning dangling tracks" in cache.get("fs-import:logs")[-1] + + +def test_upload_checks_mbid_tag(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "with_cover.opus") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated): + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "errored" + assert upload.import_details == { + "error_code": "Only content tagged with a MusicBrainz ID is permitted on this pod.", + "detail": "You can tag your files with MusicBrainz Picard", + } + + +def test_upload_checks_mbid_tag_pass(temp_signal, factories, mocker, preferences): + preferences["music__only_allow_musicbrainz_tagged_files"] = True + mocker.patch("funkwhale_api.federation.routes.outbox.dispatch") + mocker.patch("funkwhale_api.music.tasks.populate_album_cover") + mocker.patch("funkwhale_api.music.metadata.Metadata.get_picture") + track = factories["music.Track"](album__attachment_cover=None, mbid=None) + path = os.path.join(DATA_DIR, "test.mp3") + + upload = factories["music.Upload"]( + track=None, + audio_file__from_path=path, + import_metadata={"funkwhale": {"track": {"uuid": str(track.uuid)}}}, + ) + mocker.patch("funkwhale_api.music.models.TrackActor.create_entries") + + with temp_signal(signals.upload_import_status_updated): + tasks.process_upload(upload_id=upload.pk) + + upload.refresh_from_db() + + assert upload.import_status == "finished" diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py index 95c364fc2..a71d91f07 100644 --- a/api/tests/music/test_utils.py +++ b/api/tests/music/test_utils.py @@ -131,3 +131,12 @@ def test_transcode_file(name, expected): result = {k: round(v) for k, v in utils.get_audio_file_data(f).items()} assert result == expected + + +def test_custom_s3_domain(factories, settings): + """See #2220""" + settings.AWS_S3_CUSTOM_DOMAIN = "my.custom.domain.tld" + settings.DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIS3Boto3Storage" + f = factories["music.Upload"].build(audio_file__filename="test.mp3") + + assert f.audio_file.url.startswith("https://") diff --git a/api/tests/radios/test_lb_recommendations.py b/api/tests/radios/test_lb_recommendations.py index d495a2e0e..ac4c29480 100644 --- a/api/tests/radios/test_lb_recommendations.py +++ b/api/tests/radios/test_lb_recommendations.py @@ -24,7 +24,7 @@ def test_can_build_radio_queryset_with_fw_db(factories, mocker): mocker.patch("funkwhale_api.typesense.utils.resolve_recordings_to_fw_track") radio_qs = lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) recommended_recording_mbids = [ "87dfa566-21c3-45ed-bc42-1d345b8563fa", @@ -46,7 +46,7 @@ def test_build_radio_queryset_without_fw_db(mocker): with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) assert resolve_recordings_to_fw_track.called_once_with( @@ -67,7 +67,7 @@ def test_build_radio_queryset_with_redis_and_fw_db(factories, mocker): assert list( lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) ) == list(Track.objects.all().filter(pk__in=[1, 2])) @@ -84,14 +84,14 @@ def test_build_radio_queryset_with_redis_and_without_fw_db(factories, mocker): assert list( lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) ) == list(Track.objects.all().filter(pk=1)) def test_build_radio_queryset_catch_troi_ConnectTimeout(mocker): mocker.patch.object( - troi.core, + troi.core.Patch, "generate_playlist", side_effect=ConnectTimeout, ) @@ -99,18 +99,18 @@ def test_build_radio_queryset_catch_troi_ConnectTimeout(mocker): with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) def test_build_radio_queryset_catch_troi_no_candidates(mocker): mocker.patch.object( - troi.core, + troi.core.Patch, "generate_playlist", ) qs = Track.objects.all() with pytest.raises(ValueError): lb_recommendations.build_radio_queryset( - custom_factories.DummyPatch(), {"min_recordings": 1}, qs + custom_factories.DummyPatch({"min_recordings": 1}), qs ) diff --git a/api/tests/subsonic/test_renderers.py b/api/tests/subsonic/test_renderers.py index 551f5572c..c404555da 100644 --- a/api/tests/subsonic/test_renderers.py +++ b/api/tests/subsonic/test_renderers.py @@ -17,6 +17,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", }, ), @@ -30,6 +32,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", "error": {"code": 10, "message": "something went wrong"}, }, @@ -41,6 +45,8 @@ from funkwhale_api.subsonic import renderers "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", "error": {"code": 0, "message": "something went wrong"}, }, @@ -59,6 +65,8 @@ def test_json_renderer(): "version": "1.16.0", "type": "funkwhale", "funkwhaleVersion": funkwhale_api.__version__, + "serverVersion": funkwhale_api.__version__, + "openSubsonic": "true", "hello": "world", } } @@ -71,9 +79,10 @@ def test_xml_renderer_dict_to_xml(): "hello": "world", "item": [{"this": 1, "value": "text"}, {"some": "node"}], "list": [1, 2], + "some-tag": renderers.TagValue("foo"), } expected = """<?xml version="1.0" encoding="UTF-8"?> -<key hello="world"><item this="1">text</item><item some="node" /><list>1</list><list>2</list></key>""" +<key hello="world"><item this="1">text</item><item some="node" /><list>1</list><list>2</list><some-tag>foo</some-tag></key>""" # noqa result = renderers.dict_to_xml_tree("key", payload) exp = ET.fromstring(expected) assert ET.tostring(result) == ET.tostring(exp) @@ -81,8 +90,9 @@ def test_xml_renderer_dict_to_xml(): def test_xml_renderer(): payload = {"hello": "world"} - expected = '<?xml version="1.0" encoding="UTF-8"?>\n<subsonic-response funkwhaleVersion="{}" hello="world" status="ok" type="funkwhale" version="1.16.0" xmlns="http://subsonic.org/restapi" />' # noqa - expected = expected.format(funkwhale_api.__version__).encode() + expected = '<?xml version="1.0" encoding="UTF-8"?>\n<subsonic-response funkwhaleVersion="{}" hello="world" openSubsonic="true" serverVersion="{}" status="ok" type="funkwhale" version="1.16.0" xmlns="http://subsonic.org/restapi" />' # noqa + version = funkwhale_api.__version__ + expected = expected.format(version, version).encode() renderer = renderers.SubsonicXMLRenderer() rendered = renderer.render(payload) diff --git a/api/tests/subsonic/test_serializers.py b/api/tests/subsonic/test_serializers.py index bb419e61d..507b57bd5 100644 --- a/api/tests/subsonic/test_serializers.py +++ b/api/tests/subsonic/test_serializers.py @@ -4,7 +4,7 @@ import pytest from django.db.models.aggregates import Count from funkwhale_api.music import models as music_models -from funkwhale_api.subsonic import serializers +from funkwhale_api.subsonic import renderers, serializers @pytest.mark.parametrize( @@ -90,12 +90,14 @@ def test_get_artists_serializer(factories): "name": artist1.name, "albumCount": 3, "coverArt": f"ar-{artist1.id}", + "musicBrainzId": artist1.mbid, }, { "id": artist2.pk, "name": artist2.name, "albumCount": 2, "coverArt": f"ar-{artist2.id}", + "musicBrainzId": artist2.mbid, }, ], }, @@ -107,6 +109,7 @@ def test_get_artists_serializer(factories): "name": artist3.name, "albumCount": 0, "coverArt": f"ar-{artist3.id}", + "musicBrainzId": artist3.mbid, } ], }, @@ -147,6 +150,24 @@ def test_get_artist_serializer(factories): assert serializers.GetArtistSerializer(artist).data == expected +def test_get_artist_info_2_serializer(factories): + content = factories["common.Content"]() + artist = factories["music.Artist"](with_cover=True, description=content) + + expected = { + "musicBrainzId": artist.mbid, + "mediumImageUrl": renderers.TagValue( + artist.attachment_cover.download_url_medium_square_crop + ), + "largeImageUrl": renderers.TagValue( + artist.attachment_cover.download_url_large_square_crop + ), + "biography": renderers.TagValue(artist.description.rendered), + } + + assert serializers.GetArtistInfo2Serializer(artist).data == expected + + @pytest.mark.parametrize( "mimetype, extension, expected", [ @@ -184,6 +205,9 @@ def test_get_album_serializer(factories): "year": album.release_date.year, "coverArt": f"al-{album.id}", "genre": tagged_item.tag.name, + "genres": [{"name": tagged_item.tag.name}], + "mediaType": "album", + "musicBrainzId": album.mbid, "duration": 43, "playCount": album.tracks.aggregate(l=Count("listenings"))["l"] or 0, "song": [ @@ -200,13 +224,15 @@ def test_get_album_serializer(factories): "contentType": upload.mimetype, "suffix": upload.extension or "", "path": serializers.get_track_path(track, upload.extension), - "bitrate": 42, + "bitRate": 42, "duration": 43, "size": 44, "created": serializers.to_subsonic_date(track.creation_date), "albumId": album.pk, "artistId": artist.pk, "type": "music", + "mediaType": "song", + "musicBrainzId": track.mbid, } ], } @@ -341,7 +367,7 @@ def test_channel_episode_serializer(factories): "genre": "Podcast", "size": upload.size, "duration": upload.duration, - "bitrate": upload.bitrate / 1000, + "bitRate": upload.bitrate / 1000, "contentType": upload.mimetype, "suffix": upload.extension, "status": "completed", diff --git a/api/tests/subsonic/test_views.py b/api/tests/subsonic/test_views.py index f11f863fa..c1a3245dc 100644 --- a/api/tests/subsonic/test_views.py +++ b/api/tests/subsonic/test_views.py @@ -97,6 +97,23 @@ def test_ping(f, db, api_client): assert response.data == expected +@pytest.mark.parametrize("f", ["xml", "json"]) +def test_get_open_subsonic_extensions(f, db, api_client): + url = reverse("api:subsonic:subsonic-get_open_subsonic_extensions") + response = api_client.get(url, {"f": f}) + + expected = { + "openSubsonicExtensions": [ + { + "name": "formPost", + "versions": [1], + } + ], + } + assert response.status_code == 200 + assert response.data == expected + + @pytest.mark.parametrize("f", ["json"]) def test_get_artists( f, db, logged_in_api_client, factories, mocker, queryset_equal_queries @@ -166,7 +183,11 @@ def test_get_artist_info2( artist = factories["music.Artist"](playable=True) playable_by = mocker.spy(music_models.ArtistQuerySet, "playable_by") - expected = {"artist-info2": {}} + expected = { + "artistInfo2": { + "musicBrainzId": artist.mbid, + } + } response = logged_in_api_client.get(url, {"id": artist.pk}) assert response.status_code == 200 @@ -592,7 +613,7 @@ def test_search3(f, db, logged_in_api_client, factories): artist_qs = ( music_models.Artist.objects.with_albums_count() .filter(pk=artist.pk) - .values("_albums_count", "id", "name") + .values("_albums_count", "id", "name", "mbid") ) assert response.status_code == 200 assert response.data == { diff --git a/api/tests/test_urls.py b/api/tests/test_urls.py index 9e4449a32..e48861bc1 100644 --- a/api/tests/test_urls.py +++ b/api/tests/test_urls.py @@ -12,5 +12,5 @@ def test_can_resolve_subsonic(): def test_can_resolve_v2(): - path = reverse("api:v2:instance:nodeinfo-2.0") - assert path == "/api/v2/instance/nodeinfo/2.0" + path = reverse("api:v2:instance:nodeinfo-2.1") + assert path == "/api/v2/instance/nodeinfo/2.1" diff --git a/api/tests/users/test_views.py b/api/tests/users/test_views.py index 432f371fb..8b7dd5e55 100644 --- a/api/tests/users/test_views.py +++ b/api/tests/users/test_views.py @@ -8,7 +8,27 @@ from funkwhale_api.moderation import tasks as moderation_tasks from funkwhale_api.users.models import User -def test_can_create_user_via_api(preferences, api_client, db): +def test_can_create_user_via_api(settings, preferences, api_client, db): + url = reverse("rest_register") + data = { + "username": "test1", + "email": "test1@test.com", + "password1": "thisismypassword", + "password2": "thisismypassword", + } + preferences["users__registration_enabled"] = True + settings.ACCOUNT_EMAIL_VERIFICATION = "mandatory" + response = api_client.post(url, data) + assert response.status_code == 201 + assert response.data["detail"] == "Verification e-mail sent." + + u = User.objects.get(email="test1@test.com") + assert u.username == "test1" + + +def test_can_create_user_via_api_mail_verification_mandatory( + settings, preferences, api_client, db +): url = reverse("rest_register") data = { "username": "test1", @@ -18,7 +38,7 @@ def test_can_create_user_via_api(preferences, api_client, db): } preferences["users__registration_enabled"] = True response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" @@ -82,7 +102,7 @@ def test_can_signup_with_invitation(preferences, factories, api_client): } preferences["users__registration_enabled"] = False response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" assert u.invitation == invitation @@ -302,7 +322,7 @@ def test_creating_user_creates_actor_as_well( mocker.patch("funkwhale_api.users.models.create_actor", return_value=actor) response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 user = User.objects.get(username="test1") @@ -323,7 +343,7 @@ def test_creating_user_sends_confirmation_email( preferences["instance__name"] = "Hello world" response = api_client.post(url, data) - assert response.status_code == 201 + assert response.status_code == 204 confirmation_message = mailoutbox[-1] assert "Hello world" in confirmation_message.body @@ -405,7 +425,7 @@ def test_signup_with_approval_enabled( } on_commit = mocker.patch("funkwhale_api.common.utils.on_commit") response = api_client.post(url, data, format="json") - assert response.status_code == 201 + assert response.status_code == 204 u = User.objects.get(email="test1@test.com") assert u.username == "test1" assert u.is_active is False diff --git a/changes/changelog.d/1288.feature b/changes/changelog.d/1288.feature deleted file mode 100644 index d4deefedc..000000000 --- a/changes/changelog.d/1288.feature +++ /dev/null @@ -1,3 +0,0 @@ - -Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI -entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288) diff --git a/changes/changelog.d/1861.newfeature b/changes/changelog.d/1861.newfeature deleted file mode 100644 index 762f3fb10..000000000 --- a/changes/changelog.d/1861.newfeature +++ /dev/null @@ -1 +0,0 @@ -Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861) diff --git a/changes/changelog.d/1939.bugfix b/changes/changelog.d/1939.bugfix deleted file mode 100644 index bdc1b19dc..000000000 --- a/changes/changelog.d/1939.bugfix +++ /dev/null @@ -1 +0,0 @@ -Merge nginx configs for docker production and development setups (#1939) diff --git a/changes/changelog.d/2067.misc b/changes/changelog.d/2067.misc deleted file mode 100644 index e14811359..000000000 --- a/changes/changelog.d/2067.misc +++ /dev/null @@ -1 +0,0 @@ -Rename CHANGELOG to CHANGELOG.md diff --git a/changes/changelog.d/2083.enhancement b/changes/changelog.d/2083.enhancement new file mode 100644 index 000000000..62a5c7482 --- /dev/null +++ b/changes/changelog.d/2083.enhancement @@ -0,0 +1 @@ +Add cli command to prune non mbid content from db (#2083) diff --git a/changes/changelog.d/2102.bugfix b/changes/changelog.d/2102.bugfix deleted file mode 100644 index 170279565..000000000 --- a/changes/changelog.d/2102.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed development docker setup (2102) diff --git a/changes/changelog.d/2104.enhancement b/changes/changelog.d/2104.enhancement deleted file mode 100644 index 0d15120f7..000000000 --- a/changes/changelog.d/2104.enhancement +++ /dev/null @@ -1 +0,0 @@ -Adding typesense container and api client (2104) diff --git a/changes/changelog.d/2123.feature b/changes/changelog.d/2123.feature deleted file mode 100644 index 902a96177..000000000 --- a/changes/changelog.d/2123.feature +++ /dev/null @@ -1 +0,0 @@ -Add a management command to generate dummy notifications for testing diff --git a/changes/changelog.d/2135.feature b/changes/changelog.d/2135.feature deleted file mode 100644 index d099eeb56..000000000 --- a/changes/changelog.d/2135.feature +++ /dev/null @@ -1 +0,0 @@ -Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135) diff --git a/changes/changelog.d/2156.feature b/changes/changelog.d/2156.feature deleted file mode 100644 index 98d0e437d..000000000 --- a/changes/changelog.d/2156.feature +++ /dev/null @@ -1,2 +0,0 @@ -New management command to update Uploads which have been imported using --in-place and are now -stored in s3 (#2156) diff --git a/changes/changelog.d/2159.bugfix b/changes/changelog.d/2159.bugfix deleted file mode 100644 index fca0c9dfb..000000000 --- a/changes/changelog.d/2159.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure embed codes generated before 1.3.0 are still working diff --git a/changes/changelog.d/2163.bugfix b/changes/changelog.d/2163.bugfix deleted file mode 100644 index f352d8bb6..000000000 --- a/changes/changelog.d/2163.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed embedded player crash when API returns relative listen URL. (#2163) diff --git a/changes/changelog.d/2193.enhancement b/changes/changelog.d/2193.enhancement deleted file mode 100644 index 770b8b675..000000000 --- a/changes/changelog.d/2193.enhancement +++ /dev/null @@ -1 +0,0 @@ -Cache pip package in api docker builds (#2193) diff --git a/changes/changelog.d/2196.bugfix b/changes/changelog.d/2196.bugfix deleted file mode 100644 index e8400f7d0..000000000 --- a/changes/changelog.d/2196.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fixed development docker setup (2196) diff --git a/changes/changelog.d/2215.enchancement b/changes/changelog.d/2215.enchancement deleted file mode 100644 index 7e0e89871..000000000 --- a/changes/changelog.d/2215.enchancement +++ /dev/null @@ -1 +0,0 @@ -Add custom logging functionality (#2155) diff --git a/changes/changelog.d/2757.enhancement b/changes/changelog.d/2757.enhancement new file mode 100644 index 000000000..dd9d34ecb --- /dev/null +++ b/changes/changelog.d/2757.enhancement @@ -0,0 +1 @@ +Add tests for track cache diff --git a/changes/changelog.d/2757.feature b/changes/changelog.d/2757.feature new file mode 100644 index 000000000..d0d957458 --- /dev/null +++ b/changes/changelog.d/2757.feature @@ -0,0 +1 @@ +Generate mock test server from openapi schema diff --git a/changes/changelog.d/2757.refactoring b/changes/changelog.d/2757.refactoring new file mode 100644 index 000000000..26cfe8dc7 --- /dev/null +++ b/changes/changelog.d/2757.refactoring @@ -0,0 +1 @@ +Add compatibility for lru-cache v10 diff --git a/changes/changelog.d/add-build-metadata-script.misc b/changes/changelog.d/add-build-metadata-script.misc deleted file mode 100644 index 863865ef3..000000000 --- a/changes/changelog.d/add-build-metadata-script.misc +++ /dev/null @@ -1 +0,0 @@ -Add build metadata script diff --git a/changes/changelog.d/allauth.enhancement b/changes/changelog.d/allauth.enhancement new file mode 100644 index 000000000..30c4cf0a3 --- /dev/null +++ b/changes/changelog.d/allauth.enhancement @@ -0,0 +1 @@ +Update dj-rest-auth to 5.0.2 and django-allauth to 0.55.2 diff --git a/changes/changelog.d/alpine-319.misc b/changes/changelog.d/alpine-319.misc new file mode 100644 index 000000000..91adac627 --- /dev/null +++ b/changes/changelog.d/alpine-319.misc @@ -0,0 +1 @@ +Use Alpine 3.19 as base for docker images diff --git a/changes/changelog.d/apache-template-fix.doc b/changes/changelog.d/apache-template-fix.doc new file mode 100644 index 000000000..acfabe6da --- /dev/null +++ b/changes/changelog.d/apache-template-fix.doc @@ -0,0 +1 @@ +Fixed the sample Apache configuration diff --git a/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement b/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement deleted file mode 100644 index 1a02d809f..000000000 --- a/changes/changelog.d/api-replace-pytz-zoneinfo.enhancement +++ /dev/null @@ -1 +0,0 @@ -Replace pytz with zoneinfo in the API diff --git a/changes/changelog.d/ci-fix-deploy-docs.misc b/changes/changelog.d/ci-fix-deploy-docs.misc deleted file mode 100644 index dd980f183..000000000 --- a/changes/changelog.d/ci-fix-deploy-docs.misc +++ /dev/null @@ -1 +0,0 @@ -Fix CI deploy docs job after stable branch merge diff --git a/changes/changelog.d/ci-fix-workflow-branch-regex.misc b/changes/changelog.d/ci-fix-workflow-branch-regex.misc deleted file mode 100644 index ba662eeee..000000000 --- a/changes/changelog.d/ci-fix-workflow-branch-regex.misc +++ /dev/null @@ -1 +0,0 @@ -Don't run CI on branch containing stable or develop diff --git a/changes/changelog.d/ci-rework.misc b/changes/changelog.d/ci-rework.misc deleted file mode 100644 index fe9451a0a..000000000 --- a/changes/changelog.d/ci-rework.misc +++ /dev/null @@ -1 +0,0 @@ -Rework the CI pipeline diff --git a/changes/changelog.d/ci-speedup-linting.enhancement b/changes/changelog.d/ci-speedup-linting.enhancement deleted file mode 100644 index 4406a1910..000000000 --- a/changes/changelog.d/ci-speedup-linting.enhancement +++ /dev/null @@ -1 +0,0 @@ -Speed up linting and type-checking by using cache diff --git a/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc b/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc deleted file mode 100644 index 8901bed00..000000000 --- a/changes/changelog.d/ci-use-buildx-bake-in-docker-job.misc +++ /dev/null @@ -1 +0,0 @@ -Use buildx bake in docker job diff --git a/changes/changelog.d/cypress.feature b/changes/changelog.d/cypress.feature deleted file mode 100644 index 00b66d6cd..000000000 --- a/changes/changelog.d/cypress.feature +++ /dev/null @@ -1 +0,0 @@ -Add basic cypress testing diff --git a/changes/changelog.d/descriptive-service-worker-error.enchancement b/changes/changelog.d/descriptive-service-worker-error.enchancement deleted file mode 100644 index fc3d84224..000000000 --- a/changes/changelog.d/descriptive-service-worker-error.enchancement +++ /dev/null @@ -1 +0,0 @@ -Log service worker registration error and add a warning about Firefox SW incompatibility in development mode diff --git a/changes/changelog.d/development-docs.bugfix b/changes/changelog.d/development-docs.bugfix deleted file mode 100644 index fd74f653f..000000000 --- a/changes/changelog.d/development-docs.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure funkwhale_api package and metadata are available for docs diff --git a/changes/changelog.d/django4.2.enhancement b/changes/changelog.d/django4.2.enhancement new file mode 100644 index 000000000..7d261c53f --- /dev/null +++ b/changes/changelog.d/django4.2.enhancement @@ -0,0 +1 @@ +Update django to version 4.2 diff --git a/changes/changelog.d/drop-python3.7.removal b/changes/changelog.d/drop-python3.7.removal deleted file mode 100644 index 936f7f0fc..000000000 --- a/changes/changelog.d/drop-python3.7.removal +++ /dev/null @@ -1 +0,0 @@ -Drop support for python3.7 diff --git a/changes/changelog.d/format-api-dockerfile.misc b/changes/changelog.d/format-api-dockerfile.misc deleted file mode 100644 index 4fb0d59d0..000000000 --- a/changes/changelog.d/format-api-dockerfile.misc +++ /dev/null @@ -1 +0,0 @@ -Format api container file diff --git a/changes/changelog.d/front-split-large-bundles.enhancement b/changes/changelog.d/front-split-large-bundles.enhancement deleted file mode 100644 index cb53791b5..000000000 --- a/changes/changelog.d/front-split-large-bundles.enhancement +++ /dev/null @@ -1 +0,0 @@ -Split front large bundles into smaller chunks diff --git a/changes/changelog.d/funkwhale-manage_scripts.bugfix b/changes/changelog.d/funkwhale-manage_scripts.bugfix deleted file mode 100644 index de23db89f..000000000 --- a/changes/changelog.d/funkwhale-manage_scripts.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix help messages for running scripts using funkwhale-manage diff --git a/changes/changelog.d/get-api-version-from-package.enhancement b/changes/changelog.d/get-api-version-from-package.enhancement deleted file mode 100644 index 307b14c07..000000000 --- a/changes/changelog.d/get-api-version-from-package.enhancement +++ /dev/null @@ -1 +0,0 @@ -Get api version from python package diff --git a/changes/changelog.d/lint-api-using-pylint.misc b/changes/changelog.d/lint-api-using-pylint.misc deleted file mode 100644 index 75da99123..000000000 --- a/changes/changelog.d/lint-api-using-pylint.misc +++ /dev/null @@ -1 +0,0 @@ -Lint api code using pylint diff --git a/changes/changelog.d/maintain-api-version-using-poetry.enhancement b/changes/changelog.d/maintain-api-version-using-poetry.enhancement deleted file mode 100644 index 339241f43..000000000 --- a/changes/changelog.d/maintain-api-version-using-poetry.enhancement +++ /dev/null @@ -1 +0,0 @@ -Maintain api version using poetry diff --git a/changes/changelog.d/maloja-extend-submission.enhancement b/changes/changelog.d/maloja-extend-submission.enhancement deleted file mode 100644 index 52fe7cd7b..000000000 --- a/changes/changelog.d/maloja-extend-submission.enhancement +++ /dev/null @@ -1 +0,0 @@ -Maloja: Submit album artists and duration and allow to disable server side metadata fixing diff --git a/changes/changelog.d/multiarch.bugfix b/changes/changelog.d/multiarch.bugfix deleted file mode 100644 index 1c770c463..000000000 --- a/changes/changelog.d/multiarch.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix multiarch docker builds #2211 diff --git a/changes/changelog.d/nodeinfo.doc b/changes/changelog.d/nodeinfo.doc deleted file mode 100644 index de897bfc3..000000000 --- a/changes/changelog.d/nodeinfo.doc +++ /dev/null @@ -1 +0,0 @@ -Added NodeInfo 2.1 specification diff --git a/changes/changelog.d/opensubsonic.feature b/changes/changelog.d/opensubsonic.feature new file mode 100644 index 000000000..8d28a02cb --- /dev/null +++ b/changes/changelog.d/opensubsonic.feature @@ -0,0 +1 @@ +Extend Subsonic API with OpenSubsonic support (#2270) diff --git a/changes/changelog.d/plugins-boolean-field.enhancement b/changes/changelog.d/plugins-boolean-field.enhancement deleted file mode 100644 index c12def20c..000000000 --- a/changes/changelog.d/plugins-boolean-field.enhancement +++ /dev/null @@ -1 +0,0 @@ -Support boolean config fields in plugins diff --git a/changes/changelog.d/publish-release-in-ci.enhancement b/changes/changelog.d/publish-release-in-ci.enhancement new file mode 100644 index 000000000..013665e89 --- /dev/null +++ b/changes/changelog.d/publish-release-in-ci.enhancement @@ -0,0 +1 @@ +Publish releases from CI job diff --git a/changes/changelog.d/python312.feature b/changes/changelog.d/python312.feature new file mode 100644 index 000000000..045006abd --- /dev/null +++ b/changes/changelog.d/python312.feature @@ -0,0 +1 @@ +Add support for Python 3.12 diff --git a/changes/changelog.d/subsonic-artistinfo2.feature b/changes/changelog.d/subsonic-artistinfo2.feature new file mode 100644 index 000000000..e01f822f0 --- /dev/null +++ b/changes/changelog.d/subsonic-artistinfo2.feature @@ -0,0 +1 @@ +Implement Subsonic getArtistInfo2 response diff --git a/changes/changelog.d/subsonic-funkwhale-version.deprecation b/changes/changelog.d/subsonic-funkwhale-version.deprecation new file mode 100644 index 000000000..483c30d39 --- /dev/null +++ b/changes/changelog.d/subsonic-funkwhale-version.deprecation @@ -0,0 +1,3 @@ +The "funkwhaleVersion" field in Subsonic responses is deprecated. Clients +should use the OpenSubsonic field "serverVersion" instead. +The "funkwhaleVersion" field will get removed in Funkwhale 1.7.0. diff --git a/changes/changelog.d/tauri.feature b/changes/changelog.d/tauri.feature new file mode 100644 index 000000000..c8cd45ce4 --- /dev/null +++ b/changes/changelog.d/tauri.feature @@ -0,0 +1 @@ +Build desktop app with Tauri diff --git a/changes/changelog.d/ujson.bugfix b/changes/changelog.d/ujson.bugfix deleted file mode 100644 index 0952ae5cf..000000000 --- a/changes/changelog.d/ujson.bugfix +++ /dev/null @@ -1 +0,0 @@ -Make sure build requirements for ujson are met diff --git a/changes/changelog.d/upload-process.doc b/changes/changelog.d/upload-process.doc new file mode 100644 index 000000000..a623e6ec7 --- /dev/null +++ b/changes/changelog.d/upload-process.doc @@ -0,0 +1 @@ +Added new upload process spec diff --git a/changes/changelog.d/user-deletion.doc b/changes/changelog.d/user-deletion.doc new file mode 100644 index 000000000..e4ebbc56c --- /dev/null +++ b/changes/changelog.d/user-deletion.doc @@ -0,0 +1 @@ +Added user deletion spec diff --git a/changes/changelog.d/v2-overview.doc b/changes/changelog.d/v2-overview.doc new file mode 100644 index 000000000..f60538f14 --- /dev/null +++ b/changes/changelog.d/v2-overview.doc @@ -0,0 +1 @@ +Add API v2 overview. diff --git a/deploy/apache.conf b/deploy/apache.conf index 0c072059e..a95e6a55d 100644 --- a/deploy/apache.conf +++ b/deploy/apache.conf @@ -94,6 +94,11 @@ Define MEDIA_DIRECTORY_PATH ${FUNKWHALE_ROOT_PATH}/data/media </Location> Alias /front ${FUNKWHALE_ROOT_PATH}/front/dist + <Location "/assets"> + ProxyPass "!" + </Location> + Alias /assets ${FUNKWHALE_ROOT_PATH}/front/dist/assets + <Location "/media"> ProxyPass "!" </Location> diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index fe32450ad..b947a6dbc 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -98,8 +98,6 @@ services: env_file: - .env image: typesense/typesense:0.24.0 - networks: - - internal volumes: - ./typesense/data:/data command: --data-dir /data --enable-cors diff --git a/deploy/docker.proxy.template b/deploy/docker.proxy.template index a4b297f20..ff9d5e4fe 100644 --- a/deploy/docker.proxy.template +++ b/deploy/docker.proxy.template @@ -1,7 +1,8 @@ upstream fw { - # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } + +# Required for websocket support. map $http_upgrade $connection_upgrade { default upgrade; '' close; @@ -10,15 +11,31 @@ map $http_upgrade $connection_upgrade { server { listen 80; listen [::]:80; + # update this to match your instance name server_name ${FUNKWHALE_HOSTNAME}; - location / { return 301 https://$host$request_uri; } + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } } + server { listen 443 ssl http2; listen [::]:443 ssl http2; + server_name ${FUNKWHALE_HOSTNAME}; # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; @@ -29,12 +46,10 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - # Security related headers - # If you are using S3 to host your files, remember to add your S3 URL to the - # media-src and img-src headers (e.g. img-src 'self' https://<your-S3-URL> data:) - - add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + # General configs + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -42,7 +57,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -61,10 +75,11 @@ server { text/vtt text/x-component text/x-cross-domain-policy; + # end of compression settings location / { include /etc/nginx/funkwhale_proxy.conf; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - proxy_pass http://fw; + proxy_pass http://fw; } + } diff --git a/deploy/env.prod.sample b/deploy/env.prod.sample index 0ff7a5be1..1ea36c651 100644 --- a/deploy/env.prod.sample +++ b/deploy/env.prod.sample @@ -99,7 +99,7 @@ REVERSE_PROXY_TYPE=nginx # # If you want to use Redis over unix sockets, you'll actually need two variables: # For the cache part: -# CACHE_URL=redis:///run/redis/redis.sock?db=0 +# CACHE_URL=unix:///run/redis/redis.sock?db=0 # For the Celery/asynchronous tasks part: # CELERY_BROKER_URL=redis+socket:///run/redis/redis.sock?virtual_host=0 diff --git a/deploy/nginx.template b/deploy/nginx.template index 5ba2ccfa1..d306f8af4 100644 --- a/deploy/nginx.template +++ b/deploy/nginx.template @@ -1,10 +1,15 @@ -# This file was generated from Funkwhale's nginx.template upstream funkwhale-api { # depending on your setup, you may want to update this server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; } +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + server { listen 80; listen [::]:80; @@ -21,16 +26,10 @@ server { } } -# Required for websocket support. -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - server { listen 443 ssl http2; listen [::]:443 ssl http2; - charset utf-8; + server_name ${FUNKWHALE_HOSTNAME}; # TLS @@ -49,12 +48,11 @@ server { # HSTS add_header Strict-Transport-Security "max-age=31536000"; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; + # General configs root ${FUNKWHALE_FRONTEND_PATH}; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -62,7 +60,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -83,6 +80,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -90,17 +93,39 @@ server { proxy_pass http://funkwhale-api; } - location / { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; alias ${FUNKWHALE_FRONTEND_PATH}/; + try_files $uri $uri/ /index.html; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + alias ${FUNKWHALE_FRONTEND_PATH}/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; expires 1d; } @@ -158,7 +183,7 @@ server { # has been checked on API side. # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. internal; - alias ${MUSIC_DIRECTORY_SERVE_PATH}/; + alias ${MUSIC_DIRECTORY_PATH}/; add_header Access-Control-Allow-Origin '*'; } @@ -166,4 +191,8 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } } diff --git a/dev.yml b/dev.yml index 95323af8c..9ba73c6d2 100644 --- a/dev.yml +++ b/dev.yml @@ -123,9 +123,9 @@ services: - "${NGINX_PORTS_MAPPING-8000:80}" environment: - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" - - "FUNKWHALE_API_IP=${FUNKHALE_API_IP-api}" + - "FUNKWHALE_API_HOST=${FUNKWHALE_API_HOST-api}" - "FUNKWHALE_API_PORT=${FUNKWHALE_API_PORT-5000}" - - "FUNKWHALE_FRONT_IP=${FUNKHALE_FRONT_IP-front}" + - "FUNKWHALE_FRONT_IP=${FUNKWHALE_FRONT_IP-front}" - "FUNKWHALE_FRONT_PORT=${VUE_PORT-8080}" - "COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME- }" - "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-localhost}" @@ -152,15 +152,6 @@ services: traefik.frontend.passHostHeader: true traefik.docker.network: federation - docs: - build: docs - command: python3 serve.py - volumes: - - ".:/app/" - ports: - - "35730:35730" - - "8001:8001" - api-docs: image: swaggerapi/swagger-ui:v3.37.2 environment: diff --git a/docker/nginx/conf.dev b/docker/nginx/conf.dev index ae3cd3fce..34bca7872 100644 --- a/docker/nginx/conf.dev +++ b/docker/nginx/conf.dev @@ -1,6 +1,8 @@ upstream funkwhale-api { - server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; } + upstream funkwhale-front { server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; } @@ -11,17 +13,17 @@ map $http_upgrade $connection_upgrade { '' close; } + server { listen 80; listen [::]:80; - charset utf-8; - client_max_body_size ${NGINX_MAX_BODY_SIZE}; - include /etc/nginx/funkwhale_proxy.conf; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; + server_name _; + + # General configs + root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -29,7 +31,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -50,6 +51,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -57,16 +64,37 @@ server { proxy_pass http://funkwhale-api; } - location / { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; proxy_pass http://funkwhale-front; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-front; } location = /embed.html { + proxy_pass http://funkwhale-front; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - proxy_pass http://funkwhale-front; expires 1d; } @@ -88,13 +116,13 @@ server { # Allow direct access to only specific subdirectories in /media location /media/__sized__/ { - alias /protected/media/__sized__/; + alias ${MEDIA_ROOT}/__sized__/; add_header Access-Control-Allow-Origin '*'; } # Allow direct access to only specific subdirectories in /media location /media/attachments/ { - alias /protected/media/attachments/; + alias ${MEDIA_ROOT}/attachments/; add_header Access-Control-Allow-Origin '*'; } @@ -111,10 +139,10 @@ server { # if you're storing media files in a S3 bucket. location ~ /_protected/media/(.+) { internal; - alias /protected/media/$1; # NON-S3 + alias ${MEDIA_ROOT}/$1; # NON-S3 # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. -# proxy_set_header Authorization ""; # S3 -# proxy_pass $1; # S3 +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 add_header Access-Control-Allow-Origin '*'; } @@ -124,7 +152,7 @@ server { # has been checked on API side. # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. internal; - alias /music/; + alias ${MUSIC_DIRECTORY_PATH}/; add_header Access-Control-Allow-Origin '*'; } @@ -134,7 +162,6 @@ server { } location /staticfiles/ { - alias /staticfiles/; + alias /usr/share/nginx/html/staticfiles/; } - } diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index 370e0b7aa..000000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM python:3.11 - -RUN apt-get update && apt-get install -y graphviz -RUN pip install sphinx livereload sphinx_rtd_theme django-environ django myst-parser sphinx-design sphinx-multiversion sphinxcontrib-mermaid sphinx-copybutton -WORKDIR /app/docs diff --git a/docs/Makefile b/docs/Makefile index 083dae580..13e013261 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,20 +1,85 @@ -# Minimal makefile for Sphinx documentation -# +SHELL = bash +UNAME := $(shell uname) +ifeq ($(UNAME), Linux) +CPU_CORES = $(shell N=$$(nproc); echo $$(( $$N > 4 ? 4 : $$N ))) +else +CPU_CORES = $(shell N=$$(sysctl -n hw.physicalcpu); echo $$(( $$N > 4 ? 4 : $$N ))) +endif -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python3 -msphinx -SPHINXPROJ = funkwhale -SOURCEDIR = . -BUILDDIR = _build +# Install +VENV = .venv +export POETRY_VIRTUALENVS_IN_PROJECT=true -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +$(VENV): + $(MAKE) install -.PHONY: help Makefile +install: + poetry install --no-root + poetry run pip install --no-deps --editable ../api -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +clean: + git clean -xdf . + +# Sphinx +SPHINX_OPTS = -j $(CPU_CORES) +SOURCE_DIR = . +BUILD_DIR = _build + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +# Dev +dev: $(VENV) + poetry run sphinx-autobuild . /tmp/_build/ --port 8001 + +# I18n +LOCALES = en_GB en_US fr + +locale-generate: $(VENV) + poetry run sphinx-build -b gettext $(SOURCE_DIR) locales/gettext $(SPHINX_OPTS) + +locale-update: $(VENV) + poetry run sphinx-intl update -p locales/gettext $(foreach locale,$(LOCALES),-l $(locale)) + +locale-prune-untranslated: $(VENV) + poetry run _scripts/locale-prune-untranslated.py + +# Swagger +SWAGGER_VERSION = 5.1.2 +SWAGGER_RELEASE_URL = https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$(SWAGGER_VERSION).tar.gz +SWAGGER_BUILD_DIR = swagger + +swagger: + mkdir "$(SWAGGER_BUILD_DIR)" + curl -sSL "$(SWAGGER_RELEASE_URL)" | \ + tar --extract \ + --gzip \ + --directory="$(SWAGGER_BUILD_DIR)" \ + --strip-components=2 \ + "swagger-ui-$(SWAGGER_VERSION)/dist" + + sed -i \ + "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" \ + "$(SWAGGER_BUILD_DIR)/swagger-initializer.js" + + cp schema.yml "$(SWAGGER_BUILD_DIR)/schema.yml" + +# Releases +$(BUILD_DIR)/releases.json: $(BUILD_DIR) + ../scripts/releases.py > "$@" + +$(BUILD_DIR)/latest.txt: $(BUILD_DIR) + ../scripts/releases.py -r -q latest.id > "$@" + +releases: $(BUILD_DIR)/releases.json $(BUILD_DIR)/latest.txt + +# Build +build: $(VENV) + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR) $(SPHINX_OPTS) + +build-translated: $(VENV) locale-prune-untranslated + for locale in $(LOCALES); do \ + poetry run sphinx-build $(SOURCE_DIR) $(BUILD_DIR)/$$locale $(SPHINX_OPTS) -D language=$$locale; \ + done + +build-all: build build-translated releases swagger diff --git a/docs/_scripts/locale-prune-untranslated.py b/docs/_scripts/locale-prune-untranslated.py new file mode 100755 index 000000000..57b4d8c48 --- /dev/null +++ b/docs/_scripts/locale-prune-untranslated.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import os +from subprocess import check_output + + +def main() -> int: + output = check_output(["poetry", "run", "sphinx-intl", "stat"], text=True) + for line in output.splitlines(): + path, _, comment = line.partition(":") + if "0 untranslated." in comment: + print(f"removing untranslated po file: {path}") + os.unlink(path) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/administrator/configuration/instance-settings.md b/docs/administrator/configuration/instance-settings.md index 51ef4dbda..085be5a04 100644 --- a/docs/administrator/configuration/instance-settings.md +++ b/docs/administrator/configuration/instance-settings.md @@ -111,6 +111,9 @@ Transcoding enabled Transcoding cache duration The number of minutes you want to store transcoded files on your server. Funkwhale removes transcoded tracks that haven't been downloaded within this duration to save space. +Only allow MusicBrainz tagged files + If enabled, only files tagged with a [MusicBrainz ID](https://musicbrainz.org/doc/MusicBrainz_Identifier) can be uploaded to the server. Users can use [MusicBrainz Picard](https://picard.musicbrainz.org/) to tag their content with a MBID. Enabling this setting **does not** remove files uploaded before the setting was enabled. + ``` ### Channels diff --git a/docs/administrator/manage-script/mbid_prune.md b/docs/administrator/manage-script/mbid_prune.md new file mode 100644 index 000000000..2d5c963af --- /dev/null +++ b/docs/administrator/manage-script/mbid_prune.md @@ -0,0 +1,40 @@ +# Delete funkwhale objects that don't have a Musicbrainz id + +If you enable the option to [only allow MusicBrainz content](../configuration/instance-settings.md) on your pod after you've uploaded content,you can to use this command to prune content that doesn't have a MusicBrainz ID to make your database more consistent. + +```{warning} +This action **does not** send a notification to your users before content is removed. You may want to warm them before. +``` + +```{warning} +Running `prune_non_mbid_content` with the `--no-dry-run` flag is irreversible. Make sure you [back up your data](../upgrade/backup.md). +``` + +::::{tab-set} + +:::{tab-item} Debian +:sync: debian + +```{code-block} sh +venv/bin/funkwhale-manage prune_non_mbid_content +``` + +::: + +:::{tab-item} Docker +:sync: docker + +```{code-block} sh +sudo docker compose run --rm api funkwhale-manage prune_non_mbid_content +``` + +::: +:::: + +```{note} +The command excludes tracks that are in users' favorites, playlists, and listen history. To include these tracks, add the corresponding flags: + +- `--include-favorites-content` +- `--include-listened-content` +- `--include-playlist-content` +``` diff --git a/docs/administrator/migration.md b/docs/administrator/migration.md index bed397286..b15d11b9a 100644 --- a/docs/administrator/migration.md +++ b/docs/administrator/migration.md @@ -126,6 +126,6 @@ Check the file and remove any duplicated settings after copying. Once you have imported your database and run migrations, you can start all containers. -```{code-block} sh -sudo docker compose up -d +```console +# docker compose up -d ``` diff --git a/docs/administrator/upgrade/backup.md b/docs/administrator/upgrade/backup.md index 6ef6eb0a7..bd5d72fbe 100644 --- a/docs/administrator/upgrade/backup.md +++ b/docs/administrator/upgrade/backup.md @@ -9,8 +9,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + ```console + $ sudo -u postgres -H pg_dumpall -c funkwhale > /path/to/your/backup/dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -18,8 +18,16 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - sudo docker compose exec postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql + 1. Stop the running containers: + + ```console + $ sudo docker compose down + ``` + + 2. Dump the database to a backup file: + + ```console + $ sudo docker compose run --rm postgres pg_dump -U postgres postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql ``` ::: @@ -32,9 +40,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -42,10 +50,9 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - - rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media - rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music + ```console + $ rsync -avzhP /srv/funkwhale/data/media /path/to/your/backup/media + $ rsync -avzhP /srv/funkwhale/data/music /path/to/your/backup/music ``` ::: @@ -58,8 +65,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Debian :sync: debian - ```{code-block} sh - rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/config/.env /path/to/your/backup/.env ``` ::: @@ -67,8 +74,8 @@ Before performing big changes, we recommend you back up your database and media :::{tab-item} Docker :sync: docker - ```{code-block} sh - rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env + ```console + $ rsync -avzhP /srv/funkwhale/.env /path/to/your/backup/.env ``` ::: @@ -84,16 +91,16 @@ To restart your files, do the following: 1. Rename your current file directories. - ```{code-block} sh - mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak - mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak + ```console + $ mv /srv/funkwhale/data/media /srv/funkwhale/data/media.bak + $ mv /srv/funkwhale/data/music /srv/funkwhale/data/music.bak ``` 2. Restore your backed-up files to the original directories. - ```{code-block} sh - mv /patht/to/your/backup/media /srv/funkwhale/data/media - mv /path/to/your/backup/music /srv/funkwhale/data/music + ```console + $ mv /path/to/your/backup/media /srv/funkwhale/data/media + $ mv /path/to/your/backup/music /srv/funkwhale/data/music ``` ### Restore the database @@ -107,15 +114,15 @@ To restore your database, do the following: 1. Restore your database backup: - ```{code-block} sh - sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale + ```console + $ sudo -u postgres psql -f /path/to/your/backup/dump.sql funkwhale ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - cd /srv/funkwhale - venv/bin/funkwhale-manage migrate + ```console + $ cd /srv/funkwhale + $ venv/bin/funkwhale-manage migrate ``` ::: @@ -125,14 +132,20 @@ To restore your database, do the following: 1. Restore your database backup. - ```{code-block} sh - sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" + ```console + $ sudo docker compose run --rm -T postgres psql -U postgres postgres < "/path/to/your/backup/dump.sql" ``` 2. Run the `funkwhale-manage migrate` command to set up the database. - ```{code-block} sh - sudo docker compose run --rm api funkwhale-manage migrate + ```console + $ sudo docker compose run --rm api funkwhale-manage migrate + ``` + +3. Restart the services. + + ```console + $ sudo docker compose up -d ``` ::: diff --git a/docs/administrator/upgrade/docker.md b/docs/administrator/upgrade/docker.md index 0427aee44..d9ed5698d 100644 --- a/docs/administrator/upgrade/docker.md +++ b/docs/administrator/upgrade/docker.md @@ -92,7 +92,7 @@ To update your Postgres container, follow these steps: 2. Create a backup of your Funkwhale database. We will import this into the new postgres container later. ```console - # docker compose exec -i postgres pg_dump -U postgres postgres > db_dump.sql + # docker compose run --rm postgres pg_dump -U postgres postgres > db_dump.sql ``` 3. Move the {file}`data/postgres` directory to another location to back it up @@ -136,8 +136,8 @@ To update your Postgres container, follow these steps: Once you've updated your Postgres containers, you need to migrate your database. To do this: :::{include} /administrator/migration.md -:start-line: 112 -:end-line: 129 +:start-line: 105 +:end-line: 132 ::: :::{seealso} diff --git a/docs/build_docs.sh b/docs/build_docs.sh deleted file mode 100755 index 6aa719a76..000000000 --- a/docs/build_docs.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -set -eux - -# We clean up translations, only fully translated components are kept -IFS=$'\n' - -for i in $(poetry run sphinx-intl stat); do - echo "$i" - if [[ "$i" != *" 0 untranslated." ]]; then - file=$(echo "$i" | cut -d: -f1) - echo "delete $file" - rm "$file" - fi -done - -# Build sphinx -poetry run sphinx-build . "$BUILD_PATH" -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-build -D language="$lang" . "$BUILD_PATH/$lang" - fi -done - -# Build swagger -TARGET_PATH="$BUILD_PATH/swagger" ./build_swagger.sh -python3 ./get-releases-json.py > "$BUILD_PATH/releases.json" -python3 ./get-releases-json.py --latest > "$BUILD_PATH/latest.txt" diff --git a/docs/build_swagger.sh b/docs/build_swagger.sh deleted file mode 100755 index 175e8372a..000000000 --- a/docs/build_swagger.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -eux - -SWAGGER_VERSION="4.15.5" -TARGET_PATH=${TARGET_PATH-"swagger"} - -rm -rf "$TARGET_PATH" -tmpdir="$(mktemp -d)" -trap 'rm -rf "$tmpdir"' EXIT - -pushd "$tmpdir" -curl -sSL "https://github.com/swagger-api/swagger-ui/archive/refs/tags/v$SWAGGER_VERSION.tar.gz" -o swagger-ui.tgz -tar -xzf swagger-ui.tgz -popd -mv "$tmpdir/"*/dist "$TARGET_PATH" -cp schema.yml "$TARGET_PATH" - -sed -i "s#https://petstore.swagger.io/v2/swagger.json#schema.yml#g" "$TARGET_PATH/swagger-initializer.js" diff --git a/docs/changes/funkwhale-0-changelog.md b/docs/changes/funkwhale-0-changelog.md new file mode 100644 index 000000000..6b19b452c --- /dev/null +++ b/docs/changes/funkwhale-0-changelog.md @@ -0,0 +1,3343 @@ +# Funkwhale 0.x changelog + +## 0.21.2 (2020-07-27) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added a new ?related=obj_id filter for artists, albums and tracks, based on tags +- Can now filter subscribed content through API (#1116) +- Support ordering=random for artists, albums, tracks and channels endpoints (#1145) +- Use role=alert on forms/toast message to improve accessibility (#1134) + +Bugfixes: + +- Fix embedded player not working on channel series/album (#1175) +- Fixed broken mimetype detection during import (#1165) +- Fixed crash when loading recent albums via Subsonic (#1158) +- Fixed crash with null help text in admin (#1161) +- Fixed invalid metadata when importing multi-artists tracks/albums (#1104) +- Fixed player crash when using Funkwhale as a PWA (#1157) +- Fixed wrong convert art displaying in some situations (#1138) +- Make channel card updated times more humanly readable, add internationalization (#1089) + +Contributors to this release (development, documentation, reviews): + +- Agate +- Bheesham Persaud +- Ciarán Ainsworth + +## 0.21.1 (2020-06-11) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Features: + +- Support a --watch mode with `import_files` to automatically add, update and remove files when filesystem is updated (#721) + +Enhancements: + +- Added new channels widget on pod landing page (#1113) +- Fix HTML <title> not including instance name in some situations (#1107) +- Make URL-building logic more resilient against reverse proxy misconfiguration (#1085) +- Removed unused masonry dependency (#1112) +- Support for specifying itunes:email and itunes:name in channels for compatibility with third-party platforms (#1154) +- Updated the /api/v1/libraries endpoint to support listing public libraries from other users/pods (#1151) + +Bugfixes: + +- Added safeguard to ensure local uploads are never purged from cache (#1086) +- Ensure firefox password manager dont autofill username in search bar (#1090) +- Ensure player doesn't disappear when last queue track is removed manually (#1092) +- Ensure tracks linked to skipped upload can be pruned (#1011) +- Fix playlist modal only listing 50 first playlists (#1087) +- Fixed a wording issue on artist channel page (#1117) +- Fixed crash on python 3.5 with cli importer (#1155) +- Fixed issue when displaying starred tracks on subsonic (#1082) +- Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run `python manage.py fix_uploads --mimetype` to set proper mimetypes on existing uploads. +- Fixed page not refreshing when switching between My Library and Explore sections (#1091) +- Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147) +- Fixed wrong album and track count in admin artist API (#1096) +- Include tracks by album artist when filtering by artist on /api/v1/tracks (#1078) + +### Small API breaking change in `/api/v1/libraries` + +To allow easier crawling of public libraries on a pod,we had to make a slight breaking change +to the behaviour of `GET /api/v1/libraries`. + +Before, it returned only libraries owned by the current user. + +Now, it returns all the accessible libraries (including ones from other users and pods). + +If you are consuming the API via a third-party client and need to retrieve your libraries, +use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me` + +Contributors to this release (development, documentation, reviews, testing): + +- Agate +- Ciarán Ainsworth +- Creak +- gisforgabriel +- Siren +- Tony Wasserka + +## 0.21 "Agate" (2020-04-24) + +This 0.21 release is dedicated to Agate, to thank her, for both having created the Funkwhale project, being the current lead developer, and for her courage of coming out. Thank you Agate from all the members of the Funkwhale community <3 + +We are truly grateful as well to the dozens of people who contributed to this release with translations, development, documentation, reviews, design, testing, feedback, financial support, third-party projects and integrations… You made it possible! + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html, there are also additional operations you need to execute, listed in the changelog below (search "Manual action"). + +### Channels and podcasts + +Funkwhale 0.21 includes a brand new feature: Channels! + +Channels can be used as a replacement to public libraries, +to publish audio content, both musical and non-musical. They federate with other Funkwhale pods, but also other +fediverse software, in particular Mastodon, Pleroma, Friendica and Reel2Bits, meaning people can subscribe to your channel +from any of these software. To get started with publication, simply visit your profile and create a channel from there. + +Each Funkwhale channel also comes with RSS feed that is compatible with existing podcasting applications, like AntennaPod +on Android and, within Funkwhale, you can also subscribe to any podcast from its RSS feed! + +Many, many thanks to the numerous people who helped with the feature design, development and testing, and in particular +to the members of the working group who met every week for months in order to get this done, and the members of other third-party +projects who took the time to work with us to ensure compatibility. + +### Redesigned navigation, player and queue + +This release includes a full redesign of our navigation, player and queue. Overall, it should provide +a better, less confusing experience, especially on mobile devices. This redesign was suggested +14 months ago, and took a while, but thanks to the involvement and feedback of many people, we got it done! + +### Improved search bar for searching remote objects + +The search bar now support fetching arbitrary objects using a URL. In particular, you can use this to quickly: + +- Subscribe to a remote library via its URL +- Listen a public track from another pod +- Subscribe to a channel + +### Screening for sign-ups and custom sign-up form + +Instance admins can now configure their pod so that registrations required manual approval from a moderator. This +is especially useful on private or semi-private pods where you don't want to close registrations completely, +but don't want spam or unwanted users to join your pod. + +When this is enabled and a new user register, their request is put in a moderation queue, and moderators +are notified by email. When the request is approved or refused, the user is also notified by email. + +In addition, it's also possible to customize the sign-up form by: + +- Providing a custom help text, in markdown format +- Including additional fields in the form, for instance to ask the user why they want to join. Data collected through these fields is included in the sign-up request and viewable by the mods + +### Federated reports + +It's now possible to send a copy of a report to the server hosting the reported object, in order to make moderation easier and more distributed. + +This feature is inspired by Mastodon's current design, and should work with at least Funkwhale and Mastodon servers. + +### Improved search performance + +Our search engine went through a full rewrite to make it faster. This new engine is enabled +by default when using the search bar, or when searching for artists, albums and tracks. It leverages +PostgreSQL full-text search capabilities. + +During our tests, we observed huge performance improvements after the switch, by an order of +magnitude. This should be especially perceptible on pods with large databases, more modest hardware +or hard drives. + +We plan to remove the old engine in an upcoming release. In the meantime, if anything goes wrong, +you can switch back by setting `USE_FULL_TEXT_SEARCH=false` in your `.env` file. + +### Enforced email verification + +The brand new `ACCOUNT_EMAIL_VERIFICATION_ENFORCE` setting can be used to make email verification +mandatory for your users. It defaults to `false`, and doesn't apply to superuser accounts created through +the CLI. + +If you enable this, ensure you have a SMTP server configured too. + +### More reliable CLI importer [manual action required] + +Our CLI importer is now more reliable and less prone to Out-of-Memory issues, especially when scanning large libraries. (hundreds of GB or bigger) + +We've also improved the directory crawling logic, so that you don't have to use glob patterns or specify extensions when importing. As a result, the syntax for providing directories to the command as changed slightly. + +If you use the `import_files` command, this means you should replace scripts that look like this: + +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/**/*.ogg" "/srv/funkwhale/data/music/**/*.mp3" --recursive --noinput +``` + +By this: + +```sh +python api/manage.py import_files $LIBRARY_ID "/srv/funkwhale/data/music/" --recursive --noinput +``` + +And Funkwhale will happily import any supported audio file from the specified directory. + +### User management through the server CLI + +We now support user creation (incl. non-admin accounts), update and removal directly +from the server CLI. Typical use cases include: + +- Changing a user password from the command line +- Creating or updating users from deployments scripts or playbooks +- Removing or granting permissions or upload quota to multiple users at once +- Marking multiple users as inactive + +All user-related commands are available under the `python manage.py fw users` namespace. +Please refer to the [Admin documentation](https://docs.funkwhale.audio/admin/commands.html#user-management) for +more information and instructions. + +### Progressive web app [Manual action suggested, non-docker only] + +We've made Funkwhale's Web UI a Progressive Web Application (PWA), in order to improve the user experience +during offline use, and on mobile devices. + +In order to fully benefit from this change, if your pod isn't deployed using Docker, ensure +the following instruction is present in your nginx configuration: + +```nginx +location /front/ { + # Add the following line in the /front/ location + add_header Service-Worker-Allowed "/"; +} +``` + +### Postgres docker changed environment variable [manual action required, docker multi-container only] + +If you're running with docker and our multi-container setup, there was a breaking change starting in the 11.7 postgres image (https://github.com/docker-library/postgres/pull/658) + +You need to add this to your .env file: `POSTGRES_HOST_AUTH_METHOD=trust` + +Newer deployments aren't affected. + +### Upgrade from Postgres 10 to 11 [manual action required, docker all-in-one only] + +With our upgrade to Alpine 3.10, the `funkwhale/all-in-one` image now includes PostgreSQL 11. + +In order to update to Funkwhale 0.21, you will first need to upgrade Funkwhale's PostgreSQL database, following the steps below: + +```sh +# open a shell as the Funkwhale user +sudo -u funkwhale -H bash + +# move to the funkwhale data directory +# (replace this with your own if you used a different path) +cd /srv/funkwhale/data + +# stop the funkwhale container +docker stop funkwhale + +# backup the database files +cp -r data/ ../postgres.bak + +# Upgrade the database +docker run --rm \ + -v $(pwd)/data:/var/lib/postgresql/10/data \ + -v $(pwd)/upgraded-postgresql:/var/lib/postgresql/11/data \ + -e PGUSER=funkwhale \ + -e POSTGRES_INITDB_ARGS="-U funkwhale --locale C --encoding UTF8" \ + tianon/postgres-upgrade:10-to-11 + +# replace the Postgres 10 files with Postgres 11 files +mv data/ postgres-10 +mv upgraded-postgresql/ data +``` + +Once you have completed the Funkwhale upgrade with our regular instructions and everything works properly, +you can remove the backups/old files: + +```sh +sudo -u funkwhale -H bash +cd /srv/funkwhale/data +rm -rf ../postgres.bak +rm -rf postgres-10 +``` + +### Full list of changes + +Features: + +- Support for publishing and subscribing to podcasts (#170) +- Brand new navigation, queue and player redesign (#594) +- Can now browse a library content through the UI (#926) +- Federated reports (#1038) +- Screening for sign-ups (#1040) +- Make it possible to enforce email verification (#1039) +- Added a new radio based on another user listenings (#1060) +- User management through the server CLI + +Enhancements: + +- Added ability to reject library follows from notifications screen (#859) +- Added periodic background task and CLI command to associate genre tags to artists and albums based on identical tags found on corresponding tracks (#988) +- Added support for CELERYD_CONCURRENCY env var to control the number of worker processes (#997) +- Added the ability to sort albums by release date (#1013) +- Added two new radios to play your own content or a given library tracks +- Advertise list of known nodes on /api/v1/federation/domains and in nodeinfo if stats sharing is enabled +- Changed footer to use instance name if available, and append ellipses if instance URL/Name is too long (#1012) +- Favor local uploads when playing a track with multiple uploads (#1036) +- Include only local content in nodeinfo stats, added downloads count +- Make media and static files serving more reliable when reverse proxy `X_FORWARDED_*` headers are incorrect (#947) +- Order the playlist columns by modification date in the Browse tab (#775) +- Reduced size of funkwhale/funkwhale docker images thanks to multi-stage builds (!1042) +- Remember display settings in Album, Artist, Radio and Playlist views (#391) +- Removed unnecessary "Federation music needs approval" setting (#959) +- Replaced our slow research logic by PostgreSQL full-text search (#994) +- Support autoplay when loading embed frame from Mastodon and third-party websites (#1041) +- Support filtering playlist by name and several additional UX improvements in playlists modal (#974) +- Support modifying album cover art through the web UI (#588) +- Use a dedicated scope for throttling subsonic to avoid intrusive rate-limiting +- Use same markdown widget for all content fields (rules, description, reports, notes, etc.) +- CLI Importer is now more reliable and less resource-hungry on large libraries +- Add support custom domain for S3 storage +- Better placeholders for channels when there are no episodes or series +- Updated documentation for 0.21 release +- Improved performance and error handling when fetching remote attachments + +Bugfixes: + +- Added missing manuallyApprovesFollowers entry in JSON-LD contexts (#961) +- Fix issue with browser shortcuts such as search and focus URL not being recognised (#340, #985) +- Fixed admin dropdown not showing after login (#1042) +- Fixed an issue with celerybeat container failing to restart (#1004) +- Fixed invalid displayed number of tracks in playlist (#986) +- Fixed issue with recent results not being loaded from the API (#948) +- Fixed issue with sorting by album name not working (#960) +- Fixed short audio glitch when switching switching to another track with player paused (#970) +- Improved deduplication logic to prevent skipped files during import (#348, #474, #557, #740, #928) +- More resilient tag parsing with empty release date or album artist (#1037) +- More robust importer against malformed dates (#966) +- Removed "nodeinfo disabled" setting, as nodeinfo is required for the UI to work (#982) +- Replaced PDF icon by List icon in playlist placeholder (#943) +- Resolve an issue where disc numbers were not taken into consideration when playing an album from the album card (#1006) +- Set correct size for album covers in playlist cards (#680) +- Remove double spaces in ChannelForm +- Deduplicate tags in Audio ActivityPub representation +- Add support custom domain for S3 storage +- Fix #1079: fixed z-index issues with dropdowns (#1079 and #1075) +- Exclude external podcasts from library home +- Fixed broken channel save when description is too long +- Fixed 500 error when federation is disabled and application+json is requested +- Fixed minor subsonic API crash +- Fixed broken local profile page when allow-list is enabled +- Fixed issue with confirmation email not sending when signup-approval was enabled +- Ensure 0 quota on user is honored +- Fixed attachments URL not honoring media URL +- Fix grammar in msg string in TrackBase.vue +- Fix typo in SubscribeButton.vue + +Translations: + +- Arabic +- Catalan +- English (United Kingdom) +- German +- Hungarian +- Japanese +- Occitan +- Portuguese (Brazil) +- Russian + +Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects): + +- Agate +- annando +- Anton Strömkvist +- Audrey +- ButterflyOfFire +- Ciarán Ainsworth +- Creak +- Daniele Lira Mereb +- dashie +- Eloisa +- eorn +- Francesc Galí +- gerhardbeck +- GinnyMcQueen +- guillermau +- Haelwenn +- jinxx +- Jonathan Aylard +- Keunes +- M.G +- marzzzello +- Mathé Grievink +- Mélanie Chauvel +- Mjourdan +- Morgan Kesler +- Noe Gaumont +- Noureddine HADDAG +- Ollie +- Peter Wickenberg +- Quentin PAGÈS +- Renon +- Satsuki Yanagi +- Shlee +- SpcCw +- techknowlogick +- ThibG +- Tony Wasserka +- unklebonehead +- wakest +- wxcafé +- Xaloc +- Xosé M + +## 0.20.1 (2019-10-28) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +### Denormalized audio permission logic in a separate table to enhance performance + +With this release, we're introducing a performance enhancement that should reduce the load on the database and API +servers (cf https://dev.funkwhale.audio/funkwhale/funkwhale/merge_requests/939). + +Under the hood, we now maintain a separate table to link users to the tracks they are allowed to see. This change is **disabled** +by default, but should be enabled by default starting in Funkwhale 0.21. + +If you want to try it now, add +`MUSIC_USE_DENORMALIZATION=True` to your `.env` file, restart Funkwhale, and run the following command: + +```sh +python manage.py rebuild_music_permissions +``` + +This shouldn't cause any regression, but we'd appreciate if you could test this before the 0.21 release and report any unusual +behaviour regarding tracks, albums and artists visibility. + +Enhancements: + +- Added a retry option for failed uploads (#942) +- Added feedback via loading spinner when searching a remote library +- Denormalized audio permission logic in a separate table to enhance performance +- Placeholders will now be shown if no content is available across the application (#750) +- Reduce the number of simultaneous DB connections under some deployment scenario +- Support byYear filtering in Subsonic API (#936) + +Bugfixes: + +- Ensure password input doesn't overflow outside of container (#933) +- Fix audio serving issues under S3/nginx when signatures are enabled +- Fix import crash when importing M4A file with no embedded cover (#946) +- Fix tag exclusion in custom radios (#950) +- Fixed an issue with embed player CSS being purged during build (#935) +- Fixed escaped pod name displayed on home/about page (#945) +- Fixed pagination in subsonic getSongsByGenre endpoint (#954) +- Fixed style glitches in dropdowns + +Documentation: + +- Documented how to create DB extension by hand in case of permission error during migrations (#934) + +Contributors to this release (translation, development, documentation, reviews, design): + +- Ciarán Ainsworth +- Dag Stenstad +- Daniele Lira Mereb +- Agate +- Esteban +- Johannes H. +- knuxify +- Mateus Mattei Garcia +- Quentin PAGÈS + +## 0.20 (2019-10-04) + +Upgrade instructions are available at https://docs.funkwhale.audio/admin/upgrading.html + +### Support for genres via tags + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +One of our most requested missing features is now available! + +Starting with Funkwhale 0.20, +Funkwhale will automatically extract genre information from uploaded files and associate it +with the corresponding tracks in the form of tags (similar to Mastodon or Twitter hashtags). +Please refer to [our tagging documentation](https://docs.funkwhale.audio/users/upload.html#tagging-files) +for more information regarding the tagging process. + +Tags can also be associated with artists and albums, and updated after upload through the UI using +the edit system released in Funkwhale 0.19. Tags are also fetched when retrieving content +via federation. + +Tags are used in various places to enhance user experience: + +- Tags are listed on tracks, albums and artist profiles +- Each tag has a dedicated page were you can browse corresponding content and quickly start a radio +- The custom radio builder now supports using tags +- Subsonic apps that support genres - such as DSub or Ultrasonic - should display this information as well + +If you are a pod admin and want to extract tags from already uploaded content, you run [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/43) +and [this snippet](https://dev.funkwhale.audio/funkwhale/funkwhale/snippets/44) in a `python manage.py shell`. + +### Content and account reports + +It is now possible to report content, such as artists, tracks or libraries, as well as user accounts. Such reports are forwarded to the pod moderators, +who can review it and delete reported content, block accounts or take any other action they deem necessary. + +By default, both anonymous and authenticated users can submit these reports. This makes sure moderators can receive and handle +takedown requests and other reports for illegal content that may be sent by third-parties without an account on the pod. However, +you can disable anonymous reports completely via your pod settings. + +Federation of the reports will be supported in a future release. + +For more information about this feature, please check out our documentation: + +- [User documentation](https://docs.funkwhale.audio/moderator/reports.html) +- [Moderator documentation](https://docs.funkwhale.audio/users/reports.html) + +### Account deletion + +Users can now delete their account themselves, without involving an administrator. + +The deletion process will remove any local data and objects associated with the account, +but the username won't be able to new users to avoid impersonation. Deletion is also broadcasted +to other known servers on the federation. + +For more information about this feature, please check out our documentation: + +- [User documentation](https://docs.funkwhale.audio/users/account.html) + +### Landing and about page redesign [Manual action suggested] + +In this release, we've completely redesigned the landing and about page, by making it more useful and adapted to your pod +configuration. Among other things, the landing page will now include: + +- your pod and an excerpt from your pod's description +- your pod banner image, if any +- your contact email, if any +- the login form +- the signup form (if registrations are open on your pod) +- some basic statistics about your pod +- a widget including recently uploaded albums, if anonymous access is enabled + +The landing page will still include some information about Funkwhale, but in a less intrusive and proeminent way than before. + +Additionally, the about page now includes: + +- your pod name, description, rules and terms +- your pod banner image, if any +- your contact email, if any +- comprehensive statistics about your pod +- some info about your pod configuration, such as registration and federation status or the default upload quota for new users + +With this redesign, we've added a handful of additional pod settings: + +- Pod banner image +- Contact email +- Rules +- Terms of service + +We recommend taking a few moments to fill these accordingly to your needs, by visiting `/manage/settings`. + +### Allow-list to restrict federation to trusted domains + +The Allow-Listing feature grants pod moderators +and administrators greater control over federation +by allowing you to create a pod-wide allow-list. + +When allow-listing is enabled, your pod's users will only +be able to interact with pods included in the allow-list. +Any messages, activity, uploads, or modifications to +libraries and playlists will only be shared with pods +on the allow-list. Pods which are not included in the +allow-list will not have access to your pod's content +or messages and will not be able to send anything to +your pod. + +If you want to enable this feature on your pod, or learn more, please refer to [our documentation](https://docs.funkwhale.audio/moderator/listing.html)! + +### Periodic message to incite people to support their pod and Funkwhale + +Users will now be reminded on a regular basis that they can help Funkwhale by donating or contributing. + +If specified by the pod admin, a separate and custom message will also be displayed in a similar way to provide instructions and links to support the pod. + +Both messages will appear for the first time 15 days after signup, in the notifications tab. For each message, users can schedule a reminder for a later time, or disable the messages entirely. + +### Replaced Daphne by Gunicorn/Uvicorn [manual action required, non-docker only] + +To improve the performance, stability and reliability of Funkwhale's web processes, +we now recommend using Gunicorn and Uvicorn instead of Daphne. This combination unlock new use cases such as: + +- zero-downtime upgrades +- configurable number of web worker processes + +Based on our benchmarks, Gunicorn/Unicorn is also faster and more stable under higher workloads compared to Daphne. + +To benefit from this enhancement on existing instances, you need to add `FUNKWHALE_WEB_WORKERS=1` in your `.env` file +(use a higher number if you want to have more web worker processes). + +Then, edit your `/etc/systemd/system/funkwhale-server.service` and replace the `ExecStart=` line with +`ExecStart=/srv/funkwhale/virtualenv/bin/gunicorn config.asgi:application -w ${FUNKWHALE_WEB_WORKERS} -k uvicorn.workers.UvicornWorker -b ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}` + +Then reload the configuration change with `sudo systemctl daemon-reload` and `sudo systemctl restart funkwhale-server`. + +### Content-Security-Policy and additional security headers [manual action suggested] + +To improve the security and reduce the attack surface in case of a successful exploit, we suggest +you add the following Content-Security-Policy to your nginx configuration. + +````{note} +If you are using an S3-compatible store to serve music, you will need to specify the URL of your S3 store in the ``media-src`` and ``img-src`` headers + +```nginx +add_header Content-Security-Policy "...img-src 'self' https://<your-s3-URL> data:;...media-src https://<your-s3-URL> 'self' data:"; +``` +```` + +**On non-docker setups**, in `/etc/nginx/sites-available/funkwhale.conf`: + +```nginx +server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN"; + # … existing content here + } + + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; + } +} +``` + +Then reload nginx with `systemctl reload nginx`. + +**On docker setups**, in `/srv/funkwhalenginx/funkwhale.template`: + +```nginx +server { + + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + location /front/ { + add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN"; + # … existing content here + } + + # Also create a new location for the embeds to ensure external iframes work + # Simply copy-paste the /front/ location, but replace the following lines: + location /front/embed.html { + add_header X-Frame-Options "ALLOW"; + alias /frontend/embed.html; + } +} + +``` + +Then reload nginx with `docker-compose restart nginx`. + +### Rate limiting + +With this release, rate-limiting on the API is enabled by default, with high enough limits to ensure +regular users of the app aren't affected. Requests beyond allowed limits are answered with a 429 HTTP error. + +For anonymous requests, the limit is applied to the IP address of the client, and for authenticated requests, the limit +is applied to the corresponding user account. By default, anonymous requests get a lower limit than authenticated requests. + +You can disable the rate-limiting feature by adding `THROTTLING_ENABLED=false` to your `.env` file and restarting the +services. If you are using the Funkwhale API in your project or app and want to know more about the limits, please consult https://docs.funkwhale.audio/swagger/. + +### Broken audio streaming when using S3/Minio and DSub [manual action required] + +Some Subsonic clients, such as DSub, are sending an Authorization headers which was forwarded +to the S3 storage when streaming, causing some issues. If you are using S3 or a compatible storage +such as Minio, please add the following in your nginx `~ /_protected/media/(.+)` location: + +```nginx +# Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932 +proxy_set_header Authorization ""; +``` + +And reload your nginx process. + +### Detail + +Features: + +- Added periodical message to incite people to support their pod and Funkwhale (#839) +- Admins can now add custom CSS from their pod settings (#879) +- Allow-list to restrict federation to trusted domains (#853) +- Content and account reports (#890) +- Dark theme (#756) +- Enforce a configurable rate limit on the API to mitigate abuse (#261) +- Redesign of the landing and about pages (#872) +- Support for genres, via tags (#432) +- Users can now delete their account without admin intervention (#852) + +Enhancements: + +- Added a info message on embed wizard when anonymous access to content is disabled (#878) +- Added Catalan translation files +- Added Czech translation (#844) +- Added field to manage user upload quota in Django backend (#903) +- Added the option to replace the queue's current contents with a selected album or track (#761) +- Artists with no albums will now show track count on artist card (#895) +- Ensure API urls answer with and without a trailing slash (#877) +- Hardcoded list of supported browsers to avoid unexpected regressions (#854) +- Hardened security thanks to CSP and additional HTTP headers (#880) +- Improve display of search results by including artist and album data +- Increase the security of JWT token generation by using DJANGO_SECRET_KEY as well as user-specific salt for the signature +- Mods can now change a library visibility through the admin UI (#548) +- New keyboard shortcuts added for enhanced control over audio player (#866) +- Now refetch remote ActivityPub artists, albums and tracks to avoid local stale data +- Numbers on the stats page will now be formatted in a human readable way and will update with the locale (#873) +- Pickup folder.png and folder.jpg files for cover art when importing from CLI (#898) +- Prevent usage of too weak passwords (#883) +- Reduced CSS size by 30% using purgecss +- Replaced Daphne by Gunicorn/Uvicorn to improve stability, flexibility and performance (#862) +- Simplified embedded docker reverse proxy IP configuration (#834) +- Support embeds on public playlists +- Support for M4A/AAC files (#661) +- Switched from Semantic-UI to Fomentic-UI +- Add dropdown menu to track table (#531) +- Display placeholder on homepage when there are no playlists (#892) +- Make album cards height independent (#710) + +Bugfixes: + +- Added context strings to en_GB translations so that picking the language changes the interface as expected +- Ensure selected locale is not reset to browser default when refreshing app +- Fix missing license information on track details page (#913) +- Fix regression to quota bar color (#897) +- Fixed a responsive display issues on 1024px wide screens (#904) +- Fixed album art not being retrieved from Ogg/Opus files +- Fixed broken embedded player layout after dependency update (#875) +- Fixed broken external HTTPS request under some scenarios, because of missing PyOpenSSL +- Fixed broken less listened radio (#912) +- Fixed broken URL to artist and album on album and track pages (#871) +- Fixed empty contentType causing client crash in some Subsonic payloads (#893) +- Fixed import crashing with empty cover file or too long values on some fields +- Fixed in-place imported files not playing under nginx when filename contains ? or % (#924) +- Fixed remaining transcoding issue with Subsonic API (#867) +- Fixed search usability issue when browsing artists, albums, radios and playlists (#902) +- Improved performance of /artists, /albums and /tracks API endpoints by a factor 2 (#865) +- Updated docs to ensure streaming works when using Minio/S3 and DSub (#932) + +Contributors to this release (translation, development, documentation, reviews, design): + +- Amaranthe +- ButterflyOfFire +- Ciarán Ainsworth +- Agate +- Esteban +- Francesc Galí +- Freyja Wildes +- hellekin +- IISergII +- jiri-novacek +- Johannes H. +- Keunes +- Koen +- Manuel Cortez +- Mehdi +- Mélanie Chauvel +- nouts +- Quentí +- Reg +- Rodrigo Leite +- Romain Failliot +- SpcCw +- Sylke Vicious +- Tobias Reisinger +- Xaloc +- Xosé M + +## 0.19.1 (2019-06-28) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- The currently playing track is now highlighted with an orange play icon (#832) +- Support for importing files with no album tag (#122) +- Redirect from / to /library when user is logged in (#864) +- Added a SUBSONIC_DEFAULT_TRANSCODING_FORMAT env var to support clients that don't provide the format parameter (#867) +- Added button to search for objects on Discogs (#368) +- Added copy-to-clipboard button with Subsonic password input (#814) +- Added opus to the list of supported mimetypes and extensions (#868) +- Aligned search headers with search results in the sidebar (#708) +- Clicking on the currently selected playlist in the Playlist popup will now close the popup (#807) +- Favorites radio will not be visible if the user does not have any favorites (#419) + +Bugfixes: + +- Ensure empty but optional fields in file metadata don't error during import (#850) +- Fix broken upload for specific files when using S3 storage (#857) +- Fixed broken translation on home and track detail page (#833) +- Fixed broken user admin for users with non-digit or letters in their username (#869) +- Fixed invalid file extension for transcoded tracks (#848) +- Fixed issue with French translation for "Start radio" (#849) +- Fixed issue with player changing height when hovering over the volume slider (#838) +- Fixed secondary menus truncated on narrow screens (#855) +- Fixed wrong og:image url when using S3 storage (#851) +- Hide pod statistics on about page if those are disabled (#835) +- Use ASCII filename before upload to S3 to avoid playback issues (#847) + +Contributors to this release (committers and reviewers): + +- Ciarán Ainsworth +- Creak +- ealgase +- Agate +- Esteban +- Freyja Wildes +- hellekin +- Johannes H. +- Mehdi +- Reg + +## 0.19.0 (2019-05-16) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +### Edits on tracks, albums and artists + +Funkwhale was a bit annoying when it camed to metadata. Tracks, albums and artists profiles +were created from audio file tags, but basically immutable after that (unless you had +admin access to Django's UI, which wasn't ideal to do this kind of changes). + +With this release, everyone can suggest changes on track, album and artist pages. Users +with the "library" permission can review suggested edits in a dedicated interface +and apply/reject them. + +Approved edits are broadcasted via federation, to ensure other instances get the information +too. + +Not all fields are currently modifiable using this feature. Especially, it's not possible +to suggest a new album cover, or reassign a track to a different album or artist. Those will +be implemented in a future release. + +### Admin UI for tracks, albums, artists, libraries and uploads + +As part of our ongoing effort to make Funkwhale easier to manage for instance owners, +this release includes a brand new administration interface to deal with: + +- tracks +- albums +- artists +- libraries +- uploads + +You can use this UI to quickly search for any object, delete objects in batch, understand +where they are coming from etc. This new UI should remove the need to go through Django's +admin in the vast majority of cases (but also includes a link to Django's admin when needed). + +### Artist hiding in the interface + +It's now possible for users to hide artists they don't want to see. + +Content linked to hidden artists will not show up in the interface anymore. Especially: + +- Hidden artists tracks are removed from the current queue +- Starting a playlist will skip tracks from hidden artists +- Recently favorited, recently listened and recently added widgets on the homepage won't include content from hidden artists +- Radio suggestions will exclude tracks from hidden artists +- Hidden artists won't appear in Subsonic apps + +Results linked to hidden artists will continue to show up in search results and their profile page remains accessible. + +### OAuth2 authorization for better integration with third-party apps + +Funkwhale now support the OAuth2 authorization and authentication protocol which will allow +third-party apps to interact with Funkwhale on behalf of users. + +This feature makes it possible to build third-party apps that have the same capabilities +as Funkwhale's Web UI. The only exception at the moment is for actions that requires +special permissions, such as modifying instance settings or moderation (but this will be +enabled in a future release). + +If you want to start building an app on top of Funkwhale's API, please check-out +https://docs.funkwhale.audio/api.html and https://docs.funkwhale.audio/developers/authentication.html. + +### Better error handling and display during import + +Funkwhale should now be more resilient to missing tags in imported files, and give +you more insights when something goes wrong, including the specific tags that were missing +or invalid, and additional debug information to share in your support requests. + +This information is available in all pages that list uploads, when clicking on the button next to the upload status. + +### Support for S3-compatible storages to store media files + +Storing all media files on the Funkwhale server itself may not be possible or desirable +in all scenarios. You can now configure Funkwhale to store those files in a S3 +bucket instead. + +Check-out https://docs.funkwhale.audio/admin/external-storages.html if you want to use +this feature. + +### Prune library command + +Users are often surprised by Funkwhale's tendency to keep track, album and artist +metadata even if no associated files exist. + +To help with that, we now offer a `prune_library` management command you can run +to purge your database from obsolete entries. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#pruning-library). + +### Check in-place files command + +When using in-place import with a living audio library, you'll quite often rename or +remove files from the file system. Unfortunately, Funkwhale keeps a reference to those +files in the database, which results in unplayable tracks. + +To help with that, we now offer a `check_inplace_files` management command you can run +to purge your database from obsolete files. [Please refer to our documentation for usage instructions](https://docs.funkwhale.audio/admin/commands.html#remove-obsolete-files-from-database). + +Features: + +- Added albums view. Similar to artists view, it's viewable by clicking on the "Albums" link on the top bar. (#356) +- Allow artists hiding (#701) +- Change the document title to display current track information. (#359) +- Display a confirmation dialog when adding duplicate songs to a playlist (#784) +- Improved error handling and display during import (#252, #718, #583, #501, #544) +- Support embedding full artist discographies (#747) +- Support metadata update on tracks, albums and artists and broadcast those on the federation (#689) +- Support OAuth2 authorization for better integration with third-party apps (#752) +- Support S3-compatible storages for media files (#565) + +Enhancements: + +- [Experimental] Added a new "Similar" radio based on users history (suggested by @gordon) +- Added a "load more" button on artist pages to load more tracks/albums (#719) +- Added a `check_inplace_files` management command to remove purge the database from references to in-place imported files that don't exist on disk anymore (#781) +- Added a prune_library management command to remove obsolete metadata from the database (#777) +- Added admin options to disable login for users, ensure related content is deleted when deleting a user account (#809) +- Added standardized translation context for all strings in the frontend to give accurate hints to translators. +- Added twitter:\* meta tags to detect tracks and albums players automatically on more sites (#578) + Improved responsiveness of embedded player +- Advertise the list of supported upload extensions in the Nodeinfo endpoint (#808) +- Better handling of follow/accept messages to avoid and recover from desync between instances (#830) +- Better workflow for connecting to another instance (#715) + + Changing the instance used is now better integrated in the App, and it is checked that the chosen instance and the suggested instances are valid and running Funkwhale servers. + +- Bumped dependencies to latest versions (#815) +- Descriptions will now be shown underneath user libraries (#768) +- Don't store unhandled ActivityPub messages in database (#776) +- Enhanced the design of the embed wizard. (!619) +- Ensure the footer always stays at the bottom of the page +- Expose an instance-level actor (service@domain) in nodeinfo endpoint (#689) +- Improved readability of logo (#385) +- Keep persistent connections to the database instead of recreating a new one for each request +- Labels for privacy levels are now consistently grabbed from a common source instead of being hardcoded every time they are needed. +- Merged artist/album buttons with title text on artist and album pages (#725) +- Now honor maxBitrate parameter in Subsonic API (#802) +- Preload next track in queue (#572) +- Reduced app size for regular users by moving admin-related code in a dedicated chunk (#805) +- Removed broken/instable lyrics feature (#799) +- Show remaining storage space during import and prevent file upload if not enough space is remaining (#550) +- The buttons displaying an icon now always show a little divider between the icon and the text. (!620) +- Use attributedTo instead of actor in library ActivityPub payload (#619) +- Use network/depends_on instead of links in docker-compose.yml (!716) + +Bugfixes: + +- Add missing command from contributing file (#754) +- Add required envvar for dev environment (!668) +- Added env variable to set AWS region and signature version to serve media without proxy (#826) +- Allow users with dots in their usernames to request a subsonic password (#798) +- Better handling of featuring/multi-artist tracks tagged with MusicBrainz (#782) +- Do not consider tracks as duplicates during import if they have different positions (#740) +- Ensure all our ActivityPub fetches are authenticated (#758) +- Ensure correct track duration and playable status when browsing radios (#812) +- Fixed alignment/size issue with some buttons (#702) +- Fixed an encoding issue with instance name on about page (#828) +- Fixed cover not showing in queue/player when playing tracks from "albums" tab (#795) +- Fixed crashing upload processing on invalid date format (#718) +- Fixed dev command for fake data creation (!664) +- Fixed invalid OEmbed URL when using a local FUNKWHALE_SPA_HTML_ROOT (#824) +- Fixed invalid required fields in Upload django's admin (#819) +- Fixed issue with querying the albums api endpoint (#356) +- Fixed non-transparent background for volume range on Firefox (#722) +- Fixed overflowing input on account detail page (#791) +- Fixed unplayable radios for anonymous users (#563) +- Prevent skipping on file import if album_mbid is different (#772) +- Use proper site name/domain in emails (#806) +- Width of filter menus for radios has been set to stop text from overlapping the borders + +Documentation: + +- Document how to use Redis over unix sockets (#770) + +Contributors to this release (committers and translators): + +- Ale London +- Alexander +- Ben Finney +- ButterflyOfFire +- Ciarán Ainsworth +- Damien Nicolas +- Daniele Lira Mereb +- Agate +- Elza Gelez +- gerry_the_hat +- gordon +- interfect +- jake +- Jee +- jovuit +- Mélanie Chauvel +- nouts +- Pierrick +- Qasim Ali +- Quentí +- Renon +- Rodrigo Leite +- Sylke Vicious +- Thomas Brockmöller +- Tixie +- Vierkantor +- Von +- Zach Halasz + +## 0.18.3 (2019-03-21) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +### Avoid mixed content when deploying mono-container behind proxy [Manual action required] + +_You are only concerned if you use the mono-container docker deployment behind a reverse proxy_ + +Because of [an issue in our mono-container configuration](https://github.com/thetarkus/docker-funkwhale/issues/19), users deploying Funkwhale via docker +using our `funkwhale/all-in-one` image could face some mixed content warnings (and possibly other troubles) +when browsing the Web UI. + +This is fixed in this release, but on existing deployments, you'll need to add `NESTED_PROXY=1` in your container +environment (either in your `.env` file, or via your container management tool), then recreate your funkwhale container. + +Enhancements: + +- Added title on hover for truncated content (#766) +- Ask for confirmation before leaving upload page if there is a an upload in process (#630) +- Exclude in-place imported files from quota computation (#570) +- Truncate filename in library file table to ensure correct display of the table. (#735) + +Bugfixes: + +- Avoid mixed content when deploying mono-container behind HTTPS proxy (thetarkus/docker-funkwhale#19) +- Display new notifications immediately on notifications page (#729) +- Ensure cover art from uploaded files is picked up properly on existing albums (#757) +- Fixed a crash when federating a track with unspecified position +- Fixed broken Activity and Actor modules in django admin (#767) +- Fixed broken sample apache configuration (#764) +- Fixed constant and unpredictable reordering during file upload (#716) +- Fixed delivering of local activities causing unintended side effects, such as rollbacking changes (#737) +- Fixed escaping issues in translated strings (#652) +- Fixed saving moderation policy when clicking on "Cancel" (#751) +- i18n: Update page title when changing the App's language. (#511) +- Include disc number in Subsonic responses (#765) +- Do not send notification when rejecting a follow on a local library (#743) + +Documentation: + +- Added documentation on mono-container docker upgrade (#713) +- Added documentation to set up let's encrypt certificate (#745) + +## 0.18.2 (2019-02-13) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +Enhancements: + +- Added a 'fix_federation_ids' management command to deal with protocol/domain issues in federation + IDs after deployments (#706) +- Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705) + +Bugfixes: + +- Downgraded channels dependency to 2.1.6 to fix denied uploads (#697) +- Fixed cards display issues on medium/small screens (#707) +- Fixed Embed component name that could lead to issue when developing on OSX (#696) +- Fixed resizing issues for album cards on artist pages (#694) + +## 0.18.1 (2019-01-29) + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html + +### Fix Gzip compression to avoid BREACH exploit [security] [manual action required] + +In the 0.18 release, we've enabled Gzip compression by default for various +content types, including HTML and JSON. Unfortunately, enabling Gzip compression +on such content types could make BREACH-type exploits possible. + +We've removed the risky content-types from our nginx template files, to ensure new +instances are safe, however, if you already have an instance, you need +to double check that your host nginx virtualhost do not include the following +values for the `gzip_types` settings: + +``` +application/atom+xml +application/json +application/ld+json +application/activity+json +application/manifest+json +application/rss+xml +application/xhtml+xml +application/xml +``` + +For convenience, you can also replace the whole setting with the following snippet: + +``` +gzip_types +application/javascript +application/vnd.geo+json +application/vnd.ms-fontobject +application/x-font-ttf +application/x-web-app-manifest+json +font/opentype +image/bmp +image/svg+xml +image/x-icon +text/cache-manifest +text/css +text/plain +text/vcard +text/vnd.rim.location.xloc +text/vtt +text/x-component +text/x-cross-domain-policy; +``` + +Many thanks to @jibec for the report! + +### Fix Apache configuration file for 0.18 [manual action required] + +The way front is served has changed since 0.18. The Apache configuration can't serve 0.18 properly, leading to blank screens. + +If you are on an Apache setup, you will have to replace the `<Location "/api">` block with the following: + +```apache +<Location "/"> + # similar to nginx 'client_max_body_size 100M;' + LimitRequestBody 104857600 + + ProxyPass ${funkwhale-api}/ + ProxyPassReverse ${funkwhale-api}/ +</Location> +``` + +And add some more `ProxyPass` directives so that the `Alias` part of your configuration file looks this way: + +```apache + ProxyPass "/front" "!" + Alias /front /srv/funkwhale/front/dist + + ProxyPass "/media" "!" + Alias /media /srv/funkwhale/data/media + + ProxyPass "/staticfiles" "!" + Alias /staticfiles /srv/funkwhale/data/static +``` + +In case you are using custom css and theming, you also need to match this block: + +```apache2 + ProxyPass "/settings.json" "!" + Alias /settings.json /srv/funkwhale/custom/settings.json + + ProxyPass "/custom" "!" + Alias /custom /srv/funkwhale/custom +``` + +Enhancements: + +- Added name attributes on all inputs to improve UX, especially with password managers (#686) +- Disable makemigrations in production and misleading message when running migrate (#685) +- Display progress during file upload +- Hide pagination when there is only one page of results (#681) +- Include shared/public playlists in Subsonic API responses (#684) +- Use proper locale for date-related/duration strings (#670) + +Bugfixes: + +- Fix transcoding of in-place imported tracks (#688) +- Fixed celery worker defaulting to development settings instead of production +- Fixed crashing Django admin when loading track detail page (#666) +- Fixed list icon alignment on landing page (#668) +- Fixed overescaping issue in notifications and album page (#676) +- Fixed wrong number of affected elements in bulk action modal (#683) +- Fixed wrong URL in documentation for funkwhale_proxy.conf file when deploying using Docker +- Make Apache configuration file work with 0.18 changes (#667) +- Removed potential BREACH exploit because of Gzip compression (#678) +- Upgraded kombu to fix an incompatibility with redis>=3 + +Documentation: + +- Added user upload documentation at https://docs.funkwhale.audio/users/upload.html + +## 0.18 "Naomi" (2019-01-22) + +This release is dedicated to Naomi, an early contributor and beta tester of Funkwhale. +Her positivity, love and support have been incredibly helpful and helped shape the project +as you can enjoy it today. Thank you so much Naomi <3 + +Many thanks to the dozens of people that contributed to this release: translators, developers, +bug hunters, admins and backers. You made it possible! + +Upgrade instructions are available at +https://docs.funkwhale.audio/administrator/upgrade/index.html, ensure you also execute the instructions +marked with `[manual action required]` and `[manual action suggested]`. + +See `Full changelog` below for an exhaustive list of changes! + +### Audio transcoding is back! + +After removal of our first, buggy transcoding implementation, we're proud to announce +that this feature is back. It is enabled by default, and can be configured/disabled +in your instance settings! + +This feature works in the browser, with federated/non-federated tracks and using Subsonic clients. +Transcoded tracks are generated on the fly, and cached for a configurable amount of time, +to reduce the load on the server. + +### Licensing and copyright information + +Funkwhale is now able to parse copyright and license data from file and store +this information. Apart from displaying it on each track detail page, +no additional behaviour is currently implemented to use this new data, but this +will change in future releases. + +License and copyright data is also broadcasted over federation. + +License matching is done on the content of the `License` tag in the files, +with a fallback on the `Copyright` tag. + +Funkwhale will successfully extract licensing data for the following licenses: + +- Creative Commons 0 (Public Domain) +- Creative Commons 1.0 (All declinations) +- Creative Commons 2.0 (All declinations) +- Creative Commons 2.5 (All declinations and countries) +- Creative Commons 3.0 (All declinations and countries) +- Creative Commons 4.0 (All declinations) + +Support for other licenses such as Art Libre or WTFPL will be added in future releases. + +### Instance-level moderation tools + +This release includes a first set of moderation tools that will give more control +to admins about the way their instance federates with other instance and accounts on the network. +Using these tools, it's now possible to: + +- Browse known accounts and domains, and associated data (storage size, software version, etc.) +- Purge data belonging to given accounts and domains +- Block or partially restrict interactions with any account or domain + +All those features are usable using a brand new "moderation" permission, meaning +you can appoint one or multiple moderators to help with this task. + +I'd like to thank all Mastodon contributors, because some of the these tools are heavily +inspired from what's being done in Mastodon. Thank you so much! + +### Iframe widget to embed public tracks and albums [manual action required] + +Funkwhale now supports embedding a lightweight audio player on external websites +for album and tracks that are available in public libraries. Important pages, +such as artist, album and track pages also include OpenGraph tags that will +enable previews on compatible apps (like sharing a Funkwhale track link on Mastodon +or Twitter). + +To achieve that, we had to tweak the way Funkwhale front-end is served. You'll have +to modify your nginx configuration when upgrading to keep your instance working. + +**On docker setups**, edit your `/srv/funkwhale/nginx/funkwhale.template` and replace +the `location /api/` and `location /` blocks by the following snippets: + +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} + +location /front/ { + alias /frontend/; +} +``` + +The change of configuration will be picked when restarting your nginx container. + +**On non-docker setups**, edit your `/etc/nginx/sites-available/funkwhale.conf` file, +and replace the `location /api/` and `location /` blocks by the following snippets: + +```nginx +location / { + include /etc/nginx/funkwhale_proxy.conf; + # this is needed if you have file import via upload enabled + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api/; +} + +location /front/ { + alias ${FUNKWHALE_FRONTEND_PATH}/; +} +``` + +Replace `${FUNKWHALE_FRONTEND_PATH}` by the corresponding variable from your .env file, +which should be `/srv/funkwhale/front/dist` by default, then reload your nginx process with +`sudo systemctl reload nginx`. + +### Alternative docker deployment method + +Thanks to the awesome work done by @thetarkus at https://github.com/thetarkus/docker-funkwhale, +we're now able to provide an alternative and easier Docker deployment method! + +In contrast with our current, multi-container offer, this method integrates +all Funkwhale processes and services (database, redis, etc.) into a single, easier to deploy container. + +Both methods will coexist in parallel, as each one has pros and cons. You can learn more +about this exciting new deployment option by visiting https://docs.funkwhale.audio/installation/docker.html! + +### Automatically load .env file + +On non-docker deployments, earlier versions required you to source +the config/.env file before launching any Funkwhale command, with `export $(cat config/.env | grep -v ^# | xargs)` +This led to more complex and error prone deployment / setup. + +This is not the case anymore, and Funkwhale will automatically load this file if it's available. + +### Delete pre 0.17 federated tracks [manual action suggested] + +If you were using Funkwhale before the 0.17 release and federated with other instances, +it's possible that you still have some unplayable federated files in the database. + +To purge the database of those entries, you can run the following command: + +On docker setups: + +```sh +docker-compose run --rm api python manage.py script delete_pre_017_federated_uploads --no-input +``` + +On non-docker setups: + +```sh +python manage.py script delete_pre_017_federated_uploads --no-input +``` + +### Enable gzip compression [manual action suggested] + +Gzip compression will be enabled on new instances by default +and will reduce the amount of bandwidth consumed by your instance. + +If you want to benefit from gzip compression on your instance, +edit your reverse proxy virtualhost file (located at `/etc/nginx/sites-available/funkwhale.conf`) and add the following snippet +in the server block, then reload your nginx server: + +```nginx +server { + # ... + + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings +} +``` + +### Full changelog + +Features: + +- Allow embedding of albums and tracks available in public libraries via an <iframe> (#578) +- Audio transcoding is back! (#272) +- First set of instance level moderation tools (#580, !521) +- Store licensing and copyright information from file metadata, if available (#308) + +Enhancements: + +- Add UI elements for multi-disc albums (#631) +- Added alternative funkwhale/all-in-one docker image (#614) +- Broadcast library updates (name, description, visibility) over federation +- Based Docker image on alpine to have a smaller (and faster to build) image +- Improved front-end performance by stripping unused dependencies, reducing bundle size + and enabling gzip compression +- Improved accessibility by using main/section/nav tags and aria-labels in most critical places (#612) +- The progress bar in the player now display loading state / buffer loading (#586) +- Added "type: funkwhale" and "funkwhale-version" in Subsonic responses (#573) +- Documented keyboard shortcuts, list is now available by pressing "h" or in the footer (#611) +- Documented which Subsonic endpoints are implemented (#575) +- Hide invitation code field during signup when it's not required (#410) +- Importer will now pick embedded images in files with OTHER type if no COVER_FRONT is present +- Improved keyboard accessibility on player, queue and various controls (#576) +- Improved performance when listing playable tracks, albums and artists +- Increased default upload limit from 30 to 100MB (#654) +- Load env file in config/.env automatically to avoid sourcing it by hand (#626) +- More resilient date parsing during audio import, will not crash anymore on + invalid dates (#622) +- Now start radios immediately, skipping any existing tracks in queue (#585) +- Officially support connecting to a password protected redis server, with + the redis://:password@localhost:6379/0 scheme (#640) +- Performance improvement when fetching favorites, down to a single, small http request +- Removed "Activity" page, since all the data is available on the "Browse" page (#600) +- Removed the need to specify the DJANGO_ALLOWED_HOSTS variable +- Restructured the footer, added useful links and removed unused content +- Show short entries first in search results to improve UX +- Store disc number and order tracks by disc number / position) (#507) +- Strip EXIF metadata from uploaded avatars to avoid leaking private data (#374) +- Support blind key rotation in HTTP Signatures (#658) +- Support setting a server URL in settings.json (#650) +- Updated default docker postgres version from 9.4 to 11 (#656) +- Updated lots of dependencies (especially django 2.0->2.1), and removed unused dependencies (#657) +- Improved test suite speed by reducing / disabling expensive operations (#648) + +Bugfixes: + +- Fixed parsing of embedded file cover for ogg files tagged with MusicBrainz (#469) +- Upgraded core dependencies to fix websocket/messaging issues and possible memory leaks (#643) +- Fix ".None" extension when downloading Flac file (#473) +- Fixed None extension when downloading an in-place imported file (#621) +- Added a script to prune pre 0.17 federated tracks (#564) +- Advertise public libraries properly in ActivityPub representations (#553) +- Allow opus file upload (#598) +- Do not display "view on MusicBrainz" button if we miss the mbid (#422) +- Do not try to create unaccent extension if it's already present (#663) +- Ensure admin links in sidebar are displayed for users with relevant permissions, and only them (#597) +- Fix broken websocket connection under Chrome browser (#589) +- Fix play button not starting playback with empty queue (#632) +- Fixed a styling inconsistency on about page when instance description was missing (#659) +- Fixed a UI discrepancy in playlist tracks count (#647) +- Fixed greyed tracks in radio builder and detail page (#637) +- Fixed inconsistencies in subsonic error responses (#616) +- Fixed incorrect icon for "next track" in player control (#613) +- Fixed malformed search string when redirecting to LyricsWiki (#608) +- Fixed missing track count on various library cards (#581) +- Fixed skipped track when appending multiple tracks to the queue under certain conditions (#209) +- Fixed wrong album/track count on artist page (#599) +- Hide unplayable/empty playlists in "Browse playlist" pages (#424) +- Initial UI render using correct language from browser (#644) +- Invalid URI for reverse proxy websocket with apache (#617) +- Properly encode Wikipedia and lyrics search urls (#470) +- Refresh profile after user settings update to avoid cache issues (#606) +- Use role=button instead of empty links for player controls (#610) + +Documentation: + +- Deploy documentation from the master branch instead of the develop branch to avoid inconsistencies (#642) +- Document how to find and use library id when importing files in CLI (#562) +- Fix documentation typos (#645) + +## 0.17 (2018-10-07) + +### Per user libraries + +This release contains a big change in music management. This has a lot of impact +on how Funkwhale behaves, and you should have a look at +https://docs.funkwhale.audio/upgrading/0.17.html for information +about what changed and how to migrate. + +Features: + +- Per user libraries (#463, also fixes #160 and #147) +- Authentication using a LDAP directory (#194) + +Enhancements: + +- Add configuration option to set Musicbrainz hostname +- Add sign up link in the sidebar (#408) +- Added a library widget to display libraries associated with a track, album + and artist (#551) +- Ensure from_activity field is not required in django's admin (#546) +- Move setting link from profile page to the sidebar (#406) +- Simplified and less error-prone nginx setup (#358) + +Bugfixes: + +- Do not restart current song when rordering queue, deleting tracks from queue + or adding tracks to queue (#464) +- Fix broken icons in playlist editor (#515) +- Fixed a few untranslated strings (#559) +- Fixed split album when importing from federation (#346) +- Fixed toggle mute in volume bar does not restore previous volume level (#514) +- Fixed wrong env file URL and display bugs in deployment documentation (#520) +- Fixed wrong title in PlayButton (#435) +- Remove transparency on artist page button (#517) +- Set sane width default for ui cards and center play button (#530) +- Updated wrong icon and copy in play button dropdown (#436) + +Documentation: + +- Fixed wrong URLs for docker / nginx files in documentation (#537) + +Other: + +- Added a merge request template and more documentation about the changelog + +### Using a LDAP directory to authenticate to your Funkwhale instance + +Funkwhale now support LDAP as an authentication source: you can configure +your instance to delegate login to a LDAP directory, which is especially +useful when you have an existing directory and don't want to manage users +manually. + +You can use this authentication backend side by side with the classic one. + +Have a look at https://docs.funkwhale.audio/installation/ldap.html +for detailed instructions on how to set this up. + +### Simplified nginx setup [Docker: Manual action required] + +We've received a lot of user feedback regarding our installation process, +and it seems the proxy part is the one which is the most confusing and difficult. +Unfortunately, this is also the one where errors and mistakes can completely break +the application. + +To make things easier for everyone, we now offer a simplified deployment +process for the reverse proxy part. This will make upgrade of the proxy configuration +significantly easier on docker deployments. + +On non-docker instances, you have nothing to do. + +If you have a dockerized instance, here is the upgrade path. + +First, tweak your .env file: + +```sh +# remove the FUNKWHALE_URL variable +# and add the next variables +FUNKWHALE_HOSTNAME=yourdomain.funkwhale +FUNKWHALE_PROTOCOL=https + +# add the following variable, matching the path your app is deployed +# leaving the default should work fine if you deployed using the same +# paths as the documentation +FUNKWHALE_FRONTEND_PATH=/srv/funkwhale/front/dist +``` + +Then, add the following block at the end of your docker-compose.yml file: + +```yaml +services: + # existing services + api: + # ... + celeryworker: + # ... + + # new service + nginx: + image: nginx + env_file: + - .env + environment: + # Override those variables in your .env file if needed + - "NGINX_MAX_BODY_SIZE=${NGINX_MAX_BODY_SIZE-100M}" + volumes: + - "./nginx/funkwhale.template:/etc/nginx/conf.d/funkwhale.template:ro" + - "./nginx/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro" + - "${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:${MUSIC_DIRECTORY_SERVE_PATH-/srv/funkwhale/data/music}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}:ro" + - "${STATIC_ROOT}:${STATIC_ROOT}:ro" + - "${FUNKWHALE_FRONTEND_PATH}:/frontend:ro" + ports: + # override those variables in your .env file if needed + - "${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}:80" + command: > + sh -c "envsubst \"`env | awk -F = '{printf \" $$%s\", $$1}'`\" + < /etc/nginx/conf.d/funkwhale.template + > /etc/nginx/conf.d/default.conf + && cat /etc/nginx/conf.d/default.conf + && nginx -g 'daemon off;'" + links: + - api +``` + +By doing that, you'll enable a dockerized nginx that will automatically be +configured to serve your Funkwhale instance. + +Download the required configuration files for the nginx container: + +```{parsed-literal} +cd /srv/funkwhale +mkdir nginx +curl -L -o nginx/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/docker.nginx.template" +curl -L -o nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/|version|/deploy/funkwhale_proxy.conf" +``` + +Update the funkwhale.conf configuration of your server's reverse-proxy: + +```sh +# the file should match something like that, upgrade all variables +# between ${} to match the ones in your .env file, +# and your SSL configuration if you're not using let's encrypt +# The important thing is that you only have a single location block +# that proxies everything to your dockerized nginx. + +sudo nano /etc/nginx/sites-enabled/funkwhale.conf +``` + +```nginx +upstream fw { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + listen [::]:80; + server_name ${FUNKWHALE_HOSTNAME}; + location / { return 301 https://$host$request_uri; } +} +server { + listen 443 ssl; + listen [::]:443 ssl; + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + + location / { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://fw/; + } +} +``` + +Check that your configuration is valid then reload: + +```sh +sudo nginx -t +sudo systemctl reload nginx +``` + +## 0.16.3 (2018-08-21) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Bugfixes: + +- Fixed front-end not contacting the proper path on the API (!385) + +## 0.16.2 (2018-08-21) + +```{warning} +**This release is broken, do not use it. Upgrade to 0.16.3 or higher instead.** +``` + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Bugfixes: + +- Ensure we always have a default api url set on first load to avoid displaying + the instance picker (#490) +- Fixed CLI importer syntax error because of async reserved keyword usage + (#494) + +## 0.16.1 (2018-08-19) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Make funkwhale themable by loading external stylesheets (#456) + +Enhancements: + +- Add link to admin on "Staff member" button (#202) +- Can now add a description to radios and better radio cards (#331) +- Display track duration in track tables (#461) +- More permissive default permissions for front-end files (#388) +- Simpler configuration and toolchain for the front-end using vue-cli (!375) +- Use Howler to manage audio instead of our own dirty/untested code (#392) + +Bugfixes: + +- Fix alignment issue on top bar in Admin tabs (#395) +- Fix Apache2 permission issue preventing `/media` folder from being served + correctly (#389) +- Fix loading on browse page lists causing them to go down, and dimming over + the top bar (#468) +- Fixed (again): administration section not showing up in sidebar after login + (#245) +- Fixed audio mimetype not showing up on track detail and list (#459) +- Fixed broken audio playback on Chrome and invisible volume control (#390) +- Fixed broken federation import on big imports due to missing transaction + logic (#397) +- Fixed crash on artist pages when no cover is available (#457) +- Fixed favorited status of tracks not appearing in interface (#398) +- Fixed invitation code not prefilled in form when accessing invitation link + (#476) +- Fixed typos in scheduled tasks configuration (#487) +- Removed release date error in case of empty date (#478) +- Removed white on white artist button on hover, on Album page (#393) +- Smarter date parsing during import by replacing arrow with pendulum (#376) +- Display public playlists properly for anonymous users (#488) + +i18n: + +- Added portuguese, spanish and german translations + +### Custom themes for Funkwhale + +If you ever wanted to give a custom look and feel to your instance, this is now possible. + +Check https://docs.funkwhale.audio/configuration.html#theming if you want to know more! + +### Fix Apache2 configuration file for media block [Manual action required] + +The permission scope on the current Apache2 configuration file is too narrow, preventing thumbnails from being served. + +On Apache2 setups, you have to replace the following line: + +```apache +<Directory /srv/funkwhale/data/media/albums> +``` + +with: + +```apache +<Directory /srv/funkwhale/data/media> +``` + +You can now restart your server: + +```sh +sudo systemctl restart apache2 +``` + +## 0.16 (2018-07-22) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Complete redesign of the library home and playlist pages (#284) +- Expose ActivityPub actors for users (#317) +- Implemented a basic but functional Github-like search on federated tracks + list (#344) +- Internationalized interface as well as translations for Arabic, French, + Esperanto, Italian, Occitan, Polish, Portuguese and Swedish (#161, #167) +- Users can now upload an avatar in their settings page (#257) + +Enhancements: + +- Added feedback when creating/updating radio (#302) +- Apply restrictions to username characters during signup +- Autoselect best language based on browser configuration (#386) +- Can now order tracks on federated track list (#326) +- Can now relaunch pending import jobs from the web interface (#323) +- Ensure we do not display pagination on single pages (#334) +- Ensure we have sane defaults for MEDIA_ROOT, STATIC_ROOT and + MUSIC_DIRECTORY_PATH in the deployment .env file (#350) +- Make some space for the volume slider to allow precise control (#318) +- Removed django-cacheops dependency +- Store track artist and album artist separately (#237) Better handling of + tracks with a different artist than the album artist +- The navigation bar of Library is now fixed (#375) +- Use thumbnails for avatars and covers to reduce bandwidth + +Bugfixes: + +- Ensure 750 permissions on CI artifacts (#332) +- Ensure images are not cropped in queue (#337) +- Ensure we do not import artists with empty names (#351) +- Fix notifications not closing when clicking on the cross (#366) +- Fix the most annoying offset in the whole fediverse (#369) +- Fixed persistent message in playlist modal (#304) +- Fixed unfiltered results in favorites API (#384) +- Raise a warning instead of crashing when getting a broken path in file import + (#138) +- Remove parallelization of uploads during import to avoid crashing small + servers (#382) +- Subsonic API login is now case insensitive (#339) +- Validate Date header in HTTP Signatures (#328) + +Documentation: + +- Added troubleshotting and technical overview documentation (#256) +- Arch Linux installation steps +- Document that users can use Ultrasonic on Android (#316) +- Fixed a couple of typos +- Some cosmetic improvements to the doc + +i18n: + +- Arabic translation (!302) +- Polish translation (!304) + +### Library home and playlist page overhaul + +The library home page have been completely redesigned to include: + +- other users activity (listenings, playlists and favorites) +- recently imported albums + +We think this new version showcases more music in a more useful way, let us know +what you think about it! + +The playlist page have been updated as well. + +### Internationalized interface + +After months of work, we're proud to announce our interface is now ready +for internationalization. + +Translators have already started the work of translating Funkwhale in 8 different languages, +and we're ready to add more as needed. + +You can easily get involved at https://translate.funkwhale.audio/engage/funkwhale/ + +### Better handling of tracks with a different artist than the album artist + +Some tracks involve a different artist than the album artist (e.g. a featuring) +and Funkwhale has been known to do weird things when importing such tracks, resulting +in albums that contained a single track, for instance. + +The situation should be improved with this release, as Funkwhale is now able to +store separately the track and album artist, and display it properly in the interface. + +### Users now have an ActivityPub Actor [Manual action required] + +In the process of implementing federation for user activity such as listening +history, we are now making user profiles (a.k.a. ActivityPub actors) available through federation. + +This does not means the federation is working, but this is a needed step to implement it. + +Those profiles will be created automatically for new users, but you have to run a command +to create them for existing users. + +On docker setups: + +```sh +docker-compose run --rm api python manage.py script create_actors --no-input +``` + +On non-docker setups: + +```sh +python manage.py script create_actors --no-input +``` + +This should only take a few seconds to run. It is safe to interrupt the process or rerun it multiple times. + +### Image thumbnails [Manual action required] + +To reduce bandwidth usage on slow or limited connexions and improve performance +in general, we now use smaller images in the front-end. For instance, if you have +an album cover with a 1000x1000 pixel size, we will create smaller +versions of this image (50x50, 200x200, 400x400) and reference those resized version +when we don't actually need the original image. + +Thumbnail will be created automatically for new objects, however, you have +to launch a manual command to deal with existing ones. + +On docker setups: + +```sh +docker-compose run --rm api python manage.py script create_image_variations --no-input +``` + +On non-docker setups: + +```sh +python manage.py script create_image_variations --no-input +``` + +This should be quite fast but may take up to a few minutes depending on the number +of albums you have in database. It is safe to interrupt the process or rerun it multiple times. + +### Improved search on federated tracks list + +Having a powerful but easy-to-use search is important but difficult to achieve, especially +if you do not want to have a real complex search interface. + +Github does a pretty good job with that, using a structured but simple query system +(See https://help.github.com/articles/searching-issues-and-pull-requests/#search-only-issues-or-pull-requests). + +This release implements a limited but working subset of this query system. You can use it only on the federated +tracks list (/manage/federation/tracks) at the moment, but depending on feedback it will be rolled-out on other pages as well. + +This is the type of query you can run: + +- `hello world`: search for "hello" and "world" in all the available fields +- `hello in:artist` search for results where artist name is "hello" +- `spring in:artist,album` search for results where artist name or album title contain "spring" +- `artist:hello` search for results where artist name equals "hello" +- `artist:"System of a Down" domain:instance.funkwhale` search for results where artist name equals "System of a Down" and inside "instance.funkwhale" library + +### Ensure `MEDIA_ROOT`, `STATIC_ROOT` and `MUSIC_DIRECTORY_*` are set explicitly [Manual action required] + +In our default .env file, MEDIA_ROOT and STATIC_ROOT were commented by default, causing +some deployment issues on non-docker setups when people forgot to uncomment them. + +From now on, those variables are uncommented, and will also be used on docker setups +to mount the volumes automatically in the docker-compose.yml file. This has been a source +of headache as well in some deployments, where you had to update both the .env file and +the compose file. + +This also applies to in-place paths (MUSIC_DIRECTORY_PATH and MUSIC_DIRECTORY_SERVE_PATH), +whose values are now used directly to set up the proper Docker volumes. + +This will only affect new deployments though. If you want to benefit from this on an +existing instance, do a backup of your `.env` and `docker-compose.yml` files and apply the following changes: + +- Ensure `MEDIA_ROOT` is uncommented in your .env file and match the absolute path where media files are stored + on your host (`/srv/funkwhale/data/media` by default) +- Ensure `STATIC_ROOT` is uncommented in your .env file and match the absolute path where static files are stored + on your host (`/srv/funkwhale/data/static` by default) +- If you use in-place import: + - Ensure MUSIC_DIRECTORY_PATH is uncommented and set to `/music` + - Ensure MUSIC_DIRECTORY_SERVE_PATH is uncommented and set to the absolute path on your host were your music files + are stored (`/srv/funkwhale/data/music` by default) +- Edit your docker-compose.yml file to reflect the changes: + - Search for volumes (there should be two occurrences) that contains `/app/funkwhale_api/media` on the right side, and + replace the whole line with `- "${MEDIA_ROOT}:${MEDIA_ROOT}"` + - Search for a volume that contains `/app/staticfiles` on the right side, and + replace the whole line with `- "${STATIC_ROOT}:${STATIC_ROOT}"` + - If you use in-place import, search for volumes (there should be two occurrences) that contains `/music:ro` on the right side, and + replace the whole line with `- "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro"` + +In the end, the `volumes` directives of your containers should look like that: + +```yaml +services: + # ... + celeryworker: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + # ... + api: + volumes: + - "${MUSIC_DIRECTORY_SERVE_PATH}:${MUSIC_DIRECTORY_PATH}:ro" + - "${MEDIA_ROOT}:${MEDIA_ROOT}" + - "${STATIC_ROOT}:${STATIC_ROOT}" + - ./front/dist:/frontend + # ... +``` + +### Removed Cacheops dependency + +We removed one of our dependency named django-cacheops. It was unly used in a few places, +and not playing nice with other dependencies. + +You can safely remove this dependency in your environment with `pip uninstall django-cacheops` if you're +not using docker. + +You can also safely remove any `CACHEOPS_ENABLED` setting from your environment file. + +## 0.15 (2018-06-24) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Added admin interface to manage import requests (#190) +- Added replace flag during import to replace already present tracks with a new + version of their track file (#222) +- Funkwhale's front-end can now point to any instance (#327) Removed front-end + and back-end coupling +- Management interface for users (#212) +- New invite system (#248) New invite system + +Enhancements: + +- Added "TV" to the list of highlighted words during YouTube import (#154) +- Command line import now accepts unlimited args (#242) + +Bugfixes: + +- Expose track files date in manage API (#307) +- Fixed current track restart/hiccup when shuffling queue, deleting track from + queue or reordering (#310) +- Include user's current private playlists on playlist list (#302) +- Remove link to generic radios, since they don't have detail pages (#324) + +Documentation: + +- Document that Funkwhale may be installed with YunoHost (#325) +- Documented a saner layout with symlinks for in-place imports (#254) +- Upgrade documentation now use the correct user on non-docker setups (#265) + +### Invite system + +On closed instances, it has always been a little bit painful to create accounts +by hand for new users. This release solve that by adding invitations. + +You can generate invitation codes via the "users" admin interface (you'll find a +link in the sidebar). Those codes are valid for 14 days, and can be used once +to create a new account on the instance, even if registrations are closed. + +By default, we generate a random code for invitations, but you can also use custom codes +if you need to print them or make them fancier ;) + +Invitations generation and management requires the "settings" permission. + +### Removed front-end and back-end coupling + +Even though Funkwhale's front-end has always been a Single Page Application, +talking to an API, it was only able to talk to an API on the same domain. + +There was no real technical justification behind this (only laziness), and it was +also blocking interesting use cases: + +- Use multiple customized versions of the front-end with the same instance +- Use a customized version of the front-end with multiple instances +- Use a locally hosted front-end with a remote API, which is especially useful in development + +From now on, Funkwhale's front-end can connect to any Funkwhale server. You can +change the server you are connecting to in the footer. + +Fixing this also unlocked a really interesting feature in our development/review workflow: +by leveraging Gitlab CI and review apps, we are now able to deploy automatically live versions of +a merge request, making it possible for anyone to review front-end changes easily, without +the need to install a local environment. + +## 0.14.2 (2018-06-16) + +```{warning} +This release contains a fix for a permission issue. You should upgrade +as soon as possible. Read the changelog below for more details. +``` + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Enhancements: + +- Added feedback on shuffle button (#262) +- Added multiple warnings in the documentation that you should never run + makemigrations yourself (#291) +- Album cover served in http (#264) +- Apache2 reverse proxy now supports websockets (tested with Apache 2.4.25) + (!252) +- Display file size in human format during file upload (#289) +- Switch from BSD-3 licence to AGPL-3 licence (#280) + +Bugfixes: + +- Ensure radios can only be edited and deleted by their owners (#311) +- Fixed admin menu not showing after login (#245) +- Fixed broken pagination in Subsonic API (#295) +- Fixed duplicated websocket connection on timeline (#287) + +Documentation: + +- Improved documentation about in-place imports setup (#298) + +Other: + +- Added Black and flake8 checks in CI to ensure consistent code styling and + formatting (#297) +- Added bug and feature issue templates (#299) + +### Permission issues on radios + +Because of an error in the way we checked user permissions on radios, +public radios could be deleted by any logged-in user, even if they were not +the owner of the radio. + +We recommend instances owners to upgrade as fast as possible to avoid any abuse +and data loss. + +### Funkwhale is now licenced under AGPL-3 + +Following the recent switch made by PixelFed +(https://github.com/dansup/pixelfed/issues/143), we decided along with +the community to relicence Funkwhale under the AGPL-3 licence. We did this +switch for various reasons: + +- This is better aligned with other fediverse software +- It prohibits anyone to distribute closed-source and proprietary forks of Funkwhale + +As end users and instance owners, this does not change anything. You can +continue to use Funkwhale exactly as you did before :) + +### Apache support for websocket + +Up until now, our Apache2 configuration was not working with websockets. This is now +solved by adding this at the beginning of your Apache2 configuration file: + +```apache +Define funkwhale-api-ws ws://localhost:5000 +``` + +And this, before the "/api" block: + +```apache +# Activating WebSockets +ProxyPass "/api/v1/instance/activity" ${funkwhale-api-ws}/api/v1/instance/activity +``` + +Websockets may not be supported in older versions of Apache2. Be sure to upgrade to the latest version available. + +### Serving album covers in https (Apache2 proxy) + +Two issues are addressed here. The first one was about Django replying with +mixed content (http) when queried for covers. Setting up the `X-Forwarded-Proto` +allows Django to know that the client is using https, and that the reply must +be https as well. + +Second issue was a problem of permission causing Apache a denied access to +album cover folder. It is solved by adding another block for this path in +the Apache configuration file for funkwhale. + +Here is how to modify your `funkwhale.conf` apache2 configuration: + +```apache +<VirtualHost *:443> + # ... + #Add this new line + RequestHeader set X-Forwarded-Proto "https" + # ... + # Add this new block below the other <Directory/> blocks + # replace /srv/funkwhale/data/media with the path to your media directory + # if you're not using the standard layout. + <Directory /srv/funkwhale/data/media/albums> + Options FollowSymLinks + AllowOverride None + Require all granted + </Directory> + # ... +</VirtualHost> +``` + +### About the makemigrations warning + +You may sometimes get the following warning while applying migrations: + +``` +"Your models have changes that are not yet reflected in a migration, and so won't be applied." +``` + +This is a warning, not an error, and it can be safely ignored. +Never run the `makemigrations` command yourself. + +## 0.14.1 (2018-06-06) + +Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html + +Enhancements: + +- Display server version in the footer (#270) +- fix_track_files will now update files with bad mimetype (and not only the one + with no mimetype) (#273) +- Huge performance boost (~x5 to x7) during CLI import that queries MusicBrainz + (#288) +- Removed alpha-state transcoding support (#271) + +Bugfixes: + +- Broken logging statement during import error (#274) +- Broken search bar on library home (#278) +- Do not crash when importing track with an artist that do not match the + release artist (#237) +- Do not crash when tag contains multiple uuids with a / separator (#267) +- Ensure we do not store bad mimetypes (such as application/x-empty) (#266) +- Fix broken "play all" button that played only 25 tracks (#281) +- Fixed broken track download modal (overflow and wrong URL) (#239) +- Removed hardcoded size limit in file upload widget (#275) + +Documentation: + +- Added warning about \_protected/music location in nginx configuration (#247) + +### Removed alpha-state transcoding (#271) + +A few months ago, a basic transcoding feature was implemented. Due to the way +this feature was designed, it was slow, CPU intensive on the server side, +and very tightly coupled to the reverse-proxy configuration, preventing +it to work Apache2, for instance. It was also not compatible with Subsonic clients. + +Based on that, we're currently removing support for transcoding +**in its current state**. The work on a better designed transcoding feature +can be tracked in https://dev.funkwhale.audio/funkwhale/funkwhale/issues/272. + +You don't have to do anything on your side, but you may want to remove +the now obsolete configuration from your reverse proxy file (nginx only): + +```nginx +# Remove those blocks: + +# transcode cache +proxy_cache_path /tmp/funkwhale-transcode levels=1:2 keys_zone=transcode:10m max_size=1g inactive=7d; + +# Transcoding logic and caching +location = /transcode-auth { + include /etc/nginx/funkwhale_proxy.conf; + # needed so we can authenticate transcode requests, but still + # cache the result + internal; + set $query ''; + # ensure we actually pass the jwt to the underlytin auth url + if ($request_uri ~* "[^\?]+\?(.*)$") { + set $query $1; + } + proxy_pass http://funkwhale-api/api/v1/trackfiles/viewable/?$query; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; +} + +location /api/v1/trackfiles/transcode/ { + include /etc/nginx/funkwhale_proxy.conf; + # this block deals with authenticating and caching transcoding + # requests. Caching is heavily recommended as transcoding + # is a CPU intensive process. + auth_request /transcode-auth; + if ($args ~ (.*)jwt=[^&]*(.*)) { + set $cleaned_args $1$2; + } + proxy_cache_key "$scheme$request_method$host$uri$is_args$cleaned_args"; + proxy_cache transcode; + proxy_cache_valid 200 7d; + proxy_ignore_headers "Set-Cookie"; + proxy_hide_header "Set-Cookie"; + add_header X-Cache-Status $upstream_cache_status; + proxy_pass http://funkwhale-api; +} +# end of transcoding logic +``` + +## 0.14 (2018-06-02) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Admins can now configure default permissions that will be granted to all + registered users (#236) +- Files management interface for users with "library" permission (#223) +- New action table component for quick and efficient batch actions (#228) This + is implemented on the federated tracks pages, but will be included in other + pages as well depending on the feedback. + +Enhancements: + +- Added a new "upload" permission that allows user to launch import and view + their own imports (#230) +- Added Support for OggTheora in import. +- Autoremove media files on model instance deletion (#241) +- Can now import a whole remote library at once thanks to new Action Table + component (#164) +- Can now use album covers from flac/mp3 metadata and separate file in track + directory (#219) +- Implemented getCovertArt in Subsonic API to serve album covers (#258) +- Implemented scrobble endpoint of subsonic API, listenings are now tracked + correctly from third party apps that use this endpoint (#260) +- Retructured music API to increase performance and remove useless endpoints + (#224) + +Bugfixes: + +- Consistent constraints/checks for URL size (#207) +- Display proper total number of tracks on radio detail (#225) +- Do not crash on flac import if musicbrainz tags are missing (#214) +- Empty save button in radio builder (#226) +- Ensure anonymous users can use the app if the instance is configured + accordingly (#229) +- Ensure inactive users cannot get auth tokens (#218) This was already the case + bug we missed some checks +- File-upload import now supports Flac files (#213) +- File-upload importer should now work properly, assuming files are tagged + (#106) +- Fixed a few broken translations strings (#227) +- Fixed broken ordering in front-end lists (#179) +- Fixed ignored page_size parameter on artist and favorites list (#240) +- Read ID3Tag Tracknumber from TRCK (#220) +- We now fetch album covers regardless of the import methods (#231) + +Documentation: + +- Added missing subsonic configuration block in deployment vhost files (#249) +- Moved upgrade doc under install doc in TOC (#251) + +Other: + +- Removed acoustid support, as the integration was buggy and error-prone (#106) + +### Files management interface + +This is the first bit of an ongoing work that will span several releases, to +bring more powerful library management features to Funkwhale. This iteration +includes a basic file management interface where users with the "library" +permission can list and search available files, order them using +various criteria (size, bitrate, duration...) and delete them. + +### New "upload" permission + +This new permission is helpful if you want to give upload/import rights +to some users, but don't want them to be able to manage the library as a whole: +although there are no controls yet for managing library in the fron-end, +subsequent release will introduce management interfaces for artists, files, +etc. + +Because of that, users with the "library" permission will have much more power, +and will also be able to remove content from the platform. On the other hand, +users with the "upload" permission will only have the ability to add new +content. + +Also, this release also includes a new feature called "default permissions": +those are permissions that are granted to every users on the platform. +On public/open instances, this will play well with the "upload" permission +since everyone will be able to contribute to the instance library without +an admin giving the permission to every single user. + +### Smarter album cover importer + +In earlier versions, covers where only imported when launching a YouTube import. +Starting from this release, covers will be imported regardless of the import mode +(file upload, youtube-dl, CLI, in-place...). Funkwhale will look for covers +in the following order: + +1. In the imported file itself (FLAC/MP3 only) +2. In a cover.jpg or cover.png in the file directory +3. By fetching cover art from Musibrainz, assuming the file is tagged correctly + +This will only work for newly imported tracks and albums though. In the future, +we may offer an option to refetch album covers from the interface, but in the +meantime, you can use the following snippet: + +```python +# Store this in /tmp/update_albums.py +from funkwhale_api.music.models import Album, TrackFile +from funkwhale_api.music.tasks import update_album_cover + +albums_without_covers = Album.objects.filter(cover='') +total = albums_without_covers.count() +print('Found {} albums without cover'.format(total)) +for i, album in enumerate(albums_without_covers.iterator()): + print('[{}/{}] Fetching cover for {}...'.format(i+1, total, album.title)) + f = TrackFile.objects.filter(track__album=album).filter(source__startswith='file://').first() + update_album_cover(album, track_file=f) +``` + +Then launch it: + +```sh +# docker setups +cat /tmp/update_albums.py | docker-compose run --rm api python manage.py shell -i python + +# non-docker setups +source /srv/funkwhale/load_env +source /srv/funkwhale/virtualenv/bin/activate +cat /tmp/update_albums.py | python manage.py shell -i python + +# cleanup +rm /tmp/update_albums.py +``` + +```{note} +Depending on your number of albums, the previous snippet may take some time +to execute. You can interrupt it at any time using ctrl-c and relaunch it later, +as it's idempotent. +``` + +### Music API changes + +This release includes an API break. Even though the API is advertised +as unstable, and not documented, here is a brief explanation of the change in +case you are using the API in a client or in a script. Summary of the changes: + +- `/api/v1/artists` does not includes a list of tracks anymore. It was to heavy + to return all of this data all the time. You can get all tracks for an + artist using `/api/v1/tracks?artist=artist_id` +- Additionally, `/api/v1/tracks` now support an `album` filter to filter + tracks matching an album +- `/api/v1/artists/search`, `/api/v1/albums/search` and `/api/v1/tracks/search` + endpoints are removed. Use `/api/v1/{artists|albums|tracks}/?q=yourquery` + instead. It's also more powerful, since you can combine search with other + filters and ordering options. +- `/api/v1/requests/import-requests/search` endpoint is removed as well. + Use `/api/v1/requests/import-requests/?q=yourquery` + instead. It's also more powerful, since you can combine search with other + filters and ordering options. + +Of course, the front-end was updated to work with the new API, so this should +not impact end-users in any way, apart from slight performance gains. + +```{note} +The API is still not stable and may evolve again in the future. API freeze +will come at a later point. +``` + +### Flac files imports via upload + +You have nothing to do to benefit from this, however, since Flac files +tend to be a lot bigger than other files, you may want to increase the +`client_max_body_size` value in your Nginx configuration if you plan +to upload flac files. + +### Missing subsonic configuration block in vhost files + +Because of a missing block in the sample Nginx and Apache configurations, +instances that were deployed after the 0.13 release are likely to be unable +to answer to Subsonic clients (the missing bits were properly documented +in the changelog). + +Ensure you have the following snippets in your Nginx or Apache configuration +if you plan to use the Subsonic API. + +Nginx: + +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` + +Apache2: + +```apache +<Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest + </Location> +``` + +## 0.13 (2018-05-19) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Can now import and play flac files (#157) +- Simpler permission system (#152) +- Store file length, size and bitrate (#195) +- We now have a brand new instance settings interface in the front-end (#206) + +Enhancements: + +- Disabled browsable HTML API in production (#205) +- Instances can now indicate on the nodeinfo endpoint if they want to remain + private (#200) + +Bugfixes: + +- .well-known/nodeinfo endpoint can now answer to request with Accept: + application/json (#197) +- Fixed escaping issue of track name in playlist modal (#201) +- Fixed missing dot when downloading file (#204) +- In-place imported tracks with non-ascii characters don't break reverse-proxy + serving (#196) +- Removed Python 3.6 dependency (secrets module) (#198) +- Uplayable tracks are now properly disabled in the interface (#199) + +### Instance settings interface + +Prior to this release, the only way to update instance settings (such as +instance description, signup policy, federation configuration, etc.) was using +the admin interface provided by Django (the back-end framework which power the API). + +This interface worked, but was not really-user friendly and intuitive. + +Starting from this release, we now offer a dedicated interface directly +in the front-end. You can view and edit all your instance settings from here, +assuming you have the required permissions. + +This interface is available at `/manage/settings` and via link in the sidebar. + +### Storage of bitrate, size and length in database + +Starting with this release, when importing files, Funkwhale will store +additional information about audio files: + +- Bitrate +- Size (in bytes) +- Duration + +This change is not retroactive, meaning already imported files will lack those +information. The interface and API should work as before in such case, however, +we offer a command to deal with legacy files and populate the missing values. + +On docker setups: + +```sh +docker-compose run --rm api python manage.py fix_track_files +``` + +On non-docker setups: + +```sh +# from your activated virtualenv +python manage.py fix_track_files +``` + +```{note} +The execution time for this command is proportional to the number of +audio files stored on your instance. This is because we need to read the +files from disk to fetch the data. You can run it in the background +while Funkwhale is up. + +It's also safe to interrupt this command and rerun it at a later point, or run +it multiple times. + +Use the --dry-run flag to check how many files would be impacted. +``` + +### Simpler permission system + +Starting from this release, the permission system is much simpler. Up until now, +we were using Django's built-in permission system, which was working, but also +quite complex to deal with. + +The new implementation relies on simpler logic, which will make integration +on the front-end in upcoming releases faster and easier. + +If you have manually given permissions to users on your instance, +you can migrate those to the new system. + +On docker setups: + +```sh +docker-compose run --rm api python manage.py script django_permissions_to_user_permissions --no-input +``` + +On non-docker setups: + +```sh +# in your virtualenv +python api/manage.py script django_permissions_to_user_permissions --no-input +``` + +There is still no dedicated interface to manage user permissions, but you +can use the admin interface at `/api/admin/users/user/` for that purpose in +the meantime. + +## 0.12 (2018-05-09) + +Upgrade instructions are available at +https://docs.funkwhale.audio/upgrading.html + +Features: + +- Subsonic API implementation to offer compatibility with existing clients such + as DSub (#75) +- Use nodeinfo standard for publishing instance information (#192) + +Enhancements: + +- Play button now play tracks immediately instead of appending them to the + queue (#99, #156) + +Bugfixes: + +- Fix broken federated import (#193) + +Documentation: + +- Up-to-date documentation for upgrading front-end files on docker setup (#132) + +### Subsonic API + +This release implements some core parts of the Subsonic API, which is widely +deployed in various projects and supported by numerous clients. + +By offering this API in Funkwhale, we make it possible to access the instance +library and listen to the music without from existing Subsonic clients, and +without developing our own alternative clients for each and every platform. + +Most advanced Subsonic clients support offline caching of music files, +playlist management and search, which makes them well-suited for nomadic use. + +Please see [our list of supported apps](https://funkwhale.audio/apps) +for more information about supported clients and user instructions. + +At the instance-level, the Subsonic API is enabled by default, but require +and additional endpoint to be added in you reverse-proxy configuration. + +On nginx, add the following block: + +```nginx +location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; +} +``` + +On Apache, add the following block: + +```apache +<Location "/rest"> + ProxyPass ${funkwhale-api}/api/subsonic/rest + ProxyPassReverse ${funkwhale-api}/api/subsonic/rest +</Location> +``` + +The Subsonic can be disabled at the instance level from the django admin. + +```{note} +Because of Subsonic's API design which assumes cleartext storing of +user passwords, we chose to have a dedicated, separate password +for that purpose. Users can generate this password from their +settings page in the web client. +``` + +### Nodeinfo standard for instance information and stats + +```{warning} +The ``/api/v1/instance/stats/`` endpoint which was used to display +instance data in the about page is removed in favor of the new +``/api/v1/instance/nodeinfo/2.0/`` endpoint. +``` + +In earlier version, we where using a custom endpoint and format for +our instance information and statistics. While this was working, +this was not compatible with anything else on the fediverse. + +We now offer a nodeinfo 2.0 endpoint which provides, in a single place, +all the instance information such as library and user activity statistics, +public instance settings (description, registration and federation status, etc.). + +We offer two settings to manage nodeinfo in your Funkwhale instance: + +1. One setting to completely disable nodeinfo, but this is not recommended + as the exposed data may be needed to make some parts of the front-end + work (especially the about page). +2. One setting to disable only usage and library statistics in the nodeinfo + endpoint. This is useful if you want the nodeinfo endpoint to work, + but don't feel comfortable sharing aggregated statistics about your library + and user activity. + +To make your instance fully compatible with the nodeinfo protocol, you need to +to edit your nginx configuration file: + +```nginx +# before +# ... +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +# ... + +# after +# ... +location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/; +} +# ... +``` + +You can do the same if you use apache: + +```apache +# before +# ... +<Location "/.well-known/webfinger"> + ProxyPass ${funkwhale-api}/.well-known/webfinger + ProxyPassReverse ${funkwhale-api}/.well-known/webfinger +</Location> +# ... + +# after +# ... +<Location "/.well-known/"> + ProxyPass ${funkwhale-api}/.well-known/ + ProxyPassReverse ${funkwhale-api}/.well-known/ +</Location> +# ... +``` + +This will ensure all well-known endpoints are proxied to funkwhale, and +not just webfinger one. + +Links: + +- About nodeinfo: https://github.com/jhass/nodeinfo + +## 0.11 (2018-05-06) + +Upgrade instructions are available at https://docs.funkwhale.audio/upgrading.html + +Special thanks for this release go to @renon:matrix.org (@Hazmo on Gitlab) +for bringing Apache2 support to Funkwhale and contributing on other issues. +Thank you! + +Features: + +- Funkwhale now works behind an Apache2 reverse proxy (!165) + check out the brand new documentation at https://docs.funkwhale.audio/installation/index.html#apache2 + if you want to try it! +- Users can now request password reset by email, assuming a SMTP server was + correctly configured (#187) + +Enhancements: + +- Added a fix_track_files command to run checks and fixes against library + (#183) +- Avoid fetching Actor object on every request authentication +- Can now relaunch errored jobs and batches (#176) +- List pending requests by default, added a status filter for requests (#109) +- More structured menus in sidebar, added labels with notifications +- Sample virtual-host file for Apache2 reverse-proxy (!165) +- Store high-level settings (such as federation or auth-related ones) in + database (#186) + +Bugfixes: + +- Ensure in place imported files get a proper mimetype (#183) +- Federation cache suppression is now simpler and also deletes orphaned files + (#189) +- Fixed small UI glitches/bugs in federation tabs (#184) +- X-sendfile not working with in place import (#182) + +Documentation: + +- Added a documentation area for third-party projects (#180) +- Added documentation for optimizing Funkwhale and reduce its memory footprint. +- Document that the database should use an utf-8 encoding (#185) +- Foundations for API documentation with Swagger (#178) + +### Database storage for high-level settings + +Due to the work done in #186, the following environment variables have been +deprecated: + +- FEDERATION_ENABLED +- FEDERATION_COLLECTION_PAGE_SIZE +- FEDERATION_MUSIC_NEEDS_APPROVAL +- FEDERATION_ACTOR_FETCH_DELAY +- PLAYLISTS_MAX_TRACKS +- API_AUTHENTICATION_REQUIRED + +Configuration for this settings has been moved to database, as it will provide +a better user-experience, by allowing you to edit these values on-the-fly, +without restarting Funkwhale processes. + +You can leave those environment variables in your .env file for now, as the +values will be used to populate the database entries. We'll make a proper +announcement when the variables won't be used anymore. + +Please browse https://docs.funkwhale.audio/configuration.html#instance-settings +for more information about instance configuration using the web interface. + +### System emails + +Starting from this release, Funkwhale will send two types +of emails: + +- Email confirmation emails, to ensure a user's email is valid +- Password reset emails, enabling user to reset their password without an admin's intervention + +Email sending is disabled by default, as it requires additional configuration. +In this mode, emails are simply outputted on stdout. + +If you want to actually send those emails to your users, you should edit your +.env file and tweak the `EMAIL_CONFIG` variable. See :data:`EMAIL_CONFIG <config.settings.common.EMAIL_CONFIG>` +for more details. + +```{note} +As a result of these changes, the ``DJANGO_EMAIL_BACKEND`` variable, +which was not documented, has no effect anymore. You can safely remove it from +your .env file if it is set. +``` + +### Proxy headers for non-docker deployments + +For non-docker deployments, add `--proxy-headers` at the end of the `daphne` +command in :file:`/etc/systemd/system/funkwhale-server.service`. + +This will ensure the application receive the correct IP address from the client +and not the proxy's one. + +## 0.10 (2018-04-23) + +Features: + +- Can now import files in-place from the CLI importer (#155) + +Enhancements: + +- Avoid downloading audio files multiple times from remote libraries (#163) +- Better file import performance and error handling (#144) +- Import job and batch API and front-end have been improved with better + performance, pagination and additional filters (#171) +- Increased max_length on TrackFile.source, this will help when importing files + with a really long path (#142) +- Player is back in Queue tab (#150) + +Bugfixes: + +- Fail graciously when AP representation includes a null_value for mediaType +- Fix sidebar tabs not showing under small resolution under Chrome (#173) +- Fixed broken login due to badly configured Axios (#172) +- Fixed broken playlist modal after login (#155) +- Fixed queue reorder or track deletion restarting currently playing track + (#151) +- Radio will now append new track if you delete the last track in queue (#145) +- Reset all sensitive front-end data on logout (#124) +- Typos/not showing text due to i18n work (#175) + +Documentation: + +- Better documentation for hardware requirements and memory usage (#165) + +### In-place import + +This release includes in-place imports for the CLI import. This means you can +load gigabytes of music into funkwhale without worrying about about Funkwhale +copying those music files in its internal storage and eating your disk space. + +[This new feature is documented here](https://docs.funkwhale.audio/importing-music.html#in-place-import) +and require additional configuration to ensure funkwhale and your webserver can +serve those files properly. + +**Non-docker users:** + +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: + +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` + +And the following to your .env file: + +```sh +MUSIC_DIRECTORY_PATH=/srv/funkwhale/data/music +``` + +**Docker users:** + +Assuming your music is stored in `/srv/funkwhale/data/music`, add the following +block to your nginx configuration: + +```nginx +location /_protected/music { + internal; + alias /srv/funkwhale/data/music; +} +``` + +Assuming you have the following volume directive in your `docker-compose.yml` +(it's the default): `/srv/funkwhale/data/music:/music:ro`, then add +the following to your .env file: + +```sh +# this is the path in the container +MUSIC_DIRECTORY_PATH=/music +# this is the path on the host +MUSIC_DIRECTORY_SERVE_PATH=/srv/funkwhale/data/music +``` + +## 0.9.1 (2018-04-17) + +Bugfixes: + +- Allow null values for musicbrainz_id in Audio ActivityPub representation +- Fixed broken permission check on library scanning and too aggressive page + validation + +## 0.9 (2018-04-17) + +Features: + +- Add internationalization support (#5) +- Can now follow and import music from remote libraries (#136, #137) + +Enhancements: + +- Added a i18n-extract yarn script to extract strings to PO files (#162) +- User admin now includes signup and last login dates (#148) +- We now use a proper user agent including instance version and url during + outgoing requests + +### Federation is here! + +This is for real this time, and includes: + +- Following other Funkwhale libraries +- Importing tracks from remote libraries (tracks are hotlinked, and only cached for a short amount of time) +- Searching across federated catalogs + +Note that by default, federation is opt-in, on a per-instance basis: +instances will request access to your catalog, and you can accept or refuse +those requests. You can also revoke the access at any time. + +Documentation was updated with relevant instructions to use and benefit +from this new feature: https://docs.funkwhale.audio/federation.html + +### Preparing internationalization + +Funkwhale's front-end as always been english-only, and this is a barrier +to new users. The work make Funkwhale's interface translatable was started +in this release by Baptiste. Although nothing is translated yet, +this release includes behind the stage changes that will make it possible in +the near future. + +Many thank to Baptiste for the hard work and for figuring out a proper solution +to this difficult problem. + +### Upgrade path + +In addition to the usual instructions from +https://docs.funkwhale.audio/upgrading.html, non-docker users will have +to setup an additional systemd unit file for recurrent tasks. + +This was forgotten in the deployment documentation, but recurrent tasks, +managed by the celery beat process, will be needed more and more in subsequent +releases. Right now, we'll be using to clear the cache for federated music files +and keep disk usage to a minimum. + +In the future, they will also be needed to refetch music metadata or federated +information periodically. + +Celery beat can be enabled easily: + +```sh +curl -L -o "/etc/systemd/system/funkwhale-beat.service" "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/develop/deploy/funkwhale-beat.service" +# Also edit /etc/systemd/system/funkwhale.target +# and ensure the Wants= line contains the following: +# Wants=funkwhale-server.service funkwhale-worker.service funkwhale-beat.service +nano /etc/systemd/system/funkwhale.target +# reload configuration +systemctl daemon-reload +``` + +Docker users already have celerybeat enabled. + +## 0.8 (2018-04-02) + +Features: + +- Add a detail page for radios (#64) +- Implemented page title binding (#1) +- Previous Track button restart playback after 3 seconds (#146) + +Enhancements: + +- Added credits to Francis Gading for the logotype (#101) +- API endpoint for fetching instance activity and updated timeline to use this + new endpoint (#141) +- Better error messages in case of missing environment variables (#140) +- Implemented a @test@yourfunkwhaledomain bot to ensure federation works + properly. Send it "/ping" and it will answer back :) +- Queue shuffle now apply only to tracks after the current one (#97) +- Removed player from queue tab and consistently show current track in queue + (#131) +- We now restrict some usernames from being used during signup (#139) + +Bugfixes: + +- Better error handling during file import (#120) +- Better handling of utf-8 filenames during file import (#138) +- Converted favicon from .ico to .png (#130) +- Upgraded to Python 3.6 to fix weird but harmless weakref error on django task + (#121) + +Documentation: + +- Documented the upgrade process (#127) + +### Preparing for federation + +Federation of music libraries is one of the most asked feature. +While there is still a lot of work to do, this version includes +the foundation that will enable funkwhale servers to communicate +between each others, and with other federated software, such as +Mastodon. + +Funkwhale will use ActivityPub as it's federation protocol. + +In order to prepare for federation (see #136 and #137), new API endpoints +have been added under /federation and /.well-known/webfinger. + +For these endpoints to work, you will need to update your nginx configuration, +and add the following snippets: + +```nginx +location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/federation/; +} +location /.well-known/webfinger { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/.well-known/webfinger; +} +``` + +This will ensure federation endpoints will be reachable in the future. +You can of course skip this part if you know you will not federate your instance. + +A new `FEDERATION_ENABLED` env var have also been added to control whether +federation is enabled or not on the application side. This settings defaults +to True, which should have no consequences at the moment, since actual +federation is not implemented and the only available endpoints are for +testing purposes. + +Add `FEDERATION_ENABLED=false` to your .env file to disable federation +on the application side. + +To test and troubleshoot federation, we've added a bot account. This bot is available at @test@yourinstancedomain, +and sending it "/ping", for example, via Mastodon, should trigger +a response. + +## 0.7 (2018-03-21) + +Features: + +- Can now filter artists and albums with no listenable tracks (#114) +- Improve the style of the sidebar to make it easier to understand which tab is + selected (#118) +- On artist page, albums are not sorted by release date, if any (#116) +- Playlists are here \o/ :tada: (#3, #93, #94) +- Use django-cacheops to cache common ORM requests (#117) + +Bugfixes: + +- Fixed broken import request admin (#115) +- Fixed forced redirection to login event with + API_AUTHENTICATION_REQUIRED=False (#119) +- Fixed position not being reset properly when playing the same track + multiple times in a row +- Fixed synchronized start/stop radio buttons for all custom radios (#103) +- Fixed typo and missing icon on homepage (#96) + +Documentation: + +- Up-to-date and complete development and contribution instructions in + README.rst (#123) + +## 0.6.1 (2018-03-06) + +Features: + +- Can now skip acoustid on file import with the --no-acoustid flag (#111) + +Bugfixes: + +- Added missing batch id in output during import (#112) +- Added some feedback on the play button (#100) +- Smarter pagination which takes a fixed size (#84) + +Other: + +- Completely removed django-cachalot from the codebase (#110). You can safely + remove the CACHALOT_ENABLED setting from your .env file + +## 0.6 (2018-03-04) + +Features: + +- Basic activity stream for listening and favorites (#23) +- Switched to django-channels and daphne for serving HTTP and websocket (#34) + +### Upgrades notes + +This version contains breaking changes in the way funkwhale is deployed, +please read the notes carefully. + +### Instance timeline + +A new "Activity" page is now available from the sidebar, where you can +browse your instance activity. At the moment, this includes other users +favorites and listening, but more activity types will be implemented in the +future. + +Internally, we implemented those events by following the Activity Stream +specification, which will help us to be compatible with other networks +in the long-term. + +A new settings page has been added to control the visibility of your activity. +By default, your activity will be browsable by anyone on your instance, +but you can switch to a full private mode where nothing is shared. + +The setting form is available in your profile. + +### Switch from gunicorn to daphne + +This release include an important change in the way we serve the HTTP API. +To prepare for new realtime features and enable websocket support in Funkwhale, +we are now using django-channels and daphne to serve HTTP and websocket traffic. + +This replaces gunicorn and the switch should be easy assuming you +follow the upgrade process described below. + +If you are using docker, please remove the command instruction inside the +api service, as the up-to-date command is now included directly in the image +as the default entry point: + +```yaml +services: + api: + restart: unless-stopped + image: funkwhale/funkwhale:${FUNKWHALE_VERSION:-latest} + command: ./compose/django/gunicorn.sh # You can remove this line +``` + +On non docker setups, you'll have to update the `[Service]` block of your +funkwhale-server systemd unit file to launch the application server using daphne instead of gunicorn. + +The new configuration should be similar to this: + +```ini +[Service] +User=funkwhale +# adapt this depending on the path of your funkwhale installation +WorkingDirectory=/srv/funkwhale/api +EnvironmentFile=/srv/funkwhale/config/.env +ExecStart=/usr/local/bin/daphne -b ${FUNKWHALE_API_IP} -p ${FUNKWHALE_API_PORT} config.asgi:application +``` + +Ensure you update funkwhale's dependencies as usual to install the required +packages. + +On both docker and non-docker setup, you'll also have to update your nginx +configuration for websocket support. Ensure you have the following blocks +included in your virtualhost file: + +```nginx +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + # ... + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; +} +``` + +Remember to reload your nginx server after the edit. + +## 0.5.4 (2018-02-28) + +Features: + +- Now stop running radio when clearing queue (#98) + +Bugfixes: + +- Fixed queue skipping tracks (#91) +- Now loop properly on queue when we only have one track (#95) + +## 0.5.3 (2018-02-27) + +Features: + +- Added admin interface for radios, track files, favorites and import requests (#80) +- Added basic instance stats on /about (#82) +- Search now unaccent letters for queries like "The Dø" or "Björk" yielding more results (#81) + +Bugfixes: + +- Always use username in sidebar (#89) +- Click event outside of player icons (#83) +- Fixed broken import because of missing transaction +- Now always load next radio track on last queue track ended (#87) +- Now exclude tracks without file from radio candidates (#88) +- skip to next track properly on 40X errors (#86) + +Other: + +- Switched to towncrier for changelog management and compilation + +## 0.5.2 (2018-02-26) + +- Fixed broken file import due to wrong url (#73) +- More accurate mimetype detection +- Fixed really small size on small screens +- Added masonry layout for artists, requests and radios (#68) +- We now have a favicon! +- Fixed truncated play icon (#65) + +## 0.5.1 (2018-02-24) + +- Front: Fixed broken ajax call on radio builder (#69) +- Front: Shuffle now restart next track from beginning (#70) +- Front: volume slider should now have the same style everywhere (#72) + +## 0.5 (2018-02-24) + +- Front: Now reset player colors when track has no cover (#46) +- Front: play button now disabled for unplayable tracks +- API: You can now enable or disable registration on the fly, via a preference (#58) +- Front: can now signup via the web interface (#35) +- Front: Fixed broken redirection on login +- Front: Fixed broken error handling on settings and login form + +About page: + +There is a brand new about page on instances (/about), and instance +owner can now provide a name, a short and a long description for their instance via the admin (/api/admin/dynamic_preferences/globalpreferencemodel/). + +Transcoding: + +Basic transcoding is now available to/from the following formats : ogg and mp3. + +_This is still an alpha feature at the moment, please report any bug._ + +This relies internally on FFMPEG and can put some load on your server. +It's definitely recommended you setup some caching for the transcoded files +at your webserver level. Check the the example nginx file at deploy/nginx.conf +for an implementation. + +On the frontend, usage of transcoding should be transparent in the player. + +Music Requests: + +This release includes a new feature, music requests, which allows users +to request music they'd like to see imported. +Admins can browse those requests and mark them as completed when +an import is made. + +## 0.4 (2018-02-18) + +- Front: ambiant colors in player based on current track cover (#59) +- Front: simplified front dev setup thanks to webpack proxy (#59) +- Front: added some unittests for the store (#55) +- Front: fixed broken login redirection when 401 +- Front: Removed autoplay on page reload +- API: Added a /instance/settings endpoint +- Front: load /instance/settings on page load +- Added settings to report JS and Python error to a Sentry instance + This is disabled by default, but feel free to enable it if you want + to help us by sending your error reports :) (#8) + +## 0.3.5 (2018-01-07) + +- Smarter BACKEND_URL in frontend + +## 0.3.4 (2018-01-07) + +- Fixed wrong URL construction in ajax call + +## 0.3.3 (2018-01-07) + +- Users can now create their own dynamic radios (#51) + +## 0.3.2 + +- Fixed an issue in the main dockerfile + +## 0.3.1 + +- Revamped all import logic, everything is more tested and consistent +- Can now use Acoustid in file imports to automatically grab metadata from musicbrainz +- Brand new file import wizard + +## 0.2.7 + +- Shortcuts: can now use the `f` shortcut to toggle the currently playing track + as a favorite (#53) +- Shortcuts: avoid collisions between shortcuts by using the exact modifier (#53) +- Player: Added looping controls and shortcuts (#52) +- Player: Added shuffling controls and shortcuts (#52) +- Favorites: can now modify the ordering of track list (#50) +- Library: can now search/reorder results on artist browsing view (#50) +- Upgraded celery to 4.1, added endpoint logic for fingerprinting audio files +- Fixed #56: invalidate tokens on password change, also added change password form +- Fixed #57: now refresh jwt token on page refresh +- removed ugly dividers in batch import list +- Fixed a few padding issues +- Now persist/restore queue/radio/player state automatically +- Removed old broken imports +- Now force tests paths +- Fixed #54: Now use pytest everywhere \o/ +- Now use vuex to manage state for favorites +- Now use vuex to manage state for authentication +- Now use vuex to manage state for player/queue/radios + +## 0.2.6 (2017-12-15) + +- Fixed broken Dockerfile + +## 0.2.5 (2017-12-15) + +Features: + +- Import: can now specify search template when querying import sources (#45) +- Login form: now redirect to previous page after login (#2) +- 404: a decent 404 template, at least (#48) + +Bugfixes: + +- Player: better handling of errors when fetching the audio file (#46) +- Csrf: default CSRF_TRUSTED_ORIGINS to ALLOWED_HOSTS to avoid Csrf issues on admin (#49) + +Tech: + +- Django 2 compatibility, lot of packages upgrades (#47) + +## 0.2.4 (2017-12-14) + +Features: + +- Models: now store release group mbid on Album model (#7) +- Models: now bind import job to track files (#44) + +Bugfixes: + +- Library: fixen broken "play all albums" button on artist cards in Artist browsing view (#43) diff --git a/docs/conf.py b/docs/conf.py old mode 100755 new mode 100644 index 6bfe12bf6..59c467392 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,58 +1,71 @@ -#!/usr/bin/env python3 -# -# funkwhale documentation build configuration file, created by -# sphinx-quickstart on Sun Jun 25 18:49:23 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# # All configuration values have a default; values that are commented out # serve to show the default. - -import datetime - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. # +# https://www.sphinx-doc.org/en/master/usage/configuration.html + import os -import sys +from datetime import datetime +from pathlib import Path -sys.path.insert(0, os.path.abspath("../api")) -sys.path.insert(0, os.path.abspath("../api/config")) +from sphinx.application import Sphinx +from sphinx.util import logging + +import funkwhale_api + +logger = logging.getLogger(__name__) -import funkwhale_api # NOQA FUNKWHALE_CONFIG = { - "FUNKWHALE_URL": "mypod.funkwhale", - "FUNKWHAL_PROTOCOL": "https", - "DATABASE_URL": "postgres://localhost:5432/db", + "FUNKWHALE_URL": "https://pod.funkwhale", + "DATABASE_URL": "postgres://localhost:5432/funkwhale", "AWS_ACCESS_KEY_ID": "my_access_key", "AWS_SECRET_ACCESS_KEY": "my_secret_key", "AWS_STORAGE_BUCKET_NAME": "my_bucket", } -for key, value in FUNKWHALE_CONFIG.items(): - os.environ[key] = value +os.environ.update(**FUNKWHALE_CONFIG) + # -- General configuration ------------------------------------------------ -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' +# General information about the project. +year = datetime.now().year +project = "funkwhale" +copyright = f"{year}, The Funkwhale Collective" +author = "The Funkwhale Collective" +version = funkwhale_api.__version__ +release = version -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ - "sphinx.ext.graphviz", - "sphinx.ext.autodoc", - "myst_parser", - "sphinx_design", - "sphinxcontrib.mermaid", "sphinx_copybutton", + "sphinx_design", + "sphinx.ext.autodoc", + "sphinx.ext.graphviz", + "sphinxcontrib.mermaid", + "myst_parser", ] + +source_suffix = ".md" +include_patterns = [ + "_static/**", + "*_documentation/**", + "*.md", + "**/*.md", + "*.rst", + "logo.svg", +] +exclude_patterns = [ + "_build", + "_scripts", + ".venv", + ".DS_Store", + "Thumbs.db", + "*.py", + "*.sh", +] +templates_path = ["_templates"] + +root_doc = "index" + +# autodoc autodoc_mock_imports = [ "celery", "django_auth_ldap", @@ -61,20 +74,13 @@ autodoc_mock_imports = [ "rest_framework", "drf_spectacular", ] + +# sphinx +pygments_style = "sphinx" add_module_names = False -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] +todo_include_todos = False -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = ".md" - -# The root toctree document. -root_doc = "index" - -# Enable colon fences +# myst myst_enable_extensions = [ "colon_fence", "attrs_block", @@ -82,54 +88,21 @@ myst_enable_extensions = [ "fieldlist", "deflist", ] - -# Autogenerate anchors - myst_heading_anchors = 3 -# General information about the project. -year = datetime.datetime.now().year -project = "funkwhale" -copyright = f"{year}, The Funkwhale Collective" -author = "The Funkwhale Collective" -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# Read version from the API -version = funkwhale_api.__version__ -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. +# internationalization +locale_dirs = ["locales/"] +gettext_compact = False language = "en" -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".venv"] +# copybutton +copybutton_exclude = ".linenos, .gp" -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False # -- Options for HTML output ---------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# html_theme = "sphinx_rtd_theme" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} html_context = { "display_gitlab": True, "gitlab_host": "dev.funkwhale.audio", @@ -141,61 +114,37 @@ html_context = { } html_logo = "logo.svg" html_favicon = "../front/public/favicon.ico" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] -html_css_files = [ - "css/translation-hint.css", -] -html_js_files = [ - "js/translation-hint.js", -] +html_css_files = ["css/translation-hint.css"] +html_js_files = ["js/translation-hint.js"] # -- Options for HTMLHelp output ------------------------------------------ -# Output file base name for HTML help builder. htmlhelp_basename = "funkwhaledoc" - # -- Options for LaTeX output --------------------------------------------- -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). latex_documents = [ ( root_doc, "funkwhale.tex", - "funkwhale Documentation", + "Funkwhale Documentation", "The Funkwhale Collective", "manual", ) ] - # -- Options for manual page output --------------------------------------- -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(root_doc, "funkwhale", "funkwhale Documentation", [author], 1)] - +man_pages = [ + ( + root_doc, + "funkwhale", + "Funkwhale Documentation", + [author], + 1, + ) +] # -- Options for Texinfo output ------------------------------------------- @@ -206,7 +155,7 @@ texinfo_documents = [ ( root_doc, "funkwhale", - "funkwhale Documentation", + "Funkwhale Documentation", author, "funkwhale", "One line description of project.", @@ -214,49 +163,35 @@ texinfo_documents = [ ) ] -# -- Build legacy redirect files ------------------------------------------- +# -- Setup legacy redirects ----------------------------------------------- -# Define list of redirect files to be build in the Sphinx build process - -redirect_list = [] -with open("redirects.txt") as fp: - data_list = [tuple(line.strip().split(",")) for line in fp] - -# Generate redirect template - -redirect_template = """\ +REDIRECT_TEMPLATE = """\ <html> <head> - <meta http-equiv="refresh" content="1; url={new}" /> + <meta http-equiv="refresh" content="1; url={url}" /> <script> - window.location.href = "{new}" + window.location.href = "{url}" </script> </head> </html> """ -# Tell Sphinx to copy the files +redirects_file = Path("redirects.txt") +redirects = [ + tuple(line.strip().split(", ")) + for line in redirects_file.read_text(encoding="utf-8").splitlines() +] -def copy_legacy_redirects(app, docname): +def copy_legacy_redirects(app: Sphinx, docname): if app.builder.name == "html": - for html_src_path, new in data_list: - page = redirect_template.format(new=new) - target_path = app.outdir + "/" + html_src_path - if not os.path.exists(os.path.dirname(target_path)): - os.makedirs(os.path.dirname(target_path)) - with open(target_path, "w") as f: - f.write(page) + for src_path, dest_url in redirects: + content = REDIRECT_TEMPLATE.format(url=dest_url) + + redirect_path = Path(app.outdir) / src_path + redirect_path.parent.mkdir(parents=True, exist_ok=True) + redirect_path.write_text(content, encoding="utf-8") def setup(app): app.connect("build-finished", copy_legacy_redirects) - - -# Internationalization settings -locale_dirs = ["locales/"] -gettext_compact = False - -# Don't copy prompts with copybutton - -copybutton_exclude = ".linenos, .gp" diff --git a/docs/contributor/documentation.md b/docs/contributor/documentation.md index 16c4b3f22..923df1257 100644 --- a/docs/contributor/documentation.md +++ b/docs/contributor/documentation.md @@ -15,7 +15,7 @@ We try to document Funkwhale as thoroughly as possible to make it easy for users To work on Funkwhale's documentation, you need the following: - [Git](https://git-scm.com): our version control system -- [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/): used to run our development environment +- [Poetry](https://python-poetry.org/): A python packaging tool and dependency manager - A text editor of your choice ## Tooling @@ -36,31 +36,7 @@ Here are some basic rules to follow: ## Local setup -We provide a docker container for our documentation to make it easy to work on docs with a real-time preview. Once you install [Docker](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/), do the following to get a live preview: - -1. Create a dummy `.env` file - - ```{code-block} sh - touch .env - ``` - -2. Create a dummy federation network - - ```{code-block} sh - sudo docker network create federation - ``` - -3. Build the container - - ```{code-block} sh - sudo docker compose -f dev.yml build docs - ``` - -4. Run the container - - ```{code-block} sh - sudo docker compose -f dev.yml up docs - ``` +We provide a fully automated setup for a local live-preview of your changes. Make sure you meet the requirements outlined above and run `make dev`. A real-time preview of the documentation is available on `http://0.0.0.1:8001` diff --git a/docs/developer/api/index.md b/docs/developer/api/index.md index 63bfef00b..42bfeb5cf 100644 --- a/docs/developer/api/index.md +++ b/docs/developer/api/index.md @@ -14,5 +14,6 @@ API explorer<https://docs.funkwhale.audio/swagger/> authentication rate-limit subsonic +v2-overview ``` diff --git a/docs/developer/api/v2-overview.md b/docs/developer/api/v2-overview.md new file mode 100644 index 000000000..1098d300f --- /dev/null +++ b/docs/developer/api/v2-overview.md @@ -0,0 +1,607 @@ +# API v2 overview + +To ensure that Funkwhale's v2 REST API is consistent and scalable, we need to ensure that certain rules are followed when implementing endpoints. The basic rules are covered in this document. + +## Appropriate naming conventions + +In keeping with best practice, Funkwhale's API follows these naming conventions: + +1. All endpoints should start with the **collection** that the endpoint represents. For example: `artist`, `release`, `recording`. +2. The specificity of an endpoint's target should be set by the path. For example: `artist/{guid}`. +3. Any endpoints that represent multi-word entities should be rendered in kebab case (`kebab-case`). For example: `/api/v2/release-group` +4. Endpoint names should only ever be _nouns_. Any verb representing the action should be described by the HTTP action. For example: `GET`, `POST`, `PATCH`, `DELETE` +5. Multi-word properties in entity representations should be rendered in camel case (`camelCase`) to maintain consistency with other endpoints such as nodeinfo +6. Multi-word parameters in API queries should be rendered in in snake case (`snake_case`) to avoid issues with URL formatting + +## Generic entity naming conventions + +To make Funkwhale more scalable, entities should be given more generic names. For example: instead of using music-specific naming conventions such as `Album`, a generic term like `Release` should be substituted. Since many audio properties can be referred to as a `Release` (such as albums, audiobooks, DJ sets, podcast series), this naming convention can scale where the old one could not. + +Where appropriate, Funkwhale should follow the same conventions [put forward by MusicBrainz](https://musicbrainz.org/doc/MusicBrainz_Entity). These entities are well-defined generic concepts with room for extension, and following them makes Funkwhale's interactions with MusicBrainz much simpler. + +## Deprecation of database IDs + +Several endpoints in API v1 use database IDs (integers) to refer to items such as artists and tracks. However, it's best practice to use GUIDs wherever a unique identifier is needed. API v2 should always use GUIDs to refer to items rather than relying on the database IDs. + +## Atomic transactions + +Per REST conventions, all requests must either **succeed** or **fail** as a whole. This means that if a `POST` request is made and any part of the process fails, the entire transaction must roll back and no changes can be committed. The requester must be informed of the issue with a meaningful error message. + +To facilitate this, `POST` and `PATCH` actions must target **one item at a time**. Instead of allowing users to create multiple items in a single `POST` request represented by an array, the Funkwhale API should instead accept only one object in any request. While this increases the number of calls that must be sent to the API, it also increases Funkwhale's ability to communicate any issues with the requester in a timely manner. + +## Serializer inheritance + +Serializers representing Funkwhale entities should always inherit from a _minimal_ (`Base`) serializer. This ensures that when new critical information is added to a serializer it is inherited. + +For example: a `BaseRelease` serializes only the most essential information about a release for displaying information about it. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:44:10.981Z", + "urls": { + "source": "string", + "original": "string" + } + } +} +``` + +The `Release` serializer inherits all information from the `BaseRelease` serializer and appends additional information pertaining to the release, including the creation date, release date, and associated release group. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:43:07.746Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "creationDate": "2023-11-19T01:43:07.746Z", + "releaseDate": "2023-11-19", + "trackCount": 0, + "duration": 0, + "attributedTo": { + "fid": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + }, + "local": true, + "releaseGroup": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "primaryType": "album", + "releaseVersions": 0 + }, + "tracks": [ + { + "recording": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "entryNumber": 0, + "position": 0 + } + ] +} +``` + +By maintaining this `Base` serializer, we can ensure any essential information is contained in both the `Base` representation and the full complex representation shown on dedicated endpoints. + +When displaying interface elements such as cards or search results, the `Base` version of the serializer should be used. For example: + +- When calling for a list of `Release` objects to render cards, the `BaseRelease` serializer is used (`/api/v2/releases`) +- When navigating to the overview page for a release, the full `Release` serializer is used (`/api/v2/releases/{guid}`) + +## Reduced duplication in serializers + +Funkwhale API v1 has a lot of duplicated data in certain responses due to how the serializers are configured. For example: + +- A `Listening` object contains the following information: + - The `User` who recorded the `Listening` + - The `Actor` of the `User` + - The `Track`. This contains: + - The `Artist` attributed to the `Track` + - The `Album` that contains the `Track`. This contains: + - The `Artist` attributed to the `Album` + +Since the `Listening` serializer inherits the full serializer for each of these entities, the resulting response is large and contains a lot of duplicated information. + +```json +{ + "id": 52808, + "user": { + "id": 1, + "username": "doctorworm", + "name": "", + "date_joined": "2018-12-12T21:03:28Z", + "avatar": { + "uuid": "d0af4fe3-d420-4e98-87d3-2d1cc3f7cdc5", + "size": 3834756, + "mimetype": "image/jpeg", + "creation_date": "2022-12-28T09:43:20.460502Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=8167aae2f71896192ec718ff7849e2828b3d1a04c75a7a1b02e8e5a36d08e582", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a035aead373e5537aa94af8fe29b7fc9ab5c0edcd4d5d1c15a15ced420ddfbae", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/87/b0/1d/adjust_portrait_0000_img00465_ciaran_a-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=49f25fb7cccd0a617579b74f59ab929dbac76838c3c57310d9058b205c5bd7ed" + } + } + }, + "track": { + "artist": { + "id": 14, + "fid": "https://tanukitunes.com/federation/music/artists/728f9e77-a553-41d6-9d83-e5d78fcd2563", + "mbid": "183d6ef6-e161-47ff-9085-063c8b897e97", + "name": "They Might Be Giants", + "creation_date": "2018-12-13T00:08:02.252126Z", + "modification_date": "2020-03-19T15:05:32.179932Z", + "is_local": true, + "content_category": "music", + "description": { + "text": "They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.", + "content_type": "text/markdown", + "html": "<p>They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.</p>" + }, + "attachment_cover": { + "uuid": "5e918c69-9a28-4dda-b2ba-bec9ed7ade97", + "size": 450338, + "mimetype": "image/jpeg", + "creation_date": "2020-01-17T17:13:28.131126Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/9f/47/fb/tmbg.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d80640f390c9984a942a951c06a28456efafe6136d2dee53b001e551b8836ec4", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a0770c764e2242ee203a71f77be6a3de782050bf46b03683dc883be27c679e65", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=14d604c022fc2b923e8c124c988a5b855e99f35f8a0bf598e9fe7677096fe990" + } + }, + "channel": null + }, + "album": { + "id": 51, + "fid": "https://tanukitunes.com/federation/music/albums/d630422f-ce40-4f24-98d1-33dda13248dd", + "mbid": "459dd621-8f47-4af6-97f7-2f925e685853", + "title": "The Else", + "artist": { + "id": 14, + "fid": "https://tanukitunes.com/federation/music/artists/728f9e77-a553-41d6-9d83-e5d78fcd2563", + "mbid": "183d6ef6-e161-47ff-9085-063c8b897e97", + "name": "They Might Be Giants", + "creation_date": "2018-12-13T00:08:02.252126Z", + "modification_date": "2020-03-19T15:05:32.179932Z", + "is_local": true, + "content_category": "music", + "description": { + "text": "They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.", + "content_type": "text/markdown", + "html": "<p>They Might Be Giants (often abbreviated as TMBG) is an American alternative rock band formed in 1982 by John Flansburgh and John Linnell. During TMBG's early years, Flansburgh and Linnell frequently performed as a duo, often accompanied by a drum machine. In the early 1990s, TMBG expanded to include a backing band. The duo's current backing band consists of Marty Beller, Dan Miller, and Danny Weinkauf. The group is known for their uniquely experimental and absurdist style of alternative music, typically utilising surreal, humorous lyrics and unconventional instruments in their songs. Over their career, they have found success on the modern rock and college radio charts. They have also found success in children's music, and in theme music for several television programs and films.</p>" + }, + "attachment_cover": { + "uuid": "5e918c69-9a28-4dda-b2ba-bec9ed7ade97", + "size": 450338, + "mimetype": "image/jpeg", + "creation_date": "2020-01-17T17:13:28.131126Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/attachments/9f/47/fb/tmbg.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=d80640f390c9984a942a951c06a28456efafe6136d2dee53b001e551b8836ec4", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a0770c764e2242ee203a71f77be6a3de782050bf46b03683dc883be27c679e65", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/attachments/9f/47/fb/tmbg-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=14d604c022fc2b923e8c124c988a5b855e99f35f8a0bf598e9fe7677096fe990" + } + }, + "channel": null + }, + "release_date": "2007-05-15", + "cover": { + "uuid": "8bcc8c7f-0059-4225-ae1e-6472aa918abc", + "size": null, + "mimetype": "image/jpeg", + "creation_date": "2019-11-27T17:08:48.103220Z", + "urls": { + "source": null, + "original": "https://fra1.digitaloceanspaces.com/tanukitunes/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a89794b6a107a1bb39e4e4bf161f895969c37f606ba07aac7cc7b41d2489e376", + "medium_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853-crop-c0-5__0-5-200x200-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f14d528c7305054d702e62cd8f2c62aad7eb0afcf3e2088b0678d012cf8ac44c", + "large_square_crop": "https://fra1.digitaloceanspaces.com/tanukitunes/__sized__/albums/covers/2018/12/13/b459dd621-8f47-4af6-97f7-2f925e685853-crop-c0-5__0-5-600x600-95.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=CKT5DNTMO5K4DPLYNTIY%2F20231118%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T132814Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=e32aefab24ac6ac7c382d34291d10c9af515c33c85f01f8f059d5d58df8eca9f" + } + }, + "creation_date": "2018-12-13T00:17:38.395691Z", + "is_local": true, + "tracks_count": 13 + }, + "uploads": [ + { + "uuid": "d19b0cfe-427d-4f70-8a77-3906e8f7a7a3", + "listen_url": "/api/v1/listen/fd003ce3-83bd-4231-ab6b-13c59f2e85ab/?upload=d19b0cfe-427d-4f70-8a77-3906e8f7a7a3", + "size": 3502417, + "duration": 197, + "bitrate": 192000, + "mimetype": "audio/ogg", + "extension": "ogg", + "is_local": true + } + ], + "listen_url": "/api/v1/listen/fd003ce3-83bd-4231-ab6b-13c59f2e85ab/", + "tags": [], + "attributed_to": null, + "id": 781, + "fid": "https://tanukitunes.com/federation/music/tracks/fd003ce3-83bd-4231-ab6b-13c59f2e85ab", + "mbid": "5724b81c-f32c-4375-9bdc-fce4c87fc4ed", + "title": "With the Dark", + "creation_date": "2018-12-13T00:17:53.119857Z", + "is_local": true, + "position": 7, + "disc_number": null, + "downloads_count": 4, + "copyright": null, + "license": null, + "cover": null, + "is_playable": true + }, + "creation_date": "2023-11-17T15:43:46.062258Z", + "actor": { + "fid": "https://tanukitunes.com/federation/actors/doctorworm", + "url": "https://tanukitunes.com/@doctorworm", + "creation_date": "2018-12-12T22:12:18Z", + "summary": null, + "preferred_username": "doctorworm", + "name": "doctorworm", + "last_fetch_date": "2022-12-20T15:38:06.651418Z", + "domain": "tanukitunes.com", + "type": "Person", + "manually_approves_followers": false, + "full_username": "doctorworm@tanukitunes.com", + "is_local": true + } +} +``` + +To avoid this, serializers should follow this pattern: + +- Only full serializers should reference other entities +- Only the `Base` serializer for an entity should be referenced + +Using this format, the resulting `/api/v2/history/listenings` endpoint would contain the following: + +- `Listening` objects containing the following information: + - The `BaseUser` who recorded the `Listening` + - The `BaseActor` of the `User` + - The `BaseRecording` (the recording/track the user listened to) including the associated `ArtistCredit` + +In this format, no `Base` serializer ever references another entity. This reduces the complexity of the result while still providing all required information. + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "createdDate": "2023-11-18T13:58:25.187Z", + "recording": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "name": "string", + "playable": true, + "local": true, + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-18T13:58:25.187Z", + "urls": { + "source": "string", + "original": "string" + } + } + }, + "user": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "username": "string", + "fullUsername": "string", + "preferredUsername": "string", + "avatar": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-18T13:58:25.187Z", + "urls": { + "source": "string", + "original": "string" + } + } + }, + "actor": { + "fid": "string", + "url": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + } +} +``` + +## Appropriate use of subpaths + +Most endpoints in API v1 return large amounts of information and terminate at the collection level or one subpath deeper. API v2 should be designed to split the responsibilities of endpoints into more specific subpath operations. + +Entities related to an item such as a collection, artist, release, or recording should be delegated to subpath queries such as `/api/v2/collections/{guid}/artists` rather than relying on filtering large result sets. While this increases the number of calls made by the frontend, it has the following positive impacts: + +- The API follows REST conventions more closely +- Each call can be repeated by the frontend at a much lower cost. This can be useful for refreshing content or updating components +- It dramatically decreases the APIs complexity and makes the resulting code much more maintainable + +### Case study + +In Funkwhale API v1, calling the `/api/v1/artists` endpoint returns a list of `ArtistWithAlbums` objects. These objects contain a huge amount of information, some of which is duplicated. + +```json +{ + "count": 123, + "next": "http://api.example.org/accounts/?page=4", + "previous": "http://api.example.org/accounts/?page=2", + "results": [ + { + "albums": [ + { + "tracks_count": 0, + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "size": 0, + "mimetype": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "urls": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + } + }, + "is_playable": true, + "is_local": true, + "id": 0, + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "title": "string", + "artist": 0, + "release_date": "2023-11-19", + "creation_date": "2023-11-19T14:07:15.065Z" + } + ], + "tags": ["string"], + "attributed_to": { + "fid": "string", + "url": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "summary": "string", + "preferred_username": "string", + "name": "string", + "last_fetch_date": "2023-11-19T14:07:15.065Z", + "domain": "string", + "type": "Person", + "manually_approves_followers": true, + "full_username": "string", + "is_local": true + }, + "channel": { + "uuid": "string", + "actor": { + "full_username": "string", + "preferred_username": "string", + "domain": "string" + } + }, + "tracks_count": 0, + "id": 0, + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "content_category": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "is_local": true, + "cover": { + "uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "size": 0, + "mimetype": "string", + "creation_date": "2023-11-19T14:07:15.065Z", + "urls": { + "additionalProp1": "string", + "additionalProp2": "string", + "additionalProp3": "string" + } + } + } + ] +} +``` + +While this can be useful for minimizing the number of calls made to the API, it negatively impacts the performance of the endpoint. + +To address this, Funkwhale API v2 should split this up into the following endpoints: + +- `/api/v2/artists`: returns a list of `BaseArtist` objects + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "contentCategory": "music", + "local": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:22:37.246Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "tags": ["string"] + } + ] +} +``` + +- `/api/v2/artists/{guid}`: returns a full `Artist` object + +```json +{ + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "contentCategory": "music", + "local": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:21:28.768Z", + "urls": { + "source": "string", + "original": "string" + } + }, + "tags": ["string"], + "creationDate": "2023-11-19T01:21:28.768Z", + "recordingCount": 0 +} +``` + +- `/api/v2/artists/{guid}/releases`: returns a list of `BaseRelease` objects accredited to the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "mbid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "artistCredit": { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + }, + "playable": true, + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:21:51.779Z", + "urls": { + "source": "string", + "original": "string" + } + } + } + ] +} +``` + +- `/api/v2/artists/{guid}/recordings`: returns a list of `BaseRecording` objects accredited to the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "fid": "string", + "name": "string", + "playable": true, + "local": true, + "artistCredit": [ + { + "name": "string", + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "joinPhrase": "string" + } + ], + "cover": { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "mimetype": "string", + "size": 0, + "creationDate": "2023-11-19T01:22:37.278Z", + "urls": { + "source": "string", + "original": "string" + } + } + } + ] +} +``` + +- `/api/v2/artists/{guid}/collections`: returns a list of `BaseCollections` that contain the artist + +```json +{ + "total": 0, + "next": "string", + "previous": "string", + "results": [ + { + "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "name": "string", + "local": true, + "owner": { + "fid": "string", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": true + } + } + ] +} +``` + +This pattern can be repeated for other content types. diff --git a/docs/get-releases-json.py b/docs/get-releases-json.py deleted file mode 100755 index a668dc104..000000000 --- a/docs/get-releases-json.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -import json -import subprocess -from distutils.version import StrictVersion - - -def get_versions(): - output = subprocess.check_output( - ["git", "tag", "-l", "--format=%(creatordate:iso-strict)|%(refname:short)"] - ) - tags = [] - - for line in output.decode().splitlines(): - try: - date, tag = line.split("|") - except ValueError: - continue - - if not date or not tag: - continue - - tags.append({"id": tag, "date": date}) - valid = [] - for tag in tags: - try: - StrictVersion(tag["id"]) - valid.append(tag) - except ValueError: - continue - - return sorted(valid, key=lambda tag: StrictVersion(tag["id"]), reverse=True) - - -def main(latest=False): - versions = get_versions() - if latest: - print(versions[0]["id"]) - else: - data = {"count": len(versions), "releases": versions} - print(json.dumps(data, sort_keys=True, indent=2)) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - """ - Compile release data and output in in JSON format - """ - ) - parser.add_argument( - "-l", - "--latest", - action="store_true", - help="Only print the latest version then exit", - ) - args = parser.parse_args() - main(latest=args.latest) diff --git a/docs/glossary.md b/docs/glossary.md index b19921863..68375ae55 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -2,59 +2,72 @@ ## Funkwhale glossary -```{glossary} - +{.glossary} Pod - A pod is an instance of Funkwhale running on a server. Pods can communicate with one another across the {term}`Fediverse`. +: A pod is an instance of Funkwhale running on a server. Pods can communicate with one another across the {term}`Fediverse`. Authenticated - Users who have an account on a Funkwhale pod. These users provide their authentication information when accessing content. +: Users who have an account on a Funkwhale pod. These users provide their authentication information when accessing content. Anonymous - Users who do not have an account on a Funkwhale pod. These users don't provide any authentication when accessing content. +: Users who do not have an account on a Funkwhale pod. These users don't provide any authentication when accessing content. Permissions - Additional rights that an administrator/moderator can grant to a user. Permissions grant access to menus and actions in Funkwhale. +: Additional rights that an administrator/moderator can grant to a user. Permissions grant access to menus and actions in Funkwhale. - Available permissions: +Available permissions: - - {guilabel}`Moderation` – Grants access to the {guilabel}`Moderation` menu. Enables the user to moderate users, domains, and the allow-list. - - {guilabel}`Manage library` – Grants access to the {guilabel}`Library` menu. Enables the user to make changes to library content. This includes deleting local objects and handling edit suggestions. - - {guilabel}`Manage instance-level settings` – Grants access to the {guilabel}`Settings` menu. Enables the user to make changes to pod-level settings such as security settings and API behavior. +- {guilabel}`Moderation` – Grants access to the {guilabel}`Moderation` menu. Enables the user to moderate users, domains, and the allow-list. +- {guilabel}`Manage library` – Grants access to the {guilabel}`Library` menu. Enables the user to make changes to library content. This includes deleting local objects and handling edit suggestions. +- {guilabel}`Manage instance-level settings` – Grants access to the {guilabel}`Settings` menu. Enables the user to make changes to pod-level settings such as security settings and API behavior. +{.glossary} Report categories - The different types of report a person can submit to your pod. +: The different types of report a person can submit to your pod. - Available categories: +Available categories: - - {guilabel}`Takedown request` – allow users to request content be removed from your pod. - - {guilabel}`Invalid metadata` – allow users to inform moderators about incorrect metadata on content. - - {guilabel}`Illegal content` – allow users to flag content as illegal. - - {guilabel}`Offensive content` – allow users to flag offensive or hurtful content to moderators. - - {guilabel}`Other` – allow users to submit reports that don't fit into the above categories. - -``` +- {guilabel}`Takedown request` – allow users to request content be removed from your pod. +- {guilabel}`Invalid metadata` – allow users to inform moderators about incorrect metadata on content. +- {guilabel}`Illegal content` – allow users to flag content as illegal. +- {guilabel}`Offensive content` – allow users to flag offensive or hurtful content to moderators. +- {guilabel}`Other` – allow users to submit reports that don't fit into the above categories. ## Channel glossary -```{glossary} - +{.glossary} Fediverse - A term used to refer to a collection of federated (interconnected) servers. These servers run software that enables users to publish and host their own content. +: A term used to refer to a collection of federated (interconnected) servers. These servers run software that enables users to publish and host their own content. Podcatcher - A podcatcher is a piece of software that can read podcast feeds. Podcatchers enable listeners to follow and listen to podcast content. - -``` +: A podcatcher is a piece of software that can read podcast feeds. Podcatchers enable listeners to follow and listen to podcast content. ## Plugin glossary -```{glossary} - +{.glossary} Plugin - A plugin is a piece of software that extends the functionality of another piece of software. +: A plugin is a piece of software that extends the functionality of another piece of software. Scrobbling - Scrobbling is the act of recording listen data. Services use this information to keep track of listening preferences and recommend music. +: Scrobbling is the act of recording listen data. Services use this information to keep track of listening preferences and recommend music. -``` +## ActivityPub glossary + +{.glossary} +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object acting on behalf of another object across federated services. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#actors) for more details. + +Service actor +: A special actor that represents a Funkwhale pod. ActivityPub actors can [follow this actor](https://www.w3.org/TR/activitypub/#follow-activity-outbox) to receive updates to public content stored on the pod. + +Tombstone +: A status that marks an object as deleted but leaves some metadata intact to prevent reuse. diff --git a/docs/i18n_generate.sh b/docs/i18n_generate.sh deleted file mode 100755 index e80f64fe9..000000000 --- a/docs/i18n_generate.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash - -poetry run make -e BUILDDIR=locales gettext - -for path in locales/*; do - lang="$(basename "$path")" - if [[ "$lang" != "gettext" ]]; then - poetry run sphinx-intl update -p locales/gettext -l "$lang" - fi -done diff --git a/docs/index.md b/docs/index.md index 14fb9cb75..1e4961d9d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -101,9 +101,14 @@ caption: Specifications hidden: true --- +specs/collections/index specs/nodeinfo21/index specs/offline-mode/index specs/quality-filter/index +specs/multi-artist/index +specs/user-follow/index +specs/user-deletion/index +specs/upload-process/index specs/genre-tags/index ``` @@ -127,6 +132,7 @@ hidden: true --- changelog +0.x Changelog <changes/funkwhale-0-changelog> ``` diff --git a/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po b/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po new file mode 100644 index 000000000..90f704495 --- /dev/null +++ b/docs/locales/be/LC_MESSAGES/administrator/configuration/frontend.po @@ -0,0 +1,173 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, The Funkwhale Collective +# This file is distributed under the same license as the funkwhale package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: funkwhale 1.2.10\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-24 18:14+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: be\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../administrator/configuration/frontend.md:1 +msgid "Customize the Funkwhale frontend" +msgstr "" + +#: ../../administrator/configuration/frontend.md:3 +msgid "You can customize the look and behavior of the Funkwhale UI using a JSON configuration file. This file enables you to make very basic changes to the Funkwhale web app." +msgstr "" + +#: ../../administrator/configuration/frontend.md:5 +msgid "Set up your custom configuration" +msgstr "" + +#: ../../administrator/configuration/frontend.md:7 +msgid "Create your configuration file" +msgstr "" + +#: ../../administrator/configuration/frontend.md:9 +msgid "To customize your Funkwhale pod, you need to serve a {file}`settings.json` file at `https://yourinstanceurl/settings.json`. Follow these steps to set up your configuration file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:11 +msgid "SSH into your Funkwhale server." +msgstr "" + +#: ../../administrator/configuration/frontend.md:12 +msgid "Navigate to your `/srv/funkwhale` folder" +msgstr "" + +#: ../../administrator/configuration/frontend.md:18 +msgid "Create a new `custom` directory for your file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:24 +msgid "Create a new config file and populate it with placeholder settings." +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Supported parameters" +msgstr "" + +#: ../../administrator/configuration/frontend.md:41 +msgid "Parameter" +msgstr "" + +#: ../../administrator/configuration/frontend.md:42 +msgid "Data type" +msgstr "" + +#: ../../administrator/configuration/frontend.md:43 +msgid "Description" +msgstr "" + +#: ../../administrator/configuration/frontend.md:44 +msgid "Example" +msgstr "" + +#: ../../administrator/configuration/frontend.md:46 +msgid "`additionalStylesheets`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:47 +msgid "Array<URL>" +msgstr "" + +#: ../../administrator/configuration/frontend.md:48 +msgid "A list of URLs (relative or absolute) pointing to stylesheets." +msgstr "" + +#: ../../administrator/configuration/frontend.md:49 +msgid "`[\"https://test/theme.css\"]`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:51 +msgid "`defaultServerUrl`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:52 +msgid "URL" +msgstr "" + +#: ../../administrator/configuration/frontend.md:53 +msgid "The URL of the API server you want to connect the frontend to. Defaults to the current domain." +msgstr "" + +#: ../../administrator/configuration/frontend.md:54 +msgid "`\"https://api.yourdomain.com\"`" +msgstr "" + +#: ../../administrator/configuration/frontend.md:59 +msgid "Configure your reverse proxy" +msgstr "" + +#: ../../administrator/configuration/frontend.md:61 +msgid "Once you've created your {file}`settings.json` file you need to configure your reverse proxy to serve it." +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Nginx" +msgstr "" + +#: ../../administrator/configuration/frontend.md:69 +msgid "Add the following snippet to your {file}`/etc/nginx/sites-available/funkwhale.conf` config file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:0 +msgid "Apache" +msgstr "" + +#: ../../administrator/configuration/frontend.md:82 +msgid "Add the following snippet to your webserver configuration:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:90 +msgid "Reload your webserver. You should be able to see the contents of your configuration file at `https://yourinstanceurl/settings.json`." +msgstr "" + +#: ../../administrator/configuration/frontend.md:92 +msgid "Add a custom theme" +msgstr "" + +#: ../../administrator/configuration/frontend.md:94 +msgid "You can use a custom stylesheet to theme your Funkwhale pod. To do this:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:96 +msgid "Navigate to your {file}`/srv/funkwhale/custom` directory." +msgstr "" + +#: ../../administrator/configuration/frontend.md:102 +msgid "Copy your CSS file to this directory, or create a new one." +msgstr "" + +#: ../../administrator/configuration/frontend.md:114 +msgid "Add the location of your CSS file to the `additionalStylesheets` parameter in your {file}`settings.json` file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:127 +msgid "Add the whole {file}`custom` dir to your webserver configuration." +msgstr "" + +#: ../../administrator/configuration/frontend.md:135 +msgid "Add the following to your {file}`/etc/nginx/sites-available/funkwhale.conf` file:" +msgstr "" + +#: ../../administrator/configuration/frontend.md:148 +msgid "Add the following to your webserver configuration file." +msgstr "" + +#: ../../administrator/configuration/frontend.md:162 +msgid "Restart your webserver." +msgstr "" + +#: ../../administrator/configuration/frontend.md:164 +msgid "Refresh your Funkwhale app. The background should now be red." +msgstr "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po index 882f71d42..c2ead6351 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/index.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-configuration-index/fr/>\n" @@ -17,24 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Environment file" -msgstr "" +msgstr "Fichier d’environnement" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Instance settings" -msgstr "" +msgstr "Paramètres de l’instance" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Frontend customization" -msgstr "" +msgstr "Personnalisation de l’interface" #: ../../administrator_documentation/configuration_docs/index.md:5 msgid "Configuration options" -msgstr "" +msgstr "Options de configuration" #: ../../administrator_documentation/configuration_docs/index.md:1 msgid "Configure your Funkwhale pod" @@ -46,3 +46,7 @@ msgid "" " range from server-level settings to user-specific settings. Check out " "the guides in this section to get started." msgstr "" +"Vous pouvez personnaliser de nombreux paramètres relatifs à votre pod " +"Funkwhale. Ceux-ci vont des paramètres au niveau du serveur aux paramètres " +"spécifiques à l'utilisateur. Consultez les guides de cette section pour " +"commencer." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po index d4f605bb9..84376b1ee 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/configuration/ldap.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-configuration-ldap/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/configuration_docs/ldap.md:1 msgid "Configure LDAP" -msgstr "" +msgstr "Configurer LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:3 msgid "" @@ -28,14 +31,21 @@ msgid "" "login information. Funkwhale supports LDAP through the [Django LDAP " "authentication module](https://django-auth-ldap.readthedocs.io/)." msgstr "" +"{abbr}`LDAP (Lightweight Directory Access Protocol)` est un protocol pour " +"fournir des services d’annuaire. Il agit comme autorité centrale pour les " +"informations de connexion des utilisateurs. Funkwhale prend en charge le " +"protocole LDAP grâce au [module Django d’authentification LDAP](https" +"://django-auth-ldap.readthedocs.io/)." #: ../../administrator_documentation/configuration_docs/ldap.md:6 msgid "LDAP users can't change their password in the app." msgstr "" +"Les utilisateurs LDAP ne peuvent pas charger leur mot de passe dans " +"l’application." #: ../../administrator_documentation/configuration_docs/ldap.md:9 msgid "Dependencies" -msgstr "" +msgstr "Dépendances" #: ../../administrator_documentation/configuration_docs/ldap.md:11 msgid "" @@ -43,64 +53,75 @@ msgid "" "requirements files to make it easier to set up. If you aren't using LDAP," " you can safely remove these." msgstr "" +"Le support LDAP demande des dépendances supplémentaires. Nous les incluons " +"dans nos fichiers d’exigence pour en simplifier l’installation. Si vous n’" +"utilisiez pas LDAP, vous pouvez les supprimer en toute sécurité." #: ../../administrator_documentation/configuration_docs/ldap.md msgid "OS dependencies" -msgstr "" +msgstr "Dépendances système" #: ../../administrator_documentation/configuration_docs/ldap.md:15 msgid "`libldap2-dev`" -msgstr "" +msgstr "`libldap2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md:16 msgid "`libsasl2-dev`" -msgstr "" +msgstr "`libsasl2-dev`" #: ../../administrator_documentation/configuration_docs/ldap.md msgid "Python dependencies" -msgstr "" +msgstr "Dépendances Python" #: ../../administrator_documentation/configuration_docs/ldap.md:22 msgid "`python-ldap`" -msgstr "" +msgstr "`python-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:23 msgid "`python-django-auth-ldap`" -msgstr "" +msgstr "`python-django-auth-ldap`" #: ../../administrator_documentation/configuration_docs/ldap.md:27 msgid "Environment variables" -msgstr "" +msgstr "Variables d’environnement" #: ../../administrator_documentation/configuration_docs/ldap.md:29 msgid "" "You can configure LDAP authentication using environment variables in your" " `.env` file." msgstr "" +"Vous pouvez configurer l’authentification LDAP en utilisant les variables d’" +"environnement dans votre fichier `.env` ." #: ../../administrator_documentation/configuration_docs/ldap.md:31 msgid "Basic features" -msgstr "" +msgstr "Fonctionnalités de base" #: ../../administrator_documentation/configuration_docs/ldap.md:34 msgid "Set this to `True` to enable LDAP support" -msgstr "" +msgstr "Mettez ce paramètre à `True` pour activer le support LDAP" #: ../../administrator_documentation/configuration_docs/ldap.md:44 msgid "" "The LDAP {abbr}`URI (Uniform Resource Identifier)` of your authentication" " server." msgstr "" +"L’{abbr}`URI (Uniform Resource Identifier)` LDAP de votre serveur " +"d’authentification." #: ../../administrator_documentation/configuration_docs/ldap.md:53 msgid "" "LDAP user {abbr}`DN (Distinguished Name)` to bind on so you can perform " "searches." msgstr "" +"Les utilisateurs LDAP {abbr}`DN (Distinguished Name)` à lier pour pouvoir " +"effectuer des recherches." #: ../../administrator_documentation/configuration_docs/ldap.md:62 msgid "LDAP user password for bind {abbr}`DN (Distinguished Name)`." msgstr "" +"Les mots de passe des utilisateurs LDAP pour lier {abbr}`DN (Distinguished " +"Name)`." #: ../../administrator_documentation/configuration_docs/ldap.md:71 msgid "" @@ -109,28 +130,36 @@ msgid "" "syntax](https://social.technet.microsoft.com/wiki/contents/articles/5392" ".active-directory-ldap-syntax-filters.aspx)." msgstr "" +"Le filtre des utilisateurs LDAP, utilisant `{0}` comme non d’utilisateur. " +"Utilise le standard de la [syntaxe de recherche LDAP](https://social.technet." +"microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-" +"filters.aspx)." #: ../../administrator_documentation/configuration_docs/ldap.md:80 msgid "Set to `True` to enable LDAP StartTLS support." -msgstr "" +msgstr "Mettez le paramètre sur `True` pour activer le support LDAP StartTLS." #: ../../administrator_documentation/configuration_docs/ldap.md:89 msgid "" "The LDAP search root {abbr}`DN (Distinguished Name)`. Supports several " "entries in a comma-delimited list." msgstr "" +"La racine de recherche LDAP {abbr}`DN (Distinguished Name)`. Prend en charge " +"plusieurs entrées dans une liste délimitée par des virgules." #: ../../administrator_documentation/configuration_docs/ldap.md:98 msgid "A mapping of Django user attributes to LDAP values." msgstr "" +"Une correspondance entre les attributs de l'utilisateur Django et les " +"valeurs LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:107 msgid "Controls whether to use direct binding." -msgstr "" +msgstr "Contrôle s’il faut utiliser la liaison directe." #: ../../administrator_documentation/configuration_docs/ldap.md:115 msgid "Group features" -msgstr "" +msgstr "Fonctionnalités de groupe" #: ../../administrator_documentation/configuration_docs/ldap.md:117 msgid "" @@ -138,28 +167,36 @@ msgid "" " is an advanced feature. Most users don't need to configure these " "settings." msgstr "" +"Le protocole LDAP offre des fonctionnalités supplémentaires pour travailler " +"avec des groupes. La configuration des groupes est une fonctionnalité " +"avancée. La plupart des utilisateurs n'ont pas besoin de configurer ces " +"paramètres." #: ../../administrator_documentation/configuration_docs/ldap.md:120 msgid "" "[Django's LDAP documentation](https://django-auth-" "ldap.readthedocs.io/en/latest/groups.html) for groups." msgstr "" +"[La documentation LDAP d Django](https://django-auth-ldap.readthedocs.io/en/" +"latest/groups.html) pour les groupes." #: ../../administrator_documentation/configuration_docs/ldap.md:124 msgid "" "The LDAP group search root {abbr}`DN (Distinguished Name)`. This needs to" " be set to `True` to enable group features." msgstr "" +"La racine de recherche du groupe LDAP {abbr}`DN (Distinguished Name)`. Ce " +"paramètre doit être réglé sur `True` pour activer les fonctions de groupe." #: ../../administrator_documentation/configuration_docs/ldap.md:133 msgid "The LDAP group filter." -msgstr "" +msgstr "Le filtre de groupe de LDAP." #: ../../administrator_documentation/configuration_docs/ldap.md:142 msgid "The group that users need to be a member of to authenticate." msgstr "" +"Le groupe dont les utilisateurs doivent être membres pour s’authentifier." #: ../../administrator_documentation/configuration_docs/ldap.md:151 msgid "A group whose members can't authenticate." -msgstr "" - +msgstr "Un groupe dont les membres ne peuvent pas s’authentifier." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po index 3283a86b0..16cdef293 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/docker.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-installation-docker/fr/>\n" @@ -17,12 +17,12 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/docker.md:1 msgid "Install Funkwhale using Docker" -msgstr "" +msgstr "Installer Funkwhale en utilisant Doker" #: ../../administrator_documentation/installation_docs/docker.md:3 msgid "" diff --git a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po index 2c2c374f3..dba5c5096 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/installation/index.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/administrator-installation-index/fr/>\n" @@ -17,16 +17,16 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/installation_docs/index.md:10 msgid "Choose your installation method" -msgstr "" +msgstr "Choisissez votre méthode d’installation" #: ../../administrator_documentation/installation_docs/index.md:23 msgid "Migrate your installation" -msgstr "" +msgstr "Migrez votre installation" #: ../../administrator_documentation/installation_docs/index.md:1 msgid "Install Funkwhale on your server" @@ -35,10 +35,12 @@ msgstr "Installer Funkwhale sur votre serveur" #: ../../administrator_documentation/installation_docs/index.md:3 msgid "Choose your installation method and follow the guides to set up your pod." msgstr "" +"Choisissez votre méthode d’installation et suivez les guides pour configurer " +"votre pod." #: ../../administrator_documentation/installation_docs/index.md:5 msgid "Funkwhale requires the following:" -msgstr "" +msgstr "Funkwhale nécessite les choses suivantes :" #: ../../administrator_documentation/installation_docs/index.md:7 msgid "" @@ -46,9 +48,15 @@ msgid "" "subdirectory of a domain. You need to run it on a domain or a subdomain. " "For example: `https://mypod.io` or `https://funkwhale.mysite.io`." msgstr "" +"**Un domaine ou sous-domaine dédié** – vous ne pouvez pas exécuter Funkwhale " +"dans un sous-chemin d’un domaine. Vous devez l’exécuter sur un domaine ou " +"sous-domaine. Par exemple : `https://monpod.io` ou `https://funkwhale.monsite" +".io`." #: ../../administrator_documentation/installation_docs/index.md:8 msgid "" "**Access to ports `80` and `443`** – Funkwhale uses these ports for " "federation." msgstr "" +"**L’accès aux ports `80` et `443`** – Funkwhale utilise ces ports pour la " +"fédération." diff --git a/docs/locales/fr/LC_MESSAGES/administrator/migration.po b/docs/locales/fr/LC_MESSAGES/administrator/migration.po index e46dd1f18..c463c7ed0 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/migration.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/migration.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-migration/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/migration_guide/index.md:1 msgid "Docker migration guide" -msgstr "" +msgstr "Guide de migration Docker" #: ../../administrator_documentation/migration_guide/index.md:3 msgid "" @@ -159,4 +162,3 @@ msgid "" "Once you have imported your database and run migrations, you can start " "all containers." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po index f2a8d577e..1aa40eb1d 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/debian.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/debian.md:1 @@ -105,7 +108,7 @@ msgstr "" #: ../../administrator/uninstall/debian.md:100 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/uninstall/debian.md:106 msgid "Delete the Funkwhale database." @@ -176,4 +179,3 @@ msgstr "" #~ " up any data](../upgrade_docs/backup.md) you " #~ "want to keep." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po index 29a244b87..63bf5a876 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/uninstall/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-uninstall-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/uninstall/docker.md:1 @@ -43,7 +46,7 @@ msgstr "" #: ../../administrator/uninstall/docker.md:18 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/uninstall/docker.md:24 msgid "Stop the containers" @@ -121,4 +124,3 @@ msgstr "" #~ "sure you have [backed up your " #~ "data](../upgrade_docs/backup.md) before proceeding." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po index 1e41df85b..0f72b9028 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/debian.po @@ -3,99 +3,116 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-debian/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/debian.md:1 msgid "Upgrade your Debian Funkwhale installation" -msgstr "" +msgstr "Mettre votre installation Funkwhale sur Debian à jour" #: ../../administrator/upgrade/debian.md:3 msgid "" "If you installed Funkwhale following the [Debian " "guide](../installation/debian.md), follow these steps to upgrade." msgstr "" +"Si vous avez installé Funkwhale en suivant le [guide Debian](../installation/" +"debian.md), suivez ces étapes pour mettre à jour." #: ../../administrator/upgrade/debian.md:5 msgid "Cleanup old funkwhale files" -msgstr "" +msgstr "Nettoyer les anciens fichiers Funkwhale" #: ../../administrator/upgrade/debian.md:7 msgid "Stop the Funkwhale services." -msgstr "" +msgstr "Arrêtez les services Funkwhale." #: ../../administrator/upgrade/debian.md:13 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/upgrade/debian.md:19 msgid "Remove the old files." -msgstr "" +msgstr "Supprimez les anciens fichiers." #: ../../administrator/upgrade/debian.md:25 msgid "Download Funkwhale" -msgstr "" +msgstr "Télécharger Funkwhale" #: ../../administrator/upgrade/debian.md:27 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous désirez mettre à jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/debian.md:33 msgid "" "Follow the [Download Funkwhale](../installation/debian.md#3-download-" "funkwhale) instructions in the installation guide." msgstr "" +"Suivez les instructions de [Téléchargement de Funkwhale](../installation/" +"debian.md#3-download-funkwhale) dans le guide d’installation." #: ../../administrator/upgrade/debian.md:35 msgid "" "Follow the [Install the Funkwhale API](../installation/debian.md#4" "-install-the-funkwhale-api) instructions in the installation guide." msgstr "" +"Suivez les instructions d’[installation de l’API Funkwhale](../installation/" +"debian.md#4-install-the-funkwhale-api) dans le guide d’installation." #: ../../administrator/upgrade/debian.md:37 msgid "Update your Funkwhale instance" -msgstr "" +msgstr "Mettre votre instance Funkwhale à jour" #: ../../administrator/upgrade/debian.md:39 msgid "" "Once you have downloaded the new files, you can update your Funkwhale " "instance. To do this:" msgstr "" +"Une fois que vous avez téléchargé les nouveaux fichiers, vous pouvez mettre " +"votre instance Funkwhale à jour. Pour ce faire :" #: ../../administrator/upgrade/debian.md:41 msgid "Install or upgrade all OS dependencies using the dependencies script." msgstr "" +"Installez ou mettez à jour toutes les dépendances système en utilisant notre " +"script de dépendances." #: ../../administrator/upgrade/debian.md:47 msgid "Collect the new static files to serve." -msgstr "" +msgstr "Collectez les nouveaux fichiers statiques à servir." #: ../../administrator/upgrade/debian.md:53 msgid "Apply new database migrations." -msgstr "" +msgstr "Appliquer les nouvelles migrations de bases de données." #: ../../administrator/upgrade/debian.md:59 msgid "Restart the Funkwhale services." -msgstr "" +msgstr "Redémarrez les services Funkwhale." #: ../../administrator/upgrade/debian.md:65 msgid "" "That's it! You've updated your Funkwhale pod. You should now see the new " "version running in your web browser." msgstr "" +"C’est tout ! Vous avez mis à jour votre pod Funkwhale. Vous devriez " +"désormais voir la nouvelle version être exécutée dans votre navigateur web." #~ msgid "" #~ "If you installed Funkwhale following the" @@ -115,4 +132,3 @@ msgstr "" #~ "funkwhale-api) instructions in the " #~ "installation guide." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po index f1afab3c8..b4ee5ed7b 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/docker.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-docker/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator/upgrade/docker.md:1 @@ -41,13 +44,15 @@ msgstr "" #: ../../administrator/upgrade/docker.md:14 msgid "Navigate to your Funkwhale directory." -msgstr "" +msgstr "Naviguez vers votre répertoire Funkwhale." #: ../../administrator/upgrade/docker.md:20 msgid "" "Export the Funkwhale version you want to update to. You'll use this in " "the rest of the commands in this guide." msgstr "" +"Exportez la version de Funkwhale vers laquelle vous désirez mettre à jour. " +"Vous l'utiliserez dans les autres commandes de ce guide." #: ../../administrator/upgrade/docker.md:26 msgid "" @@ -153,4 +158,3 @@ msgstr "" #~ " [Docker guide](../installation_docs/docker.md), follow" #~ " these steps to upgrade." #~ msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po index 30b4511e5..8cb522caa 100644 --- a/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po +++ b/docs/locales/fr/LC_MESSAGES/administrator/upgrade/index.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/administrator-upgrade-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../administrator_documentation/upgrade_docs/index.md:11 @@ -35,7 +38,7 @@ msgstr "" #: ../../administrator_documentation/upgrade_docs/index.md:21 msgid "Choose your installation method" -msgstr "" +msgstr "Choisissez votre méthode d’installation" #: ../../administrator_documentation/upgrade_docs/index.md:1 msgid "Upgrade your Funkwhale instance" @@ -59,4 +62,3 @@ msgid "" "Be sure to check the changelog for any specific instructions relating to " "upgrades." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/contributor/translation.po b/docs/locales/fr/LC_MESSAGES/contributor/translation.po index b212dd288..dabbfbe0f 100644 --- a/docs/locales/fr/LC_MESSAGES/contributor/translation.po +++ b/docs/locales/fr/LC_MESSAGES/contributor/translation.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-06-27 20:50+0000\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" "Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/contributor-translation/fr/>\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../contributor_documentation/translation.md:1 @@ -143,7 +143,6 @@ msgid "Use informal speech patterns, including contractions" msgstr "Utilisez des modes d'expression informels, y compris des contractions" #: ../../contributor_documentation/translation.md:30 -#, fuzzy msgid "" "Use sentence case for all content, including titles. For example: " "\"Language coordination\" rather than \"Language Coordination\"" diff --git a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po index 217267660..2ba9f254a 100644 --- a/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po +++ b/docs/locales/fr/LC_MESSAGES/developer/setup/gitpod.po @@ -3,18 +3,21 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/developer-setup-gitpod/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../developer_documentation/setup/gitpod.md:1 @@ -150,7 +153,7 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:46 #: ../../developer_documentation/setup/gitpod.md:64 msgid "Environment variables" -msgstr "" +msgstr "Variables d’environnement" #: ../../developer_documentation/setup/gitpod.md:49 #: ../../developer_documentation/setup/gitpod.md:67 @@ -211,4 +214,3 @@ msgstr "" #: ../../developer_documentation/setup/gitpod.md:72 msgid "`funkwhale/funkwhale`" msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po index bd9d7b94a..b3f5c0821 100644 --- a/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/moderator/content/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/moderator-content-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../moderator_documentation/content/delete_content.md:1 @@ -71,7 +70,7 @@ msgstr "Bureau" #: ../../moderator_documentation/content/delete_content.md:84 #: ../../moderator_documentation/content/delete_content.md:106 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../moderator_documentation/content/delete_content.md:34 #: ../../moderator_documentation/content/delete_content.md:85 @@ -165,7 +164,7 @@ msgstr "" #: ../../moderator_documentation/content/delete_content.md:47 #: ../../moderator_documentation/content/delete_content.md:68 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../moderator_documentation/content/delete_content.md msgid "Mobile" diff --git a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po index d07eb2118..169d1fa00 100644 --- a/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po +++ b/docs/locales/fr/LC_MESSAGES/user/accounts/quota.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-accounts-quota/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/accounts/check_quota.md:1 @@ -49,7 +48,7 @@ msgstr "Bureau" #: ../../user_documentation/accounts/check_quota.md:15 #: ../../user_documentation/accounts/check_quota.md:26 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/accounts/check_quota.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." @@ -86,4 +85,4 @@ msgstr "Téléphone mobile" #: ../../user_documentation/accounts/check_quota.md:27 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" +msgstr "Sélectionnez l’icône de téléversement ({fa}`upload` en haut de l’écran" diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po index 632e3d2d0..6b0866f92 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-artist-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/delete.md:1 @@ -54,7 +53,7 @@ msgstr "Bureau" #: ../../user/channels/artist/delete.md:66 #: ../../user/channels/artist/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/artist/delete.md:24 #: ../../user/channels/artist/delete.md:67 diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po index b424642d0..044342672 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/artist/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-artist-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/artist/upload.md:1 @@ -57,7 +56,7 @@ msgstr "Bureau" #: ../../user/channels/artist/upload.md:129 #: ../../user/channels/artist/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/artist/upload.md:22 #: ../../user/channels/artist/upload.md:71 diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/create.po b/docs/locales/fr/LC_MESSAGES/user/channels/create.po index 110670974..d8c9a3d67 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/create.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-create/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/create.md:1 @@ -58,7 +57,7 @@ msgstr "Bureau" #: ../../user/channels/create.md:25 ../../user/channels/create.md:42 #: ../../user/channels/create.md:68 ../../user/channels/create.md:90 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/create.md:26 ../../user/channels/create.md:69 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po index bca7fcefe..4febbf7c1 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/channels/delete_channel.md:1 @@ -81,7 +80,7 @@ msgstr "" #: ../../user_documentation/channels/delete_channel.md:21 #: ../../user_documentation/channels/delete_channel.md:34 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../user_documentation/channels/delete_channel.md msgid "Mobile" diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po index 3a425b227..8cb0b0cc9 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-podcast-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/delete.md:1 @@ -54,7 +53,7 @@ msgstr "Bureau" #: ../../user/channels/podcast/delete.md:66 #: ../../user/channels/podcast/delete.md:80 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/podcast/delete.md:24 #: ../../user/channels/podcast/delete.md:67 diff --git a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po index fc36be23e..49b4ab930 100644 --- a/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/channels/podcast/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-channels-podcast-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/channels/podcast/upload.md:1 @@ -57,7 +56,7 @@ msgstr "Bureau" #: ../../user/channels/podcast/upload.md:129 #: ../../user/channels/podcast/upload.md:147 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/channels/podcast/upload.md:22 #: ../../user/channels/podcast/upload.md:71 diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po index eba4e8ea0..a8048f55e 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-content-delete/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_content.md:1 @@ -43,7 +42,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/delete_content.md:15 #: ../../user_documentation/libraries/delete_content.md:32 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/delete_content.md:16 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po index 67fa8dfcf..48d929175 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/content/upload.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:39+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-content-upload/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user/libraries/content/upload.md:1 @@ -50,7 +49,7 @@ msgstr "Bureau" #: ../../user/libraries/content/upload.md:17 #: ../../user/libraries/content/upload.md:31 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user/libraries/content/upload.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po index 3cf222cec..72563fc56 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/create.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/create.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-create/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/create_library.md:1 @@ -48,7 +47,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/create_library.md:17 #: ../../user_documentation/libraries/create_library.md:36 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/create_library.md:18 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po index f41cfd00a..69b45dae7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/delete.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-delete/fr/>\n" "Language: fr\n" @@ -18,20 +17,22 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/delete_library.md:1 msgid "Delete a library" -msgstr "" +msgstr "Supprimer une audiothèque" #: ../../user_documentation/libraries/delete_library.md:4 msgid "Deleting a library also deletes all content in the library." msgstr "" +"Supprimer une audiothèque supprime aussi tout le contenu de cette " +"audiothèque." #: ../../user_documentation/libraries/delete_library.md:7 msgid "You can delete a library at any time. To do this:" -msgstr "" +msgstr "Vous pouvez supprimer une audiothèque à tout moment. Pour ce faire :" #: ../../user_documentation/libraries/delete_library.md msgid "Desktop" @@ -79,12 +80,14 @@ msgstr "Sélectionnez le bouton {guilabel}`✎ Modifier` en haut de l'écran." #: ../../user_documentation/libraries/delete_library.md:21 #: ../../user_documentation/libraries/delete_library.md:35 msgid "Select {guilabel}`Delete`." -msgstr "" +msgstr "Sélectionnez {guilabel}`Supprimer`." #: ../../user_documentation/libraries/delete_library.md:22 #: ../../user_documentation/libraries/delete_library.md:36 msgid "Select {guilabel}`Delete library` on the warning notice that appears." msgstr "" +"Sélectionnez {guilabel}`Supprimer l’audiothèque` sur la notice de warning " +"qui apparaît." #: ../../user_documentation/libraries/delete_library.md msgid "Mobile" @@ -96,4 +99,4 @@ msgstr "Sélectionnez l'icône de ({fa}`téléversement`) en haut de l'écran." #: ../../user_documentation/libraries/delete_library.md:40 msgid "That's it! You've deleted your library and all its content." -msgstr "" +msgstr "C’est tout ! Vous avez supprimé votre audiothèque et tout son contenu." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po index 6803dee21..7074fa6cd 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/follow.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-follow/fr/>\n" "Language: fr\n" @@ -18,28 +17,32 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/follow_library.md:1 msgid "Follow a library" -msgstr "" +msgstr "Suivre une audiothèque" #: ../../user_documentation/libraries/follow_library.md:3 msgid "" "Follow a library to get access to its content. There are two ways to " "follow a library:" msgstr "" +"Suivez une audiothèque pour recevoir l’accès à ses contenus. Il y a deux " +"moyens pour suivre une audiothèque :" #: ../../user_documentation/libraries/follow_library.md:9 msgid "Use a sharing link" -msgstr "" +msgstr "Utiliser un lien de partage" #: ../../user_documentation/libraries/follow_library.md:11 msgid "" "If you've received a sharing link, you can use this to follow a library. " "To do this:" msgstr "" +"Si vous avez reçu un lien de partage, vous pouvez l’utiliser pour suivre une " +"audiothèque. Pour ce faire :" #: ../../user_documentation/libraries/follow_library.md msgid "Desktop" @@ -49,7 +52,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/follow_library.md:31 #: ../../user_documentation/libraries/follow_library.md:50 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/follow_library.md:20 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." @@ -63,6 +66,8 @@ msgid "" "Select {guilabel}`Get started` under {guilabel}`Follow remote libraries`." " A screen appears showing you the libraries you are following." msgstr "" +"Sélectionnez {guilabel}`Démarrer` sous {guilabel}`Suivre des audiothèques " +"distantes`. Un écran apparaît vous montant les audiothèques que vous suivez." #: ../../user_documentation/libraries/follow_library.md:22 #: ../../user_documentation/libraries/follow_library.md:34 @@ -70,6 +75,8 @@ msgid "" "Paste the sharing link into the {guilabel}`Search a remote library` " "search bar." msgstr "" +"Collez le lien de partage dans la barre de recherche {guilabel}`Rechercher " +"une audiothèque distante`." #: ../../user_documentation/libraries/follow_library.md:23 #: ../../user_documentation/libraries/follow_library.md:35 @@ -77,6 +84,9 @@ msgid "" "Select the {guilabel}`Search` icon or hit {kbd}`⏎ Return` to search for " "the library. If the library exists, a library card appears." msgstr "" +"Sélectionnez l’icône {guilabel}`Rechercher` ou appuyer {kbd}`⏎ Retour` pour " +"rechercher l’audiothèque. Si l’audiothèque existe, une carte d’audiothèque " +"apparaît." #: ../../user_documentation/libraries/follow_library.md:24 #: ../../user_documentation/libraries/follow_library.md:36 @@ -85,6 +95,9 @@ msgid "" "level is {guilabel}`Nobody except me`, the owner needs to approve the " "request." msgstr "" +"Sélectionnez {guilabel}`Suivre` sur la carte de l’audiothèque. Si le niveau " +"de confidentialité de l’audiothèque est {guilabel}`Personne à part moi`, le " +"propriétaire devra approuver la demande." #: ../../user_documentation/libraries/follow_library.md msgid "Mobile" @@ -92,46 +105,60 @@ msgstr "Téléphone mobile" #: ../../user_documentation/libraries/follow_library.md:32 msgid "Select the upload icon ({fa}`upload`) at the top of the screen" -msgstr "" +msgstr "Sélectionnez l’icône de téléversement ({fa}`upload` en haut de l’écran" #: ../../user_documentation/libraries/follow_library.md:40 msgid "" "That's it! The server then scans the content and you can see it on your " "{term}`pod`." msgstr "" +"C’est tout ! Le serveur va alors scanner le contenu et vous pouvez le voir " +"dans votre {term}`pod`." #: ../../user_documentation/libraries/follow_library.md:42 msgid "Follow from content on your pod" -msgstr "" +msgstr "Suivre depuis du contenu dans votre pod" #: ../../user_documentation/libraries/follow_library.md:45 msgid "" "You can only follow a library from content pages if its privacy level is " "not {guilabel}`Nobody except me`." msgstr "" +"Vous pouvez suivre une audiothèque depuis des pages de contenu seulement " +"lorsque son niveau de confidentialité n’est pas {guilabel}`Personne sauf " +"moi`." #: ../../user_documentation/libraries/follow_library.md:48 msgid "" "If a user on your {term}`pod` has already followed a library, you can " "find it by selecting content from that library. To do this:" msgstr "" +"Si un utilisateur de votre {term}`pod` a déjà suivi une audiothèque, vous " +"pouvez la trouver en sélectionnant du contenu de cette audiothèque. Pour ce " +"faire :" #: ../../user_documentation/libraries/follow_library.md:51 msgid "Select a track, album, or artist from the library you want to follow." msgstr "" +"Sélectionnez une piste, album, ou artiste depuis l’audiothèque que vous " +"désirez suivre." #: ../../user_documentation/libraries/follow_library.md:52 msgid "" "Scroll to the bottom of the page. The library card appears in the " "{guilabel}`User libraries` section." msgstr "" +"Faites défiler la page jusqu’en bas. La carte de l’audiothèque apparaît dans " +"la section {guilabel}`Audiothèques de l’utilisateur`." #: ../../user_documentation/libraries/follow_library.md:53 msgid "Select {guilabel}`Follow` on the library card." -msgstr "" +msgstr "Sélectionnez {guilabel}`Suivre` sur la carte de l’audiothèque." #: ../../user_documentation/libraries/follow_library.md:55 msgid "" "You're done! The content will remain on the server even if the other user" " stops following the library." msgstr "" +"C’est fait ! Le contenu va rester sur le serveur même si l’autre utilisateur " +"arrête de suivre l’audiothèque." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/index.po b/docs/locales/fr/LC_MESSAGES/user/libraries/index.po index f600bcb1c..98691ac03 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/index.po @@ -3,35 +3,38 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-libraries-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/index.md:11 msgid "Manage your libraries" -msgstr "" +msgstr "Gérer vos audiothèques" #: ../../user_documentation/libraries/index.md:23 msgid "Manage library content" -msgstr "" +msgstr "Gérer le contenu des audiothèques" #: ../../user_documentation/libraries/index.md:36 msgid "Share and follow libraries" -msgstr "" +msgstr "Partager et suivre des audiothèques" #: ../../user_documentation/libraries/index.md:1 msgid "Libraries" -msgstr "" +msgstr "Audiothèques" #: ../../user_documentation/libraries/index.md:3 msgid "" @@ -39,6 +42,10 @@ msgid "" "{term}`pod`. You can set the privacy level on libraries to control who " "can access them. Choose from the available privacy levels:" msgstr "" +"Les audiothèques vous permettent d’organiser du contenu audio que vous " +"téléversez vers votre {term}`pod`. Vous pouvez configurer le niveau de " +"confidentialité des audiothèques pour contrôler qui peut y accéder. " +"Choisissez selon les niveaux de confidentialité disponibles :" #: ../../user_documentation/libraries/index.md:5 msgid "" @@ -46,22 +53,31 @@ msgid "" "to everybody who interacts with your pod. This includes users of other " "pods." msgstr "" +"**Tout le monde, à travers toutes les instances** – le contenu de l’" +"audiothèque est accessible à quiconque intéragit avec votre pod. Ceci inclut " +"les utilisateurs d’autres pods." #: ../../user_documentation/libraries/index.md:6 msgid "" "**Everyone on this instance** – the library's content is available to all" " users on your pod. This does not include users of other pods." msgstr "" +"**Tout le monde de cette instance** – le contenu de l’audiothèque est " +"accessible pour tous les utilisateurs de votre pod. Ceci n’inclut pas les " +"utilisateurs d’autres pods." #: ../../user_documentation/libraries/index.md:7 msgid "" "**Nobody except me** – the library's content is only available to you and" " people you share the library with." msgstr "" +"**Personne à part moi** – le contenu des audiothèques n’est accessible que " +"par vous et les personnes avec qui vous partagez cette audiothèque." #: ../../user_documentation/libraries/index.md:9 msgid "" "Use libraries for private collections or freely licensed music you want " "to share." msgstr "" - +"Utilisez les audiothèques pour les collections privées ou pour la musique " +"avec licence libre que vous désirez partager." diff --git a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po index e692acaec..a119bcc12 100644 --- a/docs/locales/fr/LC_MESSAGES/user/libraries/share.po +++ b/docs/locales/fr/LC_MESSAGES/user/libraries/share.po @@ -8,9 +8,8 @@ msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: 2023-07-06 01:50+0000\n" -"Last-Translator: \"Fun.k.whale Trad\" <fun.k.whale@users.noreply.translate." -"funkwhale.audio>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" "Language-Team: French <https://translate.funkwhale.audio/projects/" "documentation/user-libraries-share/fr/>\n" "Language: fr\n" @@ -18,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/libraries/share_library.md:1 @@ -46,7 +45,7 @@ msgstr "Bureau" #: ../../user_documentation/libraries/share_library.md:44 #: ../../user_documentation/libraries/share_library.md:54 msgid "Log in to your pod." -msgstr "" +msgstr "Connectez-vous à votre pod." #: ../../user_documentation/libraries/share_library.md:14 msgid "Select the upload icon ({fa}`upload`) in the top of the sidebar." diff --git a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po index 69177358d..af5d855ee 100644 --- a/docs/locales/fr/LC_MESSAGES/user/plugins/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/plugins/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-05 19:10+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-plugins-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/plugins/index.md:9 msgid "Core plugins" -msgstr "" +msgstr "Plugins principaux" #: ../../user_documentation/plugins/index.md:1 msgid "User plugins" -msgstr "" +msgstr "Plugins utilisateur" #: ../../user_documentation/plugins/index.md:4 msgid "" @@ -31,6 +34,9 @@ msgid "" "them. If you can't find the plugins mentioned here, contact your pod " "admin." msgstr "" +"Votre administarteur de {term}`pod <Pod>`doit permettre les plugins pour que " +"vous puissiez les utiliser. Si vous ne pouvez pas voir les plugins " +"mentionnés ici, veuillez contacter votre administrateur de pod." #: ../../user_documentation/plugins/index.md:7 msgid "" @@ -38,4 +44,7 @@ msgid "" "maintains core plugins to make your listening experience even better. " "Developers can create extra plugins to add features to a pod." msgstr "" - +"Utilisez des plugins pour étendre les fonctionnalités de Funkwhale. Le " +"collectif Funkwhale maintient des plugins de base pour rendre votre " +"expérience d'écoute encore meilleure. Les développeurs peuvent créer des " +"plugins supplémentaires pour ajouter des fonctionnalités à un pod." diff --git a/docs/locales/fr/LC_MESSAGES/user/radios/index.po b/docs/locales/fr/LC_MESSAGES/user/radios/index.po index 89f766018..ba802a916 100644 --- a/docs/locales/fr/LC_MESSAGES/user/radios/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/radios/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-radios-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/radios/index.md:13 msgid "Manage your radios" -msgstr "" +msgstr "Gérer vos radios" #: ../../user_documentation/radios/index.md:1 msgid "Radios" -msgstr "" +msgstr "Radios" #: ../../user_documentation/radios/index.md:3 msgid "" @@ -66,4 +69,3 @@ msgid "" "**Less listened** – check out tracks you've not heard, or things you " "haven't given as much attention." msgstr "" - diff --git a/docs/locales/fr/LC_MESSAGES/user/reports/index.po b/docs/locales/fr/LC_MESSAGES/user/reports/index.po index d74591206..1a2d16de7 100644 --- a/docs/locales/fr/LC_MESSAGES/user/reports/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/reports/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-11 21:34+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-reports-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/reports/index.md:9 msgid "Submit reports" -msgstr "" +msgstr "Envoyer des rapports" #: ../../user_documentation/reports/index.md:1 msgid "Reporting" -msgstr "" +msgstr "Rapports" #: ../../user_documentation/reports/index.md:4 msgid "" @@ -32,6 +35,11 @@ msgid "" "send reports. If you cannot send reports anonymously, contact the pod " "admin." msgstr "" +"Les administrateur·ices et modérateur·ices de {term}`Pod <Pod>` sont " +"responsables de la gestion des rapports. Les administrateur·ices peuvent " +"choisir d’autoriser les utilisateurs anonymes (déconnectés) d’envoyer des " +"rapports. Si vous ne pouvez pas envoyer de rapports de manière anonyme, " +"contactez votre administrateur de pod." #: ../../user_documentation/reports/index.md:7 msgid "" @@ -40,4 +48,7 @@ msgid "" "stolen content. Check out the guides in this section to see how to send a" " report." msgstr "" - +"Funkwhale fournit des outils pour rapporter tout le contenu et les comptes. " +"Vous pouvez rapporter le contenu pour être répréhensible et illégal. Vous " +"pouvez aussi rapporter du contenu volé. Consultez les guides dans cette " +"section pour voir comment envoyer un rapport." diff --git a/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po b/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po index 3e34eba63..1d8ac00fb 100644 --- a/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po +++ b/docs/locales/fr/LC_MESSAGES/user/subsonic/index.po @@ -3,33 +3,39 @@ # This file is distributed under the same license as the funkwhale package. # FIRST AUTHOR <EMAIL@ADDRESS>, 2023. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: funkwhale 1.3.0-rc3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-01 14:05+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" +"PO-Revision-Date: 2023-12-18 13:38+0000\n" +"Last-Translator: Thomas <thovi98@gmail.com>\n" +"Language-Team: French <https://translate.funkwhale.audio/projects/" +"documentation/user-subsonic-index/fr/>\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.11.0\n" #: ../../user_documentation/subsonic/index.md:9 msgid "Manage your Subsonic access" -msgstr "" +msgstr "Gérer votre accès Subsonic" #: ../../user_documentation/subsonic/index.md:1 msgid "Subsonic access" -msgstr "" +msgstr "Accès Subsonic" #: ../../user_documentation/subsonic/index.md:4 msgid "" "{term}`Pod` admins can choose to disable access to the Subsonic API. If " "the Subsonic password option isn't available, contact your pod admin." msgstr "" +"Les administrateurs de {term}`Pod` peuvent choisir de fermer l’accès à l’API " +"Subsonic. Si l’option de mot de passe Subsonic n’est pas disponible, " +"veuillez contacter votre administrateur de pod." #: ../../user_documentation/subsonic/index.md:7 msgid "" @@ -38,4 +44,7 @@ msgid "" "Subsonic apps to stream your Funkwhale content. Check out the guides in " "this section to manage your Subsonic access." msgstr "" - +"Funkwhale supporte un sous-ensemble de l’[API Subsonic](http://www.subsonic." +"org/pages/index.jsp). Ceci vous permet d’utiliser des applications Subsonic " +"pour diffuser votre contenu Funkwhale. Consultez les guides dans cette " +"section pour gérer votre accès Subsonic." diff --git a/docs/poetry.lock b/docs/poetry.lock index fe867c648..fae0193f0 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -1,198 +1,16 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.8.5" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<4.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "cchardet"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "alabaster" -version = "0.7.13" -description = "A configurable sidebar-enabled Sphinx theme" +version = "0.7.16" +description = "A light, configurable Sphinx theme" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] -[[package]] -name = "amqp" -version = "5.1.1" -description = "Low-level AMQP client for Python (fork of amqplib)." -optional = false -python-versions = ">=3.6" -files = [ - {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, - {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, -] - -[package.dependencies] -vine = ">=5.0.0" - -[[package]] -name = "anyio" -version = "4.0.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, - {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.22)"] - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" - [[package]] name = "asgiref" version = "3.7.2" @@ -210,477 +28,128 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "23.1.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] - -[[package]] -name = "autobahn" -version = "23.1.2" -description = "WebSocket client & server library, WAMP real-time framework" -optional = false -python-versions = ">=3.7" -files = [ - {file = "autobahn-23.1.2.tar.gz", hash = "sha256:c5ef8ca7422015a1af774a883b8aef73d4954c9fcd182c9b5244e08e973f7c3a"}, -] - -[package.dependencies] -cryptography = ">=3.4.6" -hyperlink = ">=21.0.0" -setuptools = "*" -txaio = ">=21.2.1" - -[package.extras] -all = ["PyGObject (>=3.40.0)", "argon2_cffi (>=20.1.0)", "attrs (>=20.3.0)", "base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "cffi (>=1.14.5)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "flatbuffers (>=22.12.6)", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "msgpack (>=1.0.2)", "passlib (>=1.7.4)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "py-ubjson (>=0.16.1)", "pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "python-snappy (>=0.6.0)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "rlp (>=2.0.1)", "service_identity (>=18.1.0)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "ujson (>=4.0.2)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)", "zope.interface (>=5.2.0)"] -compress = ["python-snappy (>=0.6.0)"] -dev = ["backports.tempfile (>=1.0)", "bumpversion (>=0.5.3)", "codecov (>=2.0.15)", "flake8 (<5)", "humanize (>=0.5.1)", "mypy (>=0.610)", "passlib", "pep8-naming (>=0.3.3)", "pip (>=9.0.1)", "pyenchant (>=1.6.6)", "pyflakes (>=1.0.0)", "pyinstaller (>=4.2)", "pylint (>=1.9.2)", "pytest (>=3.4.2)", "pytest-aiohttp", "pytest-asyncio (>=0.14.0)", "pytest-runner (>=2.11.1)", "pyyaml (>=4.2b4)", "qualname", "sphinx (>=1.7.1)", "sphinx-autoapi (>=1.7.0)", "sphinx_rtd_theme (>=0.1.9)", "sphinxcontrib-images (>=0.9.1)", "tox (>=4.2.8)", "tox-gh-actions (>=2.2.0)", "twine (>=3.3.0)", "twisted (>=22.10.0)", "txaio (>=20.4.1)", "watchdog (>=0.8.3)", "wheel (>=0.36.2)", "yapf (==0.29.0)"] -encryption = ["pynacl (>=1.4.0)", "pyopenssl (>=20.0.1)", "pytrie (>=0.4.0)", "qrcode (>=7.3.1)", "service_identity (>=18.1.0)"] -nvx = ["cffi (>=1.14.5)"] -scram = ["argon2_cffi (>=20.1.0)", "cffi (>=1.14.5)", "passlib (>=1.7.4)"] -serialization = ["cbor2 (>=5.2.0)", "flatbuffers (>=22.12.6)", "msgpack (>=1.0.2)", "py-ubjson (>=0.16.1)", "ujson (>=4.0.2)"] -twisted = ["attrs (>=20.3.0)", "twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -ui = ["PyGObject (>=3.40.0)"] -xbr = ["base58 (>=2.1.0)", "cbor2 (>=5.2.0)", "click (>=8.1.2)", "ecdsa (>=0.16.1)", "eth-abi @ git+https://github.com/ethereum/eth-abi.git@v4.0.0-beta.2", "hkdf (>=0.0.3)", "jinja2 (>=2.11.3)", "mnemonic (>=0.19)", "py-ecc (>=5.1.0)", "py-eth-sig-utils (>=0.4.0)", "py-multihash (>=2.0.1)", "rlp (>=2.0.1)", "spake2 (>=0.8)", "twisted (>=20.3.0)", "web3[ipfs] @ git+https://github.com/ethereum/web3.py.git@v6.0.0-beta.9", "xbr (>=21.2.1)", "yapf (==0.29.0)", "zlmdb (>=21.2.1)"] - -[[package]] -name = "automat" -version = "22.10.0" -description = "Self-service finite-state machines for the programmer on the go." -optional = false -python-versions = "*" -files = [ - {file = "Automat-22.10.0-py2.py3-none-any.whl", hash = "sha256:c3164f8742b9dc440f3682482d32aaff7bb53f71740dd018533f9de286b64180"}, - {file = "Automat-22.10.0.tar.gz", hash = "sha256:e56beb84edad19dcc11d30e8d9b895f75deeb5ef5e96b84a467066b3b84bb04e"}, -] - -[package.dependencies] -attrs = ">=19.2.0" -six = "*" - -[package.extras] -visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] - [[package]] name = "babel" -version = "2.12.1" +version = "2.14.0" description = "Internationalization utilities" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, -] - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.extras] -tzdata = ["tzdata"] - -[[package]] -name = "billiard" -version = "3.6.4.0" -description = "Python multiprocessing fork with improvements and bugfixes" -optional = false -python-versions = "*" -files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, -] - -[[package]] -name = "bleach" -version = "5.0.1" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.7" -files = [ - {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, - {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] - -[[package]] -name = "boto3" -version = "1.26.161" -description = "The AWS SDK for Python" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "boto3-1.26.161-py3-none-any.whl", hash = "sha256:f66e5c9dbe7f34383bcf64fa6070771355c11a44dd75c7f1279f2f37e1c89183"}, - {file = "boto3-1.26.161.tar.gz", hash = "sha256:662731e464d14af1035f44fc6a46b0e3112ee011ac0a5ed416d205daa3e15f25"}, -] - -[package.dependencies] -botocore = ">=1.29.161,<1.30.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "botocore" -version = "1.29.165" -description = "Low-level, data-driven core of boto 3." -optional = false -python-versions = ">= 3.7" -files = [ - {file = "botocore-1.29.165-py3-none-any.whl", hash = "sha256:6f35d59e230095aed7cd747604fe248fa384bebb7d09549077892f936a8ca3df"}, - {file = "botocore-1.29.165.tar.gz", hash = "sha256:988b948be685006b43c4bbd8f5c0cb93e77c66deb70561994e0c5b31b5a67210"}, -] - -[package.dependencies] -jmespath = ">=0.7.1,<2.0.0" -python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" - -[package.extras] -crt = ["awscrt (==0.16.9)"] - -[[package]] -name = "cachetools" -version = "5.3.1" -description = "Extensible memoizing collections and decorators" -optional = false -python-versions = ">=3.7" -files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, -] - -[[package]] -name = "celery" -version = "5.2.7" -description = "Distributed Task Queue." -optional = false -python-versions = ">=3.7" -files = [ - {file = "celery-5.2.7-py3-none-any.whl", hash = "sha256:138420c020cd58d6707e6257b6beda91fd39af7afde5d36c6334d175302c0e14"}, - {file = "celery-5.2.7.tar.gz", hash = "sha256:fafbd82934d30f8a004f81e8f7a062e31413a23d444be8ee3326553915958c6d"}, -] - -[package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0.3,<9.0" -click-didyoumean = ">=0.0.3" -click-plugins = ">=1.1.1" -click-repl = ">=0.2.0" -kombu = ">=5.2.3,<6.0" -pytz = ">=2021.3" -vine = ">=5.0.0,<6.0" - -[package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] -brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] -couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.32.0)"] -gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.11.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -s3 = ["boto3 (>=1.9.125)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] -tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] -[[package]] -name = "cffi" -version = "1.15.1" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = "*" -files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "channels" -version = "4.0.0" -description = "Brings async, event-driven capabilities to Django 3.2 and up." -optional = false -python-versions = ">=3.7" -files = [ - {file = "channels-4.0.0-py3-none-any.whl", hash = "sha256:2253334ac76f67cba68c2072273f7e0e67dbdac77eeb7e318f511d2f9a53c5e4"}, - {file = "channels-4.0.0.tar.gz", hash = "sha256:0ce53507a7da7b148eaa454526e0e05f7da5e5d1c23440e4886cf146981d8420"}, -] - -[package.dependencies] -asgiref = ">=3.5.0,<4" -daphne = {version = ">=4.0.0", optional = true, markers = "extra == \"daphne\""} -Django = ">=3.2" - -[package.extras] -daphne = ["daphne (>=4.0.0)"] -tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] - -[[package]] -name = "channels-redis" -version = "4.1.0" -description = "Redis-backed ASGI channel layer implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "channels_redis-4.1.0-py3-none-any.whl", hash = "sha256:3696f5b9fe367ea495d402ba83d7c3c99e8ca0e1354ff8d913535976ed0abf73"}, - {file = "channels_redis-4.1.0.tar.gz", hash = "sha256:6bd4f75f4ab4a7db17cee495593ace886d7e914c66f8214a1f247ff6659c073a"}, -] - -[package.dependencies] -asgiref = ">=3.2.10,<4" -channels = "*" -msgpack = ">=1.0,<2.0" -redis = ">=4.5.3" - -[package.extras] -cryptography = ["cryptography (>=1.3.0)"] -tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", "pytest-timeout"] - [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] @@ -697,55 +166,6 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -[[package]] -name = "click-didyoumean" -version = "0.3.0" -description = "Enables git-like *did-you-mean* feature in click" -optional = false -python-versions = ">=3.6.2,<4.0.0" -files = [ - {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, - {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, -] - -[package.dependencies] -click = ">=7" - -[[package]] -name = "click-plugins" -version = "1.1.1" -description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -optional = false -python-versions = "*" -files = [ - {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, - {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, -] - -[package.dependencies] -click = ">=4.0" - -[package.extras] -dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] - -[[package]] -name = "click-repl" -version = "0.3.0" -description = "REPL plugin for Click" -optional = false -python-versions = ">=3.6" -files = [ - {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, - {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, -] - -[package.dependencies] -click = ">=7.0" -prompt-toolkit = ">=3.0.36" - -[package.extras] -testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] - [[package]] name = "colorama" version = "0.4.6" @@ -757,148 +177,15 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "constantly" -version = "15.1.0" -description = "Symbolic constants in Python" -optional = false -python-versions = "*" -files = [ - {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, - {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, -] - -[[package]] -name = "cryptography" -version = "38.0.4" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = ">=3.6" -files = [ - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:2fa36a7b2cc0998a3a4d5af26ccb6273f3df133d61da2ba13b3286261e7efb70"}, - {file = "cryptography-38.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:1f13ddda26a04c06eb57119caf27a524ccae20533729f4b1e4a69b54e07035eb"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2ec2a8714dd005949d4019195d72abed84198d877112abb5a27740e217e0ea8d"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50a1494ed0c3f5b4d07650a68cd6ca62efe8b596ce743a5c94403e6f11bf06c1"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10498349d4c8eab7357a8f9aa3463791292845b79597ad1b98a543686fb1ec8"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:10652dd7282de17990b88679cb82f832752c4e8237f0c714be518044269415db"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bfe6472507986613dc6cc00b3d492b2f7564b02b3b3682d25ca7f40fa3fd321b"}, - {file = "cryptography-38.0.4-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce127dd0a6a0811c251a6cddd014d292728484e530d80e872ad9806cfb1c5b3c"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:53049f3379ef05182864d13bb9686657659407148f901f3f1eee57a733fb4b00"}, - {file = "cryptography-38.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:8a4b2bdb68a447fadebfd7d24855758fe2d6fecc7fed0b78d190b1af39a8e3b0"}, - {file = "cryptography-38.0.4-cp36-abi3-win32.whl", hash = "sha256:1d7e632804a248103b60b16fb145e8df0bc60eed790ece0d12efe8cd3f3e7744"}, - {file = "cryptography-38.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:8e45653fb97eb2f20b8c96f9cd2b3a0654d742b47d638cf2897afbd97f80fa6d"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca57eb3ddaccd1112c18fc80abe41db443cc2e9dcb1917078e02dfa010a4f353"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:c9e0d79ee4c56d841bd4ac6e7697c8ff3c8d6da67379057f29e66acffcd1e9a7"}, - {file = "cryptography-38.0.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0e70da4bdff7601b0ef48e6348339e490ebfb0cbe638e083c9c41fb49f00c8bd"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:998cd19189d8a747b226d24c0207fdaa1e6658a1d3f2494541cb9dfbf7dcb6d2"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67461b5ebca2e4c2ab991733f8ab637a7265bb582f07c7c88914b5afb88cb95b"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4eb85075437f0b1fd8cd66c688469a0c4119e0ba855e3fef86691971b887caf6"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3178d46f363d4549b9a76264f41c6948752183b3f587666aff0555ac50fd7876"}, - {file = "cryptography-38.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6391e59ebe7c62d9902c24a4d8bcbc79a68e7c4ab65863536127c8a9cd94043b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:78e47e28ddc4ace41dd38c42e6feecfdadf9c3be2af389abbfeef1ff06822285"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fb481682873035600b5502f0015b664abc26466153fab5c6bc92c1ea69d478b"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:4367da5705922cf7070462e964f66e4ac24162e22ab0a2e9d31f1b270dd78083"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b4cad0cea995af760f82820ab4ca54e5471fc782f70a007f31531957f43e9dee"}, - {file = "cryptography-38.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:80ca53981ceeb3241998443c4964a387771588c4e4a5d92735a493af868294f9"}, - {file = "cryptography-38.0.4.tar.gz", hash = "sha256:175c1a818b87c9ac80bb7377f5520b7f31b3ef2a0004e2420319beadedb67290"}, -] - -[package.dependencies] -cffi = ">=1.12" - -[package.extras] -docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] -pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] - -[[package]] -name = "daphne" -version = "4.0.0" -description = "Django ASGI (HTTP/WebSocket) server" -optional = false -python-versions = ">=3.7" -files = [ - {file = "daphne-4.0.0-py3-none-any.whl", hash = "sha256:a288ece46012b6b719c37150be67c69ebfca0793a8521bf821533bad983179b2"}, - {file = "daphne-4.0.0.tar.gz", hash = "sha256:cce9afc8f49a4f15d4270b8cfb0e0fe811b770a5cc795474e97e4da287497666"}, -] - -[package.dependencies] -asgiref = ">=3.5.2,<4" -autobahn = ">=22.4.2" -twisted = {version = ">=22.4", extras = ["tls"]} - -[package.extras] -tests = ["django", "hypothesis", "pytest", "pytest-asyncio"] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "dj-rest-auth" -version = "2.2.8" -description = "Authentication and Registration in Django Rest Framework" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dj-rest-auth-2.2.8.tar.gz", hash = "sha256:9fb3492888185ede8b2064ad6803120c7b0b83ab08e2347a02e9b44282374242"}, -] - -[package.dependencies] -Django = ">=2.0" -django-allauth = {version = ">=0.40.0,<0.53.0", optional = true, markers = "extra == \"with_social\""} -djangorestframework = ">=3.7.0" - -[package.extras] -with-social = ["django-allauth (>=0.40.0,<0.53.0)"] - [[package]] name = "django" -version = "3.2.20" +version = "3.2.23" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." optional = false python-versions = ">=3.6" files = [ - {file = "Django-3.2.20-py3-none-any.whl", hash = "sha256:a477ab326ae7d8807dc25c186b951ab8c7648a3a23f9497763c37307a2b5ef87"}, - {file = "Django-3.2.20.tar.gz", hash = "sha256:dec2a116787b8e14962014bf78e120bba454135108e1af9e9b91ade7b2964c40"}, + {file = "Django-3.2.23-py3-none-any.whl", hash = "sha256:d48608d5f62f2c1e260986835db089fa3b79d6f58510881d316b8d88345ae6e1"}, + {file = "Django-3.2.23.tar.gz", hash = "sha256:82968f3640e29ef4a773af2c28448f5f7a08d001c6ac05b32d02aeee6509508b"}, ] [package.dependencies] @@ -910,116 +197,15 @@ sqlparse = ">=0.2.2" argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] -[[package]] -name = "django-allauth" -version = "0.42.0" -description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." -optional = false -python-versions = "*" -files = [ - {file = "django-allauth-0.42.0.tar.gz", hash = "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30"}, -] - -[package.dependencies] -Django = ">=2.0" -python3-openid = ">=3.0.8" -requests = "*" -requests-oauthlib = ">=0.3.0" - -[[package]] -name = "django-auth-ldap" -version = "4.1.0" -description = "Django LDAP authentication backend." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-auth-ldap-4.1.0.tar.gz", hash = "sha256:77f749d3b17807ce8eb56a9c9c8e5746ff316567f81d5ba613495d9c7495a949"}, - {file = "django_auth_ldap-4.1.0-py3-none-any.whl", hash = "sha256:68870e7921e84b1a9867e268a9c8a3e573e8a0d95ea08bcf31be178f5826ff36"}, -] - -[package.dependencies] -Django = ">=2.2" -python-ldap = ">=3.1" - -[[package]] -name = "django-cache-memoize" -version = "0.1.10" -description = "Django utility for a memoization decorator that uses the Django cache framework." -optional = false -python-versions = ">=3.5" -files = [ - {file = "django-cache-memoize-0.1.10.tar.gz", hash = "sha256:63e8faa245a41c0dbad843807e9f21a6e59eba8e6e50df310fdf6485a6749843"}, - {file = "django_cache_memoize-0.1.10-py3-none-any.whl", hash = "sha256:676299313079cde9242ae84db0160e80b1d44e8dd6bc9b1f4f1247e11b30c9e0"}, -] - -[package.extras] -dev = ["black", "flake8", "therapist", "tox", "twine"] - -[[package]] -name = "django-cacheops" -version = "6.1" -description = "A slick ORM cache with automatic granular event-driven invalidation for Django." -optional = false -python-versions = ">=3.5" -files = [ - {file = "django-cacheops-6.1.tar.gz", hash = "sha256:b684ef39fd434189d3cbb7d85417cd972af635289a032447982473b4a89f727d"}, -] - -[package.dependencies] -django = ">=2.1" -funcy = ">=1.8,<2.0" -redis = ">=3.0.0" -six = ">=1.4.0" - -[[package]] -name = "django-cleanup" -version = "6.0.0" -description = "Deletes old files." -optional = false -python-versions = "*" -files = [ - {file = "django-cleanup-6.0.0.tar.gz", hash = "sha256:922e06ef8839c92bd3ab37a84db6058b8764f3fe44dbb4487bbca941d288280a"}, - {file = "django_cleanup-6.0.0-py2.py3-none-any.whl", hash = "sha256:997feab3b1f7a2e84f71c29e83b1d664459ec0d4b1924977b1fa25b5babb8703"}, -] - -[[package]] -name = "django-cors-headers" -version = "3.13.0" -description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-cors-headers-3.13.0.tar.gz", hash = "sha256:f9dc6b4e3f611c3199700b3e5f3398c28757dcd559c2f82932687f3d0443cfdf"}, - {file = "django_cors_headers-3.13.0-py3-none-any.whl", hash = "sha256:37e42883b5f1f2295df6b4bba96eb2417a14a03270cb24b2a07f021cd4487cf4"}, -] - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-dynamic-preferences" -version = "1.14.0" -description = "Dynamic global and instance settings for your django project" -optional = false -python-versions = "*" -files = [ - {file = "django-dynamic-preferences-1.14.0.tar.gz", hash = "sha256:c00abcb8d524067390a66518cfcd32683b87ad3cc620d5913649fc7707b80833"}, -] - -[package.dependencies] -django = ">=3.2" -persisting_theory = "1.0" -six = "*" - [[package]] name = "django-environ" -version = "0.10.0" +version = "0.11.2" description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." optional = false -python-versions = ">=3.5,<4" +python-versions = ">=3.6,<4" files = [ - {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, - {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, + {file = "django-environ-0.11.2.tar.gz", hash = "sha256:f32a87aa0899894c27d4e1776fa6b477e8164ed7f6b3e410a62a6d72caaf64be"}, + {file = "django_environ-0.11.2-py2.py3-none-any.whl", hash = "sha256:0ff95ab4344bfeff693836aa978e6840abef2e2f1145adff7735892711590c05"}, ] [package.extras] @@ -1027,465 +213,26 @@ develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "py docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] -[[package]] -name = "django-filter" -version = "22.1" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-filter-22.1.tar.gz", hash = "sha256:ed473b76e84f7e83b2511bb2050c3efb36d135207d0128dfe3ae4b36e3594ba5"}, - {file = "django_filter-22.1-py3-none-any.whl", hash = "sha256:ed429e34760127e3520a67f415bec4c905d4649fbe45d0d6da37e6ff5e0287eb"}, -] - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-oauth-toolkit" -version = "2.2.0" -description = "OAuth2 Provider for Django" -optional = false -python-versions = "*" -files = [ - {file = "django-oauth-toolkit-2.2.0.tar.gz", hash = "sha256:46890decb24a34e2a5382debeaf7752e50d90b7a11716cf2a9fd067097ec0963"}, - {file = "django_oauth_toolkit-2.2.0-py3-none-any.whl", hash = "sha256:abd85c74af525a62365ec2049113e73a2ff8b46ef906e7104a7ba968ef02a11d"}, -] - -[package.dependencies] -django = ">=2.2,<4.0.0 || >4.0.0" -jwcrypto = ">=0.8.0" -oauthlib = ">=3.1.0" -requests = ">=2.13.0" - -[[package]] -name = "django-redis" -version = "5.2.0" -description = "Full featured redis cache backend for Django." -optional = false -python-versions = ">=3.6" -files = [ - {file = "django-redis-5.2.0.tar.gz", hash = "sha256:8a99e5582c79f894168f5865c52bd921213253b7fd64d16733ae4591564465de"}, - {file = "django_redis-5.2.0-py3-none-any.whl", hash = "sha256:1d037dc02b11ad7aa11f655d26dac3fb1af32630f61ef4428860a2e29ff92026"}, -] - -[package.dependencies] -Django = ">=2.2" -redis = ">=3,<4.0.0 || >4.0.0,<4.0.1 || >4.0.1" - -[package.extras] -hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"] - -[[package]] -name = "django-storages" -version = "1.13.2" -description = "Support for many storage backends in Django" -optional = false -python-versions = ">=3.7" -files = [ - {file = "django-storages-1.13.2.tar.gz", hash = "sha256:cbadd15c909ceb7247d4ffc503f12a9bec36999df8d0bef7c31e57177d512688"}, - {file = "django_storages-1.13.2-py3-none-any.whl", hash = "sha256:31dc5a992520be571908c4c40d55d292660ece3a55b8141462b4e719aa38eab3"}, -] - -[package.dependencies] -Django = ">=3.2" - -[package.extras] -azure = ["azure-storage-blob (>=12.0.0)"] -boto3 = ["boto3 (>=1.4.4)"] -dropbox = ["dropbox (>=7.2.1)"] -google = ["google-cloud-storage (>=1.27.0)"] -libcloud = ["apache-libcloud"] -sftp = ["paramiko (>=1.10.0)"] - -[[package]] -name = "django-versatileimagefield" -version = "2.2" -description = "A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for creating new images from the one assigned to the field." -optional = false -python-versions = "*" -files = [ - {file = "django-versatileimagefield-2.2.tar.gz", hash = "sha256:6569d5c3e13c69ab8912ba5100084aa5abcdcffb8d1f5abc085b226e7bbd65b3"}, - {file = "django_versatileimagefield-2.2-py2.py3-none-any.whl", hash = "sha256:03766f4d2332f192978879fdb196e18c53e6ccef6c55c5c26b59747b76a97288"}, -] - -[package.dependencies] -Pillow = ">=2.4.0" -python-magic = ">=0.4.15,<1.0.0" - -[[package]] -name = "djangorestframework" -version = "3.14.0" -description = "Web APIs for Django, made easy." -optional = false -python-versions = ">=3.6" -files = [ - {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"}, - {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"}, -] - -[package.dependencies] -django = ">=3.0" -pytz = "*" - [[package]] name = "docutils" -version = "0.17.1" +version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] - -[[package]] -name = "drf-spectacular" -version = "0.26.1" -description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -optional = false -python-versions = ">=3.6" -files = [ - {file = "drf-spectacular-0.26.1.tar.gz", hash = "sha256:1599a204bf9cc6be7ef3e509859885a38d4f871fe287a1f191479868afd9e234"}, - {file = "drf_spectacular-0.26.1-py3-none-any.whl", hash = "sha256:6df86ff6c2dc663792e5ff618643bf41d2ac9dc6fb5d1b0f273e2778bab951e5"}, -] - -[package.dependencies] -Django = ">=2.2" -djangorestframework = ">=3.10.3" -inflection = ">=0.3.1" -jsonschema = ">=2.6.0" -PyYAML = ">=5.1" -uritemplate = ">=2.0.0" - -[package.extras] -offline = ["drf-spectacular-sidecar"] -sidecar = ["drf-spectacular-sidecar"] - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, + {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, ] -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "feedparser" -version = "6.0.10" -description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" -optional = false -python-versions = ">=3.6" -files = [ - {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, - {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, -] - -[package.dependencies] -sgmllib3k = "*" - -[[package]] -name = "frozendict" -version = "2.3.8" -description = "A simple immutable dictionary" -optional = false -python-versions = ">=3.6" -files = [ - {file = "frozendict-2.3.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d188d062084fba0e4bf32719ff7380b26c050b932ff164043ce82ab90587c52b"}, - {file = "frozendict-2.3.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2a4e818ac457f6354401dcb631527af25e5a20fcfc81e6b5054b45fc245caca"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a506d807858fa961aaa5b48dab6154fdc6bd045bbe9310788bbff141bb42d13"}, - {file = "frozendict-2.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:750632cc890d8ee9484fe6d31b261159144b6efacc08e1317fe46accd1410373"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ee5fe2658a8ac9a57f748acaf563f6a47f80b8308cbf0a04fac0ba057d41f75"}, - {file = "frozendict-2.3.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23c4bb46e6b8246e1e7e49b5593c2bc09221db0d8f31f7c092be8dfb42b9e620"}, - {file = "frozendict-2.3.8-cp310-cp310-win_amd64.whl", hash = "sha256:c31abc8acea309b132dde441856829f6003a3d242da8b54bce4c0f2a3c8c63f0"}, - {file = "frozendict-2.3.8-cp310-cp310-win_arm64.whl", hash = "sha256:9ea5520e85447ff8d4681e181941e482662817ccba921b7cb3f87922056d892a"}, - {file = "frozendict-2.3.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f83fed36497af9562ead5e9fb8443224ba2781786bd3b92b1087cb7d0ff20135"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27c5c1d29d0eda7979253ec88abc239da1313b38f39f4b16984db3b3e482300"}, - {file = "frozendict-2.3.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c785de7f1a13f15963945f400656b18f057c2fc76c089dacf127a2bb188c03"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8cf35ddd25513428ec152614def9696afb93ae5ec0eb54fa6aa6206eda77ac4c"}, - {file = "frozendict-2.3.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ffc684773de7c88724788fa9787d0016fd75830412d58acbd9ed1a04762c675b"}, - {file = "frozendict-2.3.8-cp36-cp36m-win_amd64.whl", hash = "sha256:4c258aab9c8488338634f2ec670ef049dbf0ab0e7a2fa9bc2c7b5009cb614801"}, - {file = "frozendict-2.3.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47fc26468407fdeb428cfc89495b7921419e670355c21b383765482fdf6c5c14"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea638228692db2bf94bce40ea4b25f4077588497b516bd16576575560094bd9"}, - {file = "frozendict-2.3.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a75bf87e76c4386caecdbdd02a99e53ad43a6b5c38fb3d5a634a9fc9ce41462"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ed5a6c5c7a0f57269577c2a338a6002949aea21a23b7b7d06da7e7dced8b605b"}, - {file = "frozendict-2.3.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d086440328a465dea9bef2dbad7548d75d1a0a0d21f43a08c03e1ec79ac5240e"}, - {file = "frozendict-2.3.8-cp37-cp37m-win_amd64.whl", hash = "sha256:0bc4767e2f83db5b701c787e22380296977368b0c57e485ca71b2eedfa11c4a3"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:638cf363d3cbca31a341503cf2219eac52a5f5140449676fae3d9644cd3c5487"}, - {file = "frozendict-2.3.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b2fd8ce36277919b36e3c834d2389f3cd7ac068ae730c312671dd4439a5dd65"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3957d52f1906b0c85f641a1911d214255873f6408ab4e5ad657cc27a247fb145"}, - {file = "frozendict-2.3.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72cfe08ab8ae524e54848fa90b22d02c1b1ecfb3064438696bcaa4b953f18772"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4742e76c4111bd09198d3ab66cef94be8506212311338f9182d6ef5f5cb60493"}, - {file = "frozendict-2.3.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:313ed8d9ba6bac35d7635cd9580ee5721a0fb016f4d2d20f0efa05dbecbdb1be"}, - {file = "frozendict-2.3.8-cp38-cp38-win_amd64.whl", hash = "sha256:d3c6ce943946c2a61501c8cf116fff0892d11dd579877eb36e2aea2c27fddfef"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0f573dc4861dd7ec9e055c8cceaf45355e894e749f621f199aab7b311ac4bdb"}, - {file = "frozendict-2.3.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b3435e5f1ca5ae68a5e95e64b09d6d5c645cadd6b87569a0b3019dd248c8d00"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:145afd033ebfade28416093335261b8ec1af5cccc593482309e7add062ec8668"}, - {file = "frozendict-2.3.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da98427de26b5a2865727947480cbb53860089c4d195baa29c539da811cea617"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e82befa7c385a668d569cebbebbdf49cee6fea4083f08e869a1b08cfb640a9f"}, - {file = "frozendict-2.3.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:80abe81d36e889ceec665e06ec764a7638000fa3e7be09786ac4d3ddc64b76db"}, - {file = "frozendict-2.3.8-cp39-cp39-win_amd64.whl", hash = "sha256:8ccc94ac781710db44e142e1a11ff9b31d02c032c01c6868d51fcbef73086225"}, - {file = "frozendict-2.3.8-cp39-cp39-win_arm64.whl", hash = "sha256:e72dbc1bcc2203cef38d205f692396f5505921a5680f66aa9a7e8bb71fd38f28"}, - {file = "frozendict-2.3.8-py311-none-any.whl", hash = "sha256:ba41a7ed019bd03b62d63ed3f8dea35b8243d1936f7c9ed4b5298ca45a01928e"}, - {file = "frozendict-2.3.8.tar.gz", hash = "sha256:5526559eca8f1780a4ee5146896f59afc31435313560208dd394a3a5e537d3ff"}, -] - -[[package]] -name = "frozenlist" -version = "1.4.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, - {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, - {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, - {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, - {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, - {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, - {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, - {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, - {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, - {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, - {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, - {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, - {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, - {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, - {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, - {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, - {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, - {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, - {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, - {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, - {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, - {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, -] - -[[package]] -name = "funcy" -version = "1.18" -description = "A fancy and practical functional tools" -optional = false -python-versions = "*" -files = [ - {file = "funcy-1.18-py2.py3-none-any.whl", hash = "sha256:00ce91afc850357a131dc54f0db2ad8a1110d5087f1fa4480d7ea3ba0249f89d"}, - {file = "funcy-1.18.tar.gz", hash = "sha256:15448d19a8ebcc7a585afe7a384a19186d0bd67cbf56fb42cd1fd0f76313f9b2"}, -] - -[[package]] -name = "funkwhale-api" -version = "1.3.3" -description = "Funkwhale API" -optional = false -python-versions = "^3.8" -files = [] -develop = false - -[package.dependencies] -aiohttp = "==3.8.5" -arrow = "==1.2.3" -backports-zoneinfo = {version = "==0.2.1", markers = "python_version < \"3.9\""} -bleach = "==5.0.1" -boto3 = "==1.26.161" -celery = "==5.2.7" -channels = {version = "==4.0.0", extras = ["daphne"]} -channels-redis = "==4.1.0" -click = "==8.1.7" -cryptography = "==38.0.4" -dj-rest-auth = {version = "2.2.8", extras = ["with-social"]} -django = "==3.2.20" -django-allauth = "==0.42.0" -django-auth-ldap = "==4.1.0" -django-cache-memoize = "0.1.10" -django-cacheops = "==6.1" -django-cleanup = "==6.0.0" -django-cors-headers = "==3.13.0" -django-dynamic-preferences = "==1.14.0" -django-environ = "==0.10.0" -django-filter = "==22.1" -django-oauth-toolkit = "2.2.0" -django-redis = "==5.2.0" -django-storages = "==1.13.2" -django-versatileimagefield = "==2.2" -djangorestframework = "==3.14.0" -drf-spectacular = "==0.26.1" -feedparser = "==6.0.10" -gunicorn = "==20.1.0" -ipython = "==7.34.0" -kombu = "==5.2.4" -markdown = "==3.4.4" -musicbrainzngs = "==0.7.1" -mutagen = "==1.46.0" -persisting-theory = "==1.0" -pillow = "==9.3.0" -pluralizer = "==1.2.0" -psycopg2 = "==2.9.7" -pydub = "==0.25.1" -pyld = "==2.0.3" -python-ldap = "==3.4.3" -python-magic = "==0.4.27" -redis = "==4.5.5" -requests = "==2.28.2" -requests-http-message-signatures = "==0.3.1" -sentry-sdk = "==1.19.1" -service-identity = "==21.1.0" -unicode-slugify = "==0.1.5" -uvicorn = {version = "==0.20.0", extras = ["standard"]} -watchdog = "==2.2.1" - -[package.extras] -typesense = ["typesense (==0.15.1)"] - -[package.source] -type = "directory" -url = "../api" - -[[package]] -name = "gunicorn" -version = "20.1.0" -description = "WSGI HTTP Server for UNIX" -optional = false -python-versions = ">=3.5" -files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, -] - -[package.dependencies] -setuptools = ">=3.0" - -[package.extras] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httptools" -version = "0.6.0" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.5.0" -files = [ - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339"}, - {file = "httptools-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3"}, - {file = "httptools-0.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e"}, - {file = "httptools-0.6.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c"}, - {file = "httptools-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51"}, - {file = "httptools-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90"}, - {file = "httptools-0.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb"}, - {file = "httptools-0.6.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38"}, - {file = "httptools-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2"}, - {file = "httptools-0.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d"}, - {file = "httptools-0.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a"}, - {file = "httptools-0.6.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4"}, - {file = "httptools-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1"}, - {file = "httptools-0.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b"}, - {file = "httptools-0.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649"}, - {file = "httptools-0.6.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201"}, - {file = "httptools-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a"}, - {file = "httptools-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9"}, - {file = "httptools-0.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd"}, - {file = "httptools-0.6.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d"}, - {file = "httptools-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd"}, - {file = "httptools-0.6.0.tar.gz", hash = "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796"}, -] - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - -[[package]] -name = "hyperlink" -version = "21.0.0" -description = "A featureful, immutable, and correct URL for Python." -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"}, - {file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"}, -] - -[package.dependencies] -idna = ">=2.5" - [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] @@ -1501,131 +248,32 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] -[[package]] -name = "importlib-resources" -version = "6.0.1" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - -[[package]] -name = "incremental" -version = "22.10.0" -description = "\"A small library that versions your Python projects.\"" -optional = false -python-versions = "*" -files = [ - {file = "incremental-22.10.0-py2.py3-none-any.whl", hash = "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51"}, - {file = "incremental-22.10.0.tar.gz", hash = "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0"}, -] - -[package.extras] -mypy = ["click (>=6.0)", "mypy (==0.812)", "twisted (>=16.4.0)"] -scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] - -[[package]] -name = "inflection" -version = "0.5.1" -description = "A port of Ruby on Rails inflector to Python" -optional = false -python-versions = ">=3.5" -files = [ - {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, - {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, -] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "ipython-7.34.0-py3-none-any.whl", hash = "sha256:c175d2440a1caff76116eb719d40538fbb316e214eda85c5515c303aacbfb23e"}, - {file = "ipython-7.34.0.tar.gz", hash = "sha256:af3bdb46aa292bce5615b1b2ebc76c2080c5f77f54bda2ec72461317273e7cd6"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] - -[[package]] -name = "jedi" -version = "0.19.0" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -1635,233 +283,29 @@ MarkupSafe = ">=2.0" i18n = ["Babel (>=2.7)"] [[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" +name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" optional = false -python-versions = ">=3.7" +python-versions = "*" files = [ - {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, - {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, -] - -[[package]] -name = "jsonschema" -version = "4.19.0" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "livereload-2.6.3-py2.py3-none-any.whl", hash = "sha256:ad4ac6f53b2d62bb6ce1a5e6e96f1f00976a32348afedcb4b6d68df2a1d346e4"}, + {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, ] [package.dependencies] -attrs = ">=22.2.0" -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.7.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, -] - -[package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" - -[[package]] -name = "jwcrypto" -version = "1.5.0" -description = "Implementation of JOSE Web standards" -optional = false -python-versions = ">= 3.6" -files = [ - {file = "jwcrypto-1.5.0.tar.gz", hash = "sha256:2c1dc51cf8e38ddf324795dfe9426dee9dd46caf47f535ccbc18781fba810b8d"}, -] - -[package.dependencies] -cryptography = ">=3.4" -deprecated = "*" - -[[package]] -name = "kombu" -version = "5.2.4" -description = "Messaging library for Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "kombu-5.2.4-py3-none-any.whl", hash = "sha256:8b213b24293d3417bcf0d2f5537b7f756079e3ea232a8386dcc89a59fd2361a4"}, - {file = "kombu-5.2.4.tar.gz", hash = "sha256:37cee3ee725f94ea8bb173eaab7c1760203ea53bbebae226328600f9d2799610"}, -] - -[package.dependencies] -amqp = ">=5.0.9,<6.0.0" -vine = "*" - -[package.extras] -azureservicebus = ["azure-servicebus (>=7.0.0)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (>=3.3.0,<3.12.1)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] -qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.4.1,!=4.0.0,!=4.0.1)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.12)", "pycurl (>=7.44.1,<7.45.0)", "urllib3 (>=1.26.7)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "lxml" -version = "4.9.3" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -files = [ - {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, - {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, - {file = "lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, - {file = "lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, - {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, - {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, - {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, - {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, - {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, - {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, - {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, - {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, - {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, - {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, - {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, - {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, - {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, - {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, - {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, - {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, - {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, - {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, - {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, - {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, - {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, - {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, - {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, - {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, - {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, - {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, - {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, - {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, - {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, - {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, - {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, - {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, - {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, - {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, - {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, - {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, - {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, - {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, - {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, - {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, - {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, -] - -[package.extras] -cssselect = ["cssselect (>=0.7)"] -html5 = ["html5lib"] -htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.35)"] - -[[package]] -name = "markdown" -version = "3.4.4" -description = "Python implementation of John Gruber's Markdown." -optional = false -python-versions = ">=3.7" -files = [ - {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, - {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] -testing = ["coverage", "pyyaml"] +six = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} [[package]] name = "markdown-it-py" -version = "2.2.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, ] [package.dependencies] @@ -1874,99 +318,95 @@ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0 linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] profiling = ["gprof2dot"] -rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - [[package]] name = "mdit-py-plugins" -version = "0.3.5" +version = "0.4.0" description = "Collection of plugins for markdown-it-py" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, - {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, ] [package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" +markdown-it-py = ">=1.0.0,<4.0.0" [package.extras] code-style = ["pre-commit"] -rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +rtd = ["myst-parser", "sphinx-book-theme"] testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] @@ -1980,608 +420,67 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "msgpack" -version = "1.0.5" -description = "MessagePack serializer" -optional = false -python-versions = "*" -files = [ - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"}, - {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"}, - {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"}, - {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"}, - {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"}, - {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"}, - {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"}, - {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"}, - {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"}, - {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"}, - {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"}, - {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"}, - {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"}, - {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"}, - {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"}, - {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"}, - {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"}, - {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"}, - {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"}, - {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"}, - {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"}, - {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"}, - {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"}, - {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"}, - {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"}, - {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"}, - {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"}, - {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"}, - {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"}, - {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"}, - {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"}, - {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"}, -] - -[[package]] -name = "multidict" -version = "6.0.4" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, - {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, - {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, - {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, - {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, - {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, - {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, - {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, - {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, - {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, - {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, - {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, - {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, - {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, - {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, - {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, - {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, - {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, - {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, - {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, - {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, - {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, - {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, - {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, - {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, - {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, - {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, -] - -[[package]] -name = "musicbrainzngs" -version = "0.7.1" -description = "Python bindings for the MusicBrainz NGS and the Cover Art Archive webservices" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "musicbrainzngs-0.7.1-py2.py3-none-any.whl", hash = "sha256:e841a8f975104c0a72290b09f59326050194081a5ae62ee512f41915090e1a10"}, - {file = "musicbrainzngs-0.7.1.tar.gz", hash = "sha256:ab1c0100fd0b305852e65f2ed4113c6de12e68afd55186987b8ed97e0f98e627"}, -] - -[[package]] -name = "mutagen" -version = "1.46.0" -description = "read and write audio tags for many formats" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mutagen-1.46.0-py3-none-any.whl", hash = "sha256:8af0728aa2d5c3ee5a727e28d0627966641fddfe804c23eabb5926a4d770aed5"}, - {file = "mutagen-1.46.0.tar.gz", hash = "sha256:6e5f8ba84836b99fe60be5fb27f84be4ad919bbb6b49caa6ae81e70584b55e58"}, -] - [[package]] name = "myst-parser" -version = "1.0.0" +version = "2.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, - {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, + {file = "myst_parser-2.0.0-py3-none-any.whl", hash = "sha256:7c36344ae39c8e740dad7fdabf5aa6fc4897a813083c6cc9990044eb93656b14"}, + {file = "myst_parser-2.0.0.tar.gz", hash = "sha256:ea929a67a6a0b1683cdbe19b8d2e724cd7643f8aa3e7bb18dd65beac3483bead"}, ] [package.dependencies] -docutils = ">=0.15,<0.20" +docutils = ">=0.16,<0.21" jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.4,<0.4.0" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" pyyaml = "*" -sphinx = ">=5,<7" +sphinx = ">=6,<8" [package.extras] code-style = ["pre-commit (>=3.0,<4.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.8.2,<0.9.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "persisting-theory" -version = "1.0" -description = "Registries that can autodiscover values accross your project apps" -optional = false -python-versions = "*" -files = [ - {file = "persisting-theory-1.0.tar.gz", hash = "sha256:0f840fa22247bcaa514094da7f3b26c602359429ab12d2cd88be06b49a336290"}, - {file = "persisting_theory-1.0-py3-none-any.whl", hash = "sha256:73fe3ba1ea7ab67632a1c292fc5c9fa6d3ebfd0e2ad74defa56e316abf3c8d21"}, -] - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pillow" -version = "9.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"}, - {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"}, - {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"}, - {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"}, - {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"}, - {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"}, - {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"}, - {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"}, - {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"}, - {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"}, - {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"}, - {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"}, - {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"}, - {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"}, - {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"}, - {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"}, - {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"}, - {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"}, - {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"}, - {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"}, - {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"}, - {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"}, - {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"}, - {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"}, - {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"}, - {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"}, - {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"}, - {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"}, - {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - -[[package]] -name = "pluralizer" -version = "1.2.0" -description = "Singularize or pluralize a given word useing a pre-defined list of rules" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pluralizer-1.2.0-py3-none-any.whl", hash = "sha256:d8f92ffa787661d9e704d1e0d8abc6c6c4bbaae9e790d7c709707eafbe17ed12"}, - {file = "pluralizer-1.2.0.tar.gz", hash = "sha256:fe3fb8e1e53fabf372e77d8cbebe04b0f8fc7db853aeff50095dbd5628ac39c5"}, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.39" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psycopg2" -version = "2.9.7" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, - {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, - {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, - {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, - {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, - {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, - {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, - {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, - {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, - {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "pyasn1" -version = "0.5.0" -description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, -] - -[[package]] -name = "pyasn1-modules" -version = "0.3.0" -description = "A collection of ASN.1-based protocols modules" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, - {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, -] - -[package.dependencies] -pyasn1 = ">=0.4.6,<0.6.0" - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pydub" -version = "0.25.1" -description = "Manipulate audio with an simple and easy high level interface" -optional = false -python-versions = "*" -files = [ - {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, - {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] - -[[package]] -name = "pyld" -version = "2.0.3" -description = "Python implementation of the JSON-LD API" -optional = false -python-versions = "*" -files = [ - {file = "PyLD-2.0.3.tar.gz", hash = "sha256:287445f888c3a332ccbd20a14844c66c2fcbaeab3c99acd506a0788e2ebb2f82"}, -] - -[package.dependencies] -cachetools = "*" -frozendict = "*" -lxml = "*" - -[package.extras] -aiohttp = ["aiohttp"] -cachetools = ["cachetools"] -frozendict = ["frozendict"] -requests = ["requests"] - -[[package]] -name = "pyopenssl" -version = "23.2.0" -description = "Python wrapper module around the OpenSSL library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, - {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, -] - -[package.dependencies] -cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" - -[package.extras] -docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] -test = ["flaky", "pretend", "pytest (>=3.0.1)"] - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-ldap" -version = "3.4.3" -description = "Python modules for implementing LDAP clients" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, -] - -[package.dependencies] -pyasn1 = ">=0.3.7" -pyasn1_modules = ">=0.1.5" - -[[package]] -name = "python-magic" -version = "0.4.27" -description = "File type identification using libmagic" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, - {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, -] - -[[package]] -name = "python3-openid" -version = "3.2.0" -description = "OpenID support for modern servers and consumers." -optional = false -python-versions = "*" -files = [ - {file = "python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf"}, - {file = "python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b"}, -] - -[package.dependencies] -defusedxml = "*" - -[package.extras] -mysql = ["mysql-connector-python"] -postgresql = ["psycopg2"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytz" -version = "2023.3.post1" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -2596,6 +495,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2603,8 +503,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2621,6 +528,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2628,311 +536,48 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] -name = "redis" -version = "4.5.5" -description = "Python client for Redis database and key-value store" +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" files = [ - {file = "redis-4.5.5-py3-none-any.whl", hash = "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119"}, - {file = "redis-4.5.5.tar.gz", hash = "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.2", markers = "python_full_version <= \"3.11.2\""} - -[package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - -[[package]] -name = "referencing" -version = "0.30.2" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - -[[package]] -name = "requests" -version = "2.28.2" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7, <4" -files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "requests-http-message-signatures" -version = "0.3.1" -description = "A request authentication plugin implementing IETF HTTP Message Signatures" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "requests-http-message-signatures-0.3.1.tar.gz", hash = "sha256:0235bb5cd3f4a7d659645e2ac937da72791321434e77570f7e21042e510820da"}, - {file = "requests_http_message_signatures-0.3.1-py3-none-any.whl", hash = "sha256:c20d49adecbebdccfa98676b0760c12a8c2753d262dcb3a8f54cd672794bfb85"}, -] - -[package.dependencies] -cryptography = ">=1.8.2" -requests = ">=2,<3" - -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "rpds-py" -version = "0.10.2" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "rpds_py-0.10.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:9f00d54b18dd837f1431d66b076737deb7c29ce3ebb8412ceaf44d5e1954ac0c"}, - {file = "rpds_py-0.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f4d561f4728f825e3b793a53064b606ca0b6fc264f67d09e54af452aafc5b82"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:013d6c784150d10236a74b4094a79d96a256b814457e388fc5a4ba9efe24c402"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd1142d22fdb183a0fff66d79134bf644401437fed874f81066d314c67ee193c"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a0536ed2b9297c75104e1a3da330828ba1b2639fa53b38d396f98bf7e3c68df"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:41bd430b7b63aa802c02964e331ac0b177148fef5f807d2c90d05ce71a52b4d4"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e8474f7233fe1949ce4e03bea698a600c2d5d6b51dab6d6e6336dbe69acf23e"}, - {file = "rpds_py-0.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d9d7efaad48b859053b90dedd69bc92f2095084251e732e4c57ac9726bcb1e64"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5612b0b1de8d5114520094bd5fc3d04eb8af6f3e10d48ef05b7c8e77c1fd9545"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5d5eaf988951f6ecb6854ca3300b87123599c711183c83da7ce39717a7cbdbce"}, - {file = "rpds_py-0.10.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:75c8766734ac0053e1d683567e65e85306c4ec62631b0591caeb287ac8f72e08"}, - {file = "rpds_py-0.10.2-cp310-none-win32.whl", hash = "sha256:8de9b88f0cbac73cfed34220d13c57849e62a7099a714b929142425e926d223a"}, - {file = "rpds_py-0.10.2-cp310-none-win_amd64.whl", hash = "sha256:2275f1a022e2383da5d2d101fe11ccdcbae799148c4b83260a4b9309fa3e1fc2"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dd91a7d7a9ce7f4983097c91ce211f3e5569cc21caa16f2692298a07e396f82b"}, - {file = "rpds_py-0.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e82b4a70cc67094f3f3fd77579702f48fcf1de7bdc67d79b8f1e24d089a6162c"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e281b71922208e00886e4b7ffbfcf27874486364f177418ab676f102130e7ec9"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3eb1a0d2b6d232d1bcdfc3fcc5f7b004ab3fbd9203011a3172f051d4527c0b6"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02945ae38fd78efc40900f509890de84cfd5ffe2cd2939eeb3a8800dc68b87cb"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccfb77f6dc8abffa6f1c7e3975ed9070a41ce5fcc11154d2bead8c1baa940f09"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af52078719209bef33e38131486fd784832dd8d1dc9b85f00a44f6e7437dd021"}, - {file = "rpds_py-0.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56ba7c1100ed079527f2b995bf5486a2e557e6d5b733c52e8947476338815b69"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:899b03a3be785a7e1ff84b237da71f0efa2f021512f147dd34ffdf7aa82cb678"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22e6de18f00583f06928cc8d0993104ecc62f7c6da6478db2255de89a30e45d1"}, - {file = "rpds_py-0.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:edd74b760a6bb950397e7a7bd2f38e6700f6525062650b1d77c6d851b82f02c2"}, - {file = "rpds_py-0.10.2-cp311-none-win32.whl", hash = "sha256:18909093944727e068ebfc92e2e6ed1c4fa44135507c1c0555213ce211c53214"}, - {file = "rpds_py-0.10.2-cp311-none-win_amd64.whl", hash = "sha256:9568764e72d85cf7855ca78b48e07ed1be47bf230e2cea8dabda3c95f660b0ff"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:0fc625059b83695fbb4fc8b7a8b66fa94ff9c7b78c84fb9986cd53ff88a28d80"}, - {file = "rpds_py-0.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c86231c66e4f422e7c13ea6200bb4048b3016c8bfd11b4fd0dabd04d2c8e3501"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56777c57246e048908b550af9b81b0ec9cf804fd47cb7502ccd93238bd6025c2"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4cb372e22e9c879bd9a9cc9b20b7c1fbf30a605ac953da45ecec05d8a6e1c77"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa3b3a43dabc4cc57a7800f526cbe03f71c69121e21b863fdf497b59b462b163"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d222086daa55421d599609b32d0ebe544e57654c4a0a1490c54a7ebaa67561"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:529aab727f54a937085184e7436e1d0e19975cf10115eda12d37a683e4ee5342"}, - {file = "rpds_py-0.10.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e9b1531d6a898bdf086acb75c41265c7ec4331267d7619148d407efc72bd24"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c2772bb95062e3f9774140205cd65d8997e39620715486cf5f843cf4ad8f744c"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ba1b28e44f611f3f2b436bd8290050a61db4b59a8e24be4465f44897936b3824"}, - {file = "rpds_py-0.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5aba767e64b494483ad60c4873bec78d16205a21f8247c99749bd990d9c846c2"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:e1954f4b239d1a92081647eecfd51cbfd08ea16eb743b8af1cd0113258feea14"}, - {file = "rpds_py-0.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de4a2fd524993578fe093044f291b4b24aab134390030b3b9b5f87fd41ab7e75"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e69737bd56006a86fd5a78b2b85447580a6138c930a75eb9ef39fe03d90782b1"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f40abbcc0a7d9a8a80870af839d317e6932533f98682aabd977add6c53beeb23"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29ec8507664f94cc08457d98cfc41c3cdbddfa8952438e644177a29b04937876"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcde80aefe7054fad6277762fb7e9d35c72ea479a485ae1bb14629c640987b30"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65de5c02884760a14a58304fb6303f9ddfc582e630f385daea871e1bdb18686"}, - {file = "rpds_py-0.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e92e5817eb6bfed23aa5e45bfe30647b83602bdd6f9e25d63524d4e6258458b0"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2c8fc6c841ada60a86d29c9ebe2e8757c47eda6553f3596c560e59ca6e9b6fa1"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8557c807388e6617161fe51b1a4747ea8d1133f2d2ad8e79583439abebe58fbd"}, - {file = "rpds_py-0.10.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:00e97d43a36811b78fa9ad9d3329bf34f76a31e891a7031a2ac01450c9b168ab"}, - {file = "rpds_py-0.10.2-cp38-none-win32.whl", hash = "sha256:1ed3d5385d14be894e12a9033be989e012214a9811e7194849c94032ad69682a"}, - {file = "rpds_py-0.10.2-cp38-none-win_amd64.whl", hash = "sha256:02b4a2e28eb24dac4ef43dda4f6a6f7766e355179b143f7d0c76a1c5488a307b"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:2a55631b93e47956fbc97d69ba2054a8c6a4016f9a3064ec4e031f5f1030cb90"}, - {file = "rpds_py-0.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ffbf1b38c88d0466de542e91b08225d51782282512f8e2b11715126c41fda48"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213f9ef5c02ec2f883c1075d25a873149daadbaea50d18d622e9db55ec9849c2"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b00150a9a3fd0a8efaa90bc2696c105b04039d50763dd1c95a34c88c5966cb57"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ab0f7aabdbce4a202e013083eeab71afdb85efa405dc4a06fea98cde81204675"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cd0c9fb5d40887500b4ed818770c68ab4fa6e0395d286f9704be6751b1b7d98"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8578fc6c8bdd0201327503720fa581000b4bd3934abbf07e2628d1ad3de157d"}, - {file = "rpds_py-0.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d27d08056fcd61ff47a0cd8407eff4d3e816c82cb6b9c6f0ce9a0ad49225f81"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c8f6526df47953b07c45b95c4d1da6b9a0861c0e5da0271db96bb1d807825412"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:177c033e467a66a054dd3a9534167234a3d0b2e41445807b13b626e01da25d92"}, - {file = "rpds_py-0.10.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c74cbee9e532dc34371127f7686d6953e5153a1f22beab7f953d95ee4a0fe09"}, - {file = "rpds_py-0.10.2-cp39-none-win32.whl", hash = "sha256:05a1382905026bdd560f806c8c7c16e0f3e3fb359ba8868203ca6e5799884968"}, - {file = "rpds_py-0.10.2-cp39-none-win_amd64.whl", hash = "sha256:3fd503c27e7b7034128e30847ecdb4bff4ca5e60f29ad022a9f66ae8940d54ac"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a96147791e49e84207dd1530109aa0e9eeaf1c8b7a59f150047fc0fcdf9bb64"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:203eb1532d51591d32e8dfafd60b5d31347ea7278c8da02b4b550287f6abe28b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2f416cdfe92f5fbb77177f5f3f7830059d1582db05f2c7119bf80069d1ab69b"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b2660000e1a113869c86eb5cc07f3343467490f3cd9d0299f81da9ddae7137b7"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1adb04e4b4e41bf30aaa77eeb169c1b9ba9e5010e2e6ce8d6c17e1446edc9b68"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2bca97521ee786087f0c5ef318fef3eef0266a9c3deff88205523cf353af7394"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4969592e3cdeefa4cbb15a26cec102cbd4a1d6e5b695fac9fa026e19741138c8"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df61f818edf7c8626bfa392f825860fb670b5f8336e238eb0ec7e2a5689cdded"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b589d93a60e78fe55d5bc76ee8c2bf945dbdbb7cd16044c53e0307604e448de1"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:73da69e1f612c3e682e34dcb971272d90d6f27b2c99acff444ca455a89978574"}, - {file = "rpds_py-0.10.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:89438e8885a186c69fe31f7ef98bb2bf29688c466c3caf9060f404c0be89ae80"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c4ecc4e9a5d73a816cae36ee6b5d8b7a0c72013cae1e101406e832887c3dc2d8"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:907b214da5d2fcff0b6ddb83de1333890ca92abaf4bbf8d9c61dc1b95c87fd6e"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb44644371eaa29a3aba7b69b1862d0d56f073bb7585baa32e4271a71a91ee82"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:80c3cf46511653f94dfe07c7c79ab105c4164d6e1dfcb35b7214fb9af53eaef4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaba0613c759ebf95988a84f766ca6b7432d55ce399194f95dde588ad1be0878"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0527c97dcd8bb983822ee31d3760187083fd3ba18ac4dd22cf5347c89d5628f4"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cdfd649011ce2d90cb0dd304c5aba1190fac0c266d19a9e2b96b81cfd150a09"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75eea40355a8690459c7291ce6c8ce39c27bd223675c7da6619f510c728feb97"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1b804cfad04f862d6a84af9d1ad941b06f671878f0f7ecad6c92007d423de6"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:bf77f9017fcfa1232f98598a637406e6c33982ccba8a5922339575c3e2b90ea5"}, - {file = "rpds_py-0.10.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:46c4c550bf59ce05d6bff2c98053822549aaf9fbaf81103edea325e03350bca1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:46af4a742b90c7460e94214f923452c2c1d050a9da1d2b8d4c70cbc045e692b7"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2a86d246a160d98d820ee7d02dc18c923c228de095be362e57b9fd8970b2c4a1"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae141c9017f8f473a6ee07a9425da021816a9f8c0683c2e5442f0ccf56b0fc62"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1147bc3d0dd1e549d991110d0a09557ec9f925dbc1ca62871fcdab2ec9d716b"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fce7a8ee8d0f682c953c0188735d823f0fcb62779bf92cd6ba473a8e730e26ad"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c7f9d70f99e1fbcbf57c75328b80e1c0a7f6cad43e75efa90a97221be5efe15"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b309908b6ff5ffbf6394818cb73b5a2a74073acee2c57fe8719046389aeff0d"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ff1f585a0fdc1415bd733b804f33d386064a308672249b14828130dd43e7c31"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0188b580c490bccb031e9b67e9e8c695a3c44ac5e06218b152361eca847317c3"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:abe081453166e206e3a8c6d8ace57214c17b6d9477d7601ac14a365344dbc1f4"}, - {file = "rpds_py-0.10.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9118de88c16947eaf5b92f749e65b0501ea69e7c2be7bd6aefc12551622360e1"}, - {file = "rpds_py-0.10.2.tar.gz", hash = "sha256:289073f68452b96e70990085324be7223944c7409973d13ddfe0eea1c1b5663b"}, -] - -[[package]] -name = "s3transfer" -version = "0.6.2" -description = "An Amazon S3 Transfer Manager" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "s3transfer-0.6.2-py3-none-any.whl", hash = "sha256:b014be3a8a2aab98cfe1abc7229cc5a9a0cf05eb9c1f2b86b230fd8df3f78084"}, - {file = "s3transfer-0.6.2.tar.gz", hash = "sha256:cab66d3380cca3e70939ef2255d01cd8aece6a4907a9528740f668c4b0611861"}, -] - -[package.dependencies] -botocore = ">=1.12.36,<2.0a.0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] - -[[package]] -name = "sentry-sdk" -version = "1.19.1" -description = "Python client for Sentry (https://sentry.io)" -optional = false -python-versions = "*" -files = [ - {file = "sentry-sdk-1.19.1.tar.gz", hash = "sha256:7ae78bd921981a5010ab540d6bdf3b793659a4db8cccf7f16180702d48a80d84"}, - {file = "sentry_sdk-1.19.1-py2.py3-none-any.whl", hash = "sha256:885a11c69df23e53eb281d003b9ff15a5bdfa43d8a2a53589be52104a1b4582f"}, -] - -[package.dependencies] -certifi = "*" -urllib3 = {version = ">=1.26.11", markers = "python_version >= \"3.6\""} - -[package.extras] -aiohttp = ["aiohttp (>=3.5)"] -arq = ["arq (>=0.23)"] -beam = ["apache-beam (>=2.12)"] -bottle = ["bottle (>=0.12.13)"] -celery = ["celery (>=3)"] -chalice = ["chalice (>=1.16.0)"] -django = ["django (>=1.8)"] -falcon = ["falcon (>=1.4)"] -fastapi = ["fastapi (>=0.79.0)"] -flask = ["blinker (>=1.1)", "flask (>=0.11)"] -grpcio = ["grpcio (>=1.21.1)"] -httpx = ["httpx (>=0.16.0)"] -huey = ["huey (>=2)"] -opentelemetry = ["opentelemetry-distro (>=0.35b0)"] -pure-eval = ["asttokens", "executing", "pure-eval"] -pymongo = ["pymongo (>=3.1)"] -pyspark = ["pyspark (>=2.4.4)"] -quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] -rq = ["rq (>=0.6)"] -sanic = ["sanic (>=0.8)"] -sqlalchemy = ["sqlalchemy (>=1.2)"] -starlette = ["starlette (>=0.19.1)"] -starlite = ["starlite (>=1.48)"] -tornado = ["tornado (>=5)"] - -[[package]] -name = "service-identity" -version = "21.1.0" -description = "Service identity verification for pyOpenSSL & cryptography." -optional = false -python-versions = "*" -files = [ - {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, - {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, -] - -[package.dependencies] -attrs = ">=19.1.0" -cryptography = "*" -pyasn1 = "*" -pyasn1-modules = "*" -six = "*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "idna", "pyOpenSSL", "pytest", "sphinx"] -docs = ["furo", "sphinx"] -idna = ["idna"] -tests = ["coverage[toml] (>=5.0.2)", "pytest"] - [[package]] name = "setuptools" -version = "68.2.0" +version = "69.0.3" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-68.2.0-py3-none-any.whl", hash = "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"}, - {file = "setuptools-68.2.0.tar.gz", hash = "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48"}, + {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, + {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "sgmllib3k" -version = "1.0.0" -description = "Py3k port of sgmllib." -optional = false -python-versions = "*" -files = [ - {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, -] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -2945,17 +590,6 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "sniffio" -version = "1.3.0" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - [[package]] name = "snowballstemmer" version = "2.2.0" @@ -2969,38 +603,57 @@ files = [ [[package]] name = "sphinx" -version = "5.3.0" +version = "7.2.6" description = "Python documentation generator" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" files = [ - {file = "Sphinx-5.3.0.tar.gz", hash = "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"}, - {file = "sphinx-5.3.0-py3-none-any.whl", hash = "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d"}, + {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, + {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, ] [package.dependencies] alabaster = ">=0.7,<0.8" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.20" +docutils = ">=0.18.1,<0.21" imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.12" -requests = ">=2.5.0" +Pygments = ">=2.14" +requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" +sphinxcontrib-serializinghtml = ">=1.1.9" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-bugbear", "flake8-comprehensions", "flake8-simplify", "isort", "mypy (>=0.981)", "sphinx-lint", "types-requests", "types-typed-ast"] -test = ["cython", "html5lib", "pytest (>=4.6)", "typed_ast"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] + +[[package]] +name = "sphinx-autobuild" +version = "2024.2.4" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +optional = false +python-versions = ">=3.9" +files = [ + {file = "sphinx_autobuild-2024.2.4-py3-none-any.whl", hash = "sha256:63fd87ab7505872a89aef468ce6503f65e794a195f4ae62269db3b85b72d4854"}, + {file = "sphinx_autobuild-2024.2.4.tar.gz", hash = "sha256:cb9d2121a176d62d45471624872afc5fad7755ad662738abe400ecf4a7954303"}, +] + +[package.dependencies] +colorama = "*" +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest (>=6.0)", "pytest-cov"] [[package]] name = "sphinx-copybutton" @@ -3022,35 +675,36 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] [[package]] name = "sphinx-design" -version = "0.3.0" +version = "0.5.0" description = "A sphinx extension for designing beautiful, view size responsive web components." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "sphinx_design-0.3.0-py3-none-any.whl", hash = "sha256:823c1dd74f31efb3285ec2f1254caefed29d762a40cd676f58413a1e4ed5cc96"}, - {file = "sphinx_design-0.3.0.tar.gz", hash = "sha256:7183fa1fae55b37ef01bda5125a21ee841f5bbcbf59a35382be598180c4cefba"}, + {file = "sphinx_design-0.5.0-py3-none-any.whl", hash = "sha256:1af1267b4cea2eedd6724614f19dcc88fe2e15aff65d06b2f6252cee9c4f4c1e"}, + {file = "sphinx_design-0.5.0.tar.gz", hash = "sha256:e8e513acea6f92d15c6de3b34e954458f245b8e761b45b63950f65373352ab00"}, ] [package.dependencies] -sphinx = ">=4,<6" +sphinx = ">=5,<8" [package.extras] -code-style = ["pre-commit (>=2.12,<3.0)"] -rtd = ["myst-parser (>=0.18.0,<0.19.0)"] -testing = ["myst-parser (>=0.18.0,<0.19.0)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] -theme-furo = ["furo (>=2022.06.04,<2022.07)"] -theme-pydata = ["pydata-sphinx-theme (>=0.9.0,<0.10.0)"] +code-style = ["pre-commit (>=3,<4)"] +rtd = ["myst-parser (>=1,<3)"] +testing = ["myst-parser (>=1,<3)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2023.7.0,<2023.8.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] -theme-sbt = ["sphinx-book-theme (>=0.3.0,<0.4.0)"] +theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] [[package]] name = "sphinx-intl" -version = "2.0.1" +version = "2.1.0" description = "Sphinx utility that make it easy to translate and to apply translation." optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, + {file = "sphinx-intl-2.1.0.tar.gz", hash = "sha256:9d9849ae42515b39786824e99f1e30db0404c377b01bb022690fc932b0221c02"}, + {file = "sphinx_intl-2.1.0-py3-none-any.whl", hash = "sha256:9798946b995989de691387651d70c3fc191275b587e2e519655541edfd7bbd68"}, ] [package.dependencies] @@ -3060,72 +714,89 @@ setuptools = "*" sphinx = "*" [package.extras] -test = ["mock", "pytest"] -transifex = ["transifex_client (>=0.11)"] +test = ["mock", "pytest", "six"] [[package]] name = "sphinx-rtd-theme" -version = "1.1.1" +version = "2.0.0" description = "Read the Docs theme for Sphinx" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "sphinx_rtd_theme-1.1.1-py2.py3-none-any.whl", hash = "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7"}, - {file = "sphinx_rtd_theme-1.1.1.tar.gz", hash = "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"}, + {file = "sphinx_rtd_theme-2.0.0-py2.py3-none-any.whl", hash = "sha256:ec93d0856dc280cf3aee9a4c9807c60e027c7f7b461b77aeffed682e68f0e586"}, + {file = "sphinx_rtd_theme-2.0.0.tar.gz", hash = "sha256:bd5d7b80622406762073a04ef8fadc5f9151261563d47027de09910ce03afe6b"}, ] [package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" +docutils = "<0.21" +sphinx = ">=5,<8" +sphinxcontrib-jquery = ">=4,<5" [package.extras] dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.8-py3-none-any.whl", hash = "sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4"}, + {file = "sphinxcontrib_applehelp-1.0.8.tar.gz", hash = "sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.6" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.6-py3-none-any.whl", hash = "sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f"}, + {file = "sphinxcontrib_devhelp-1.0.6.tar.gz", hash = "sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.5-py3-none-any.whl", hash = "sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04"}, + {file = "sphinxcontrib_htmlhelp-2.0.5.tar.gz", hash = "sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, +] + +[package.dependencies] +Sphinx = ">=1.8" + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" @@ -3142,43 +813,45 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-mermaid" -version = "0.7.1" +version = "0.9.2" description = "Mermaid diagrams in yours Sphinx powered docs" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "sphinxcontrib-mermaid-0.7.1.tar.gz", hash = "sha256:aa8a40b50ec86ad12824b62180240ca52a9bda8424455d7eb252eae9aa5d293c"}, - {file = "sphinxcontrib_mermaid-0.7.1-py2.py3-none-any.whl", hash = "sha256:3e20de1937c30dfa807e446bf99983d73d0dd3dc5c6524addda59800fe928762"}, + {file = "sphinxcontrib-mermaid-0.9.2.tar.gz", hash = "sha256:252ef13dd23164b28f16d8b0205cf184b9d8e2b714a302274d9f59eb708e77af"}, + {file = "sphinxcontrib_mermaid-0.9.2-py3-none-any.whl", hash = "sha256:6795a72037ca55e65663d2a2c1a043d636dc3d30d418e56dd6087d1459d98a5d"}, ] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.7" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.7-py3-none-any.whl", hash = "sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182"}, + {file = "sphinxcontrib_qthelp-1.0.7.tar.gz", hash = "sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.10" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.10-py3-none-any.whl", hash = "sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7"}, + {file = "sphinxcontrib_serializinghtml-1.1.10.tar.gz", hash = "sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f"}, ] [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] @@ -3198,657 +871,69 @@ doc = ["sphinx"] test = ["pytest", "pytest-cov"] [[package]] -name = "traitlets" -version = "5.9.0" -description = "Traitlets Python configuration system" +name = "tornado" +version = "6.4" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">=3.7" +python-versions = ">= 3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] - -[[package]] -name = "twisted" -version = "23.8.0" -description = "An asynchronous networking framework written in Python" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "twisted-23.8.0-py3-none-any.whl", hash = "sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd"}, - {file = "twisted-23.8.0.tar.gz", hash = "sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24"}, -] - -[package.dependencies] -attrs = ">=21.3.0" -automat = ">=0.8.0" -constantly = ">=15.1" -hyperlink = ">=17.1.1" -idna = {version = ">=2.4", optional = true, markers = "extra == \"tls\""} -incremental = ">=22.10.0" -pyopenssl = {version = ">=21.0.0", optional = true, markers = "extra == \"tls\""} -service-identity = {version = ">=18.1.0", optional = true, markers = "extra == \"tls\""} -twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} -typing-extensions = ">=3.10.0" -zope-interface = ">=5" - -[package.extras] -all-non-platform = ["twisted[conch,contextvars,http2,serial,test,tls]", "twisted[conch,contextvars,http2,serial,test,tls]"] -conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] -contextvars = ["contextvars (>=2.4,<3)"] -dev = ["coverage (>=6b1,<7)", "pyflakes (>=2.2,<3.0)", "python-subunit (>=1.4,<2.0)", "twisted[dev-release]", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.4.0,<23.5.0)", "pydoctor (>=23.4.0,<23.5.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "readthedocs-sphinx-ext (>=2.2,<3.0)", "sphinx (>=5,<7)", "sphinx (>=5,<7)", "sphinx-rtd-theme (>=1.2,<2.0)", "sphinx-rtd-theme (>=1.2,<2.0)", "towncrier (>=22.12,<23.0)", "towncrier (>=22.12,<23.0)", "urllib3 (<2)", "urllib3 (<2)"] -gtk-platform = ["pygobject", "pygobject", "twisted[all-non-platform]", "twisted[all-non-platform]"] -http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "twisted[all-non-platform]", "twisted[all-non-platform]"] -mypy = ["mypy (==0.981)", "mypy-extensions (==0.4.3)", "mypy-zope (==0.3.11)", "twisted[all-non-platform,dev]", "types-pyopenssl", "types-setuptools"] -osx-platform = ["twisted[macos-platform]", "twisted[macos-platform]"] -serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] -test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] -tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platform]", "twisted[all-non-platform]"] - -[[package]] -name = "twisted-iocpsupport" -version = "1.0.4" -description = "An extension for use in the twisted I/O Completion Ports reactor." -optional = false -python-versions = "*" -files = [ - {file = "twisted-iocpsupport-1.0.4.tar.gz", hash = "sha256:858096c0d15e33f15ac157f455d8f86f2f2cdd223963e58c0f682a3af8362d89"}, - {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win32.whl", hash = "sha256:afa2b630797f9ed2f27f3d9f55e3f72b4244911e45a8c82756f44babbf0b243e"}, - {file = "twisted_iocpsupport-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:0058c963c8957bcd3deda62122e89953c9de1e867a274facc9b15dde1a9f31e8"}, - {file = "twisted_iocpsupport-1.0.4-cp311-cp311-win32.whl", hash = "sha256:196f7c7ccad4ba4d1783b1c4e1d1b22d93c04275cd780bf7498d16c77319ad6e"}, - {file = "twisted_iocpsupport-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:4e5f97bcbabdd79cbaa969b63439b89801ea560f11d42b0a387634275c633623"}, - {file = "twisted_iocpsupport-1.0.4-cp312-cp312-win32.whl", hash = "sha256:6081bd7c2f4fcf9b383dcdb3b3385d75a26a7c9d2be25b6950c3d8ea652d2d2d"}, - {file = "twisted_iocpsupport-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:76f7e67cec1f1d097d1f4ed7de41be3d74546e1a4ede0c7d56e775c4dce5dfb0"}, - {file = "twisted_iocpsupport-1.0.4-cp36-cp36m-win32.whl", hash = "sha256:3d306fc4d88a6bcf61ce9d572c738b918578121bfd72891625fab314549024b5"}, - {file = "twisted_iocpsupport-1.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:391ac4d6002a80e15f35adc4ad6056f4fe1c17ceb0d1f98ba01b0f4f917adfd7"}, - {file = "twisted_iocpsupport-1.0.4-cp37-cp37m-win32.whl", hash = "sha256:0c1b5cf37f0b2d96cc3c9bc86fff16613b9f5d0ca565c96cf1f1fb8cfca4b81c"}, - {file = "twisted_iocpsupport-1.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:3c5dc11d72519e55f727320e3cee535feedfaee09c0f0765ed1ca7badff1ab3c"}, - {file = "twisted_iocpsupport-1.0.4-cp38-cp38-win32.whl", hash = "sha256:cc86c2ef598c15d824a243c2541c29459881c67fc3c0adb6efe2242f8f0ec3af"}, - {file = "twisted_iocpsupport-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c27985e949b9b1a1fb4c20c71d315c10ea0f93fdf3ccdd4a8c158b5926edd8c8"}, - {file = "twisted_iocpsupport-1.0.4-cp39-cp39-win32.whl", hash = "sha256:e311dfcb470696e3c077249615893cada598e62fa7c4e4ca090167bd2b7d331f"}, - {file = "twisted_iocpsupport-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:4574eef1f3bb81501fb02f911298af3c02fe8179c31a33b361dd49180c3e644d"}, - {file = "twisted_iocpsupport-1.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:872747a3b64e2909aee59c803ccd0bceb9b75bf27915520ebd32d69687040fa2"}, - {file = "twisted_iocpsupport-1.0.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:c2712b778bacf1db434e3e065adfed3db300754186a29aecac1efae9ef4bcaff"}, - {file = "twisted_iocpsupport-1.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7c66fa0aa4236b27b3c61cb488662d85dae746a6d1c7b0d91cf7aae118445adf"}, - {file = "twisted_iocpsupport-1.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:300437af17396a945a58dcfffd77863303a8b6d9e65c6e81f1d2eed55b50d444"}, -] - -[[package]] -name = "txaio" -version = "23.1.1" -description = "Compatibility API between asyncio/Twisted/Trollius" -optional = false -python-versions = ">=3.7" -files = [ - {file = "txaio-23.1.1-py2.py3-none-any.whl", hash = "sha256:aaea42f8aad50e0ecfb976130ada140797e9dcb85fad2cf72b0f37f8cefcb490"}, - {file = "txaio-23.1.1.tar.gz", hash = "sha256:f9a9216e976e5e3246dfd112ad7ad55ca915606b60b84a757ac769bd404ff704"}, -] - -[package.extras] -all = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] -dev = ["pep8 (>=1.6.2)", "pyenchant (>=1.6.6)", "pytest (>=2.6.4)", "pytest-cov (>=1.8.1)", "sphinx (>=1.2.3)", "sphinx-rtd-theme (>=0.1.9)", "sphinxcontrib-spelling (>=2.1.2)", "tox (>=2.1.1)", "tox-gh-actions (>=2.2.0)", "twine (>=1.6.5)", "wheel"] -twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] - [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "unicode-slugify" -version = "0.1.5" -description = "A slug generator that turns strings into unicode slugs." -optional = false -python-versions = "*" -files = [ - {file = "unicode-slugify-0.1.5.tar.gz", hash = "sha256:25f424258317e4cb41093e2953374b3af1f23097297664731cdb3ae46f6bd6c3"}, - {file = "unicode_slugify-0.1.5-py3-none-any.whl", hash = "sha256:33a11c0ac901f7220659dd0dd6f232cf39637dfd1b9f5f35ef5ead9fef696879"}, -] - -[package.dependencies] -six = "*" -unidecode = "*" - -[[package]] -name = "unidecode" -version = "1.3.6" -description = "ASCII transliterations of Unicode text" -optional = false -python-versions = ">=3.5" -files = [ - {file = "Unidecode-1.3.6-py3-none-any.whl", hash = "sha256:547d7c479e4f377b430dd91ac1275d593308dce0fc464fb2ab7d41f82ec653be"}, - {file = "Unidecode-1.3.6.tar.gz", hash = "sha256:fed09cf0be8cf415b391642c2a5addfc72194407caee4f98719e40ec2a72b830"}, -] - -[[package]] -name = "uritemplate" -version = "4.1.1" -description = "Implementation of RFC 6570 URI Templates" -optional = false -python-versions = ">=3.6" -files = [ - {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, - {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "urllib3" -version = "1.26.16" +version = "2.2.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.8" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.20.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvicorn-0.20.0-py3-none-any.whl", hash = "sha256:c3ed1598a5668208723f2bb49336f4509424ad198d6ab2615b7783db58d919fd"}, - {file = "uvicorn-0.20.0.tar.gz", hash = "sha256:a4e12017b940247f836bc90b72e725d7dfd0c8ed1c51eb365f5ba30d9f5127d8"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.17.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718"}, - {file = "uvloop-0.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d"}, - {file = "uvloop-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa"}, - {file = "uvloop-0.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c"}, - {file = "uvloop-0.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539"}, - {file = "uvloop-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05"}, - {file = "uvloop-0.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376"}, - {file = "uvloop-0.17.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8"}, - {file = "uvloop-0.17.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d"}, - {file = "uvloop-0.17.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738"}, - {file = "uvloop-0.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f"}, - {file = "uvloop-0.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578"}, - {file = "uvloop-0.17.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b"}, - {file = "uvloop-0.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8"}, - {file = "uvloop-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9"}, - {file = "uvloop-0.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded"}, - {file = "uvloop-0.17.0.tar.gz", hash = "sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1"}, -] - -[package.extras] -dev = ["Cython (>=0.29.32,<0.30.0)", "Sphinx (>=4.1.2,<4.2.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)", "pytest (>=3.6.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.32,<0.30.0)", "aiohttp", "flake8 (>=3.9.2,<3.10.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=22.0.0,<22.1.0)", "pycodestyle (>=2.7.0,<2.8.0)"] - -[[package]] -name = "vine" -version = "5.0.0" -description = "Promises, promises, promises." -optional = false -python-versions = ">=3.6" -files = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, -] - -[[package]] -name = "watchdog" -version = "2.2.1" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.6" -files = [ - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a09483249d25cbdb4c268e020cb861c51baab2d1affd9a6affc68ffe6a231260"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5100eae58133355d3ca6c1083a33b81355c4f452afa474c2633bd2fbbba398b3"}, - {file = "watchdog-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e618a4863726bc7a3c64f95c218437f3349fb9d909eb9ea3a1ed3b567417c661"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:102a60093090fc3ff76c983367b19849b7cc24ec414a43c0333680106e62aae1"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:748ca797ff59962e83cc8e4b233f87113f3cf247c23e6be58b8a2885c7337aa3"}, - {file = "watchdog-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ccd8d84b9490a82b51b230740468116b8205822ea5fdc700a553d92661253a3"}, - {file = "watchdog-2.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6e01d699cd260d59b84da6bda019dce0a3353e3fcc774408ae767fe88ee096b7"}, - {file = "watchdog-2.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8586d98c494690482c963ffb24c49bf9c8c2fe0589cec4dc2f753b78d1ec301d"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:adaf2ece15f3afa33a6b45f76b333a7da9256e1360003032524d61bdb4c422ae"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a7cead445008e880dbde833cb9e5cc7b9a0958edb697a96b936621975f15b9"}, - {file = "watchdog-2.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8ac23ff2c2df4471a61af6490f847633024e5aa120567e08d07af5718c9d092"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d0f29fd9f3f149a5277929de33b4f121a04cf84bb494634707cfa8ea8ae106a8"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:967636031fa4c4955f0f3f22da3c5c418aa65d50908d31b73b3b3ffd66d60640"}, - {file = "watchdog-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96cbeb494e6cbe3ae6aacc430e678ce4b4dd3ae5125035f72b6eb4e5e9eb4f4e"}, - {file = "watchdog-2.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61fdb8e9c57baf625e27e1420e7ca17f7d2023929cd0065eb79c83da1dfbeacd"}, - {file = "watchdog-2.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb5ecc332112017fbdb19ede78d92e29a8165c46b68a0b8ccbd0a154f196d5e"}, - {file = "watchdog-2.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a480d122740debf0afac4ddd583c6c0bb519c24f817b42ed6f850e2f6f9d64a8"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:978a1aed55de0b807913b7482d09943b23a2d634040b112bdf31811a422f6344"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:8c28c23972ec9c524967895ccb1954bc6f6d4a557d36e681a36e84368660c4ce"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_i686.whl", hash = "sha256:c27d8c1535fd4474e40a4b5e01f4ba6720bac58e6751c667895cbc5c8a7af33c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d6b87477752bd86ac5392ecb9eeed92b416898c30bd40c7e2dd03c3146105646"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:cece1aa596027ff56369f0b50a9de209920e1df9ac6d02c7f9e5d8162eb4f02b"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:8b5cde14e5c72b2df5d074774bdff69e9b55da77e102a91f36ef26ca35f9819c"}, - {file = "watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:e038be858425c4f621900b8ff1a3a1330d9edcfeaa1c0468aeb7e330fb87693e"}, - {file = "watchdog-2.2.1-py3-none-win32.whl", hash = "sha256:bc43c1b24d2f86b6e1cc15f68635a959388219426109233e606517ff7d0a5a73"}, - {file = "watchdog-2.2.1-py3-none-win_amd64.whl", hash = "sha256:17f1708f7410af92ddf591e94ae71a27a13974559e72f7e9fde3ec174b26ba2e"}, - {file = "watchdog-2.2.1-py3-none-win_ia64.whl", hash = "sha256:195ab1d9d611a4c1e5311cbf42273bc541e18ea8c32712f2fb703cfc6ff006f9"}, - {file = "watchdog-2.2.1.tar.gz", hash = "sha256:cdcc23c9528601a8a293eb4369cbd14f6b4f34f07ae8769421252e9c22718b6f"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "watchfiles" -version = "0.20.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "watchfiles-0.20.0-cp37-abi3-macosx_10_7_x86_64.whl", hash = "sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9"}, - {file = "watchfiles-0.20.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95"}, - {file = "watchfiles-0.20.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db"}, - {file = "watchfiles-0.20.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164"}, - {file = "watchfiles-0.20.0-cp37-abi3-win32.whl", hash = "sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_amd64.whl", hash = "sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3"}, - {file = "watchfiles-0.20.0-cp37-abi3-win_arm64.whl", hash = "sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193"}, - {file = "watchfiles-0.20.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0"}, - {file = "watchfiles-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce"}, - {file = "watchfiles-0.20.0.tar.gz", hash = "sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "wcwidth" -version = "0.2.6" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websockets" -version = "11.0.3" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, - {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, - {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, - {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, - {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, - {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, - {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, - {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, - {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, - {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, - {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, - {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, - {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, - {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, - {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, - {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, - {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, - {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, - {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, - {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, - {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, - {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, - {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, - {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, - {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, - {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, - {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, - {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, - {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, - {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, - {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, -] - -[[package]] -name = "wrapt" -version = "1.15.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, -] - -[[package]] -name = "yarl" -version = "1.9.2" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"}, - {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"}, - {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"}, - {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"}, - {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"}, - {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"}, - {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"}, - {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"}, - {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"}, - {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"}, - {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"}, - {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"}, - {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"}, - {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"}, - {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"}, - {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"}, - {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"}, - {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"}, - {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"}, - {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"}, - {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"}, - {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"}, - {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"}, - {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"}, - {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"}, - {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"}, - {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] -[[package]] -name = "zope-interface" -version = "6.0" -description = "Interfaces for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "zope.interface-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f299c020c6679cb389814a3b81200fe55d428012c5e76da7e722491f5d205990"}, - {file = "zope.interface-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ee4b43f35f5dc15e1fec55ccb53c130adb1d11e8ad8263d68b1284b66a04190d"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a158846d0fca0a908c1afb281ddba88744d403f2550dc34405c3691769cdd85"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72f23bab1848edb7472309e9898603141644faec9fd57a823ea6b4d1c4c8995"}, - {file = "zope.interface-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f4d38cf4b462e75fac78b6f11ad47b06b1c568eb59896db5b6ec1094eb467f"}, - {file = "zope.interface-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:87b690bbee9876163210fd3f500ee59f5803e4a6607d1b1238833b8885ebd410"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2363e5fd81afb650085c6686f2ee3706975c54f331b426800b53531191fdf28"}, - {file = "zope.interface-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af169ba897692e9cd984a81cb0f02e46dacdc07d6cf9fd5c91e81f8efaf93d52"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa90bac61c9dc3e1a563e5babb3fd2c0c1c80567e815442ddbe561eadc803b30"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89086c9d3490a0f265a3c4b794037a84541ff5ffa28bb9c24cc9f66566968464"}, - {file = "zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:809fe3bf1a91393abc7e92d607976bbb8586512913a79f2bf7d7ec15bd8ea518"}, - {file = "zope.interface-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0ec9653825f837fbddc4e4b603d90269b501486c11800d7c761eee7ce46d1bbb"}, - {file = "zope.interface-6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:790c1d9d8f9c92819c31ea660cd43c3d5451df1df61e2e814a6f99cebb292788"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b39b8711578dcfd45fc0140993403b8a81e879ec25d53189f3faa1f006087dca"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eba51599370c87088d8882ab74f637de0c4f04a6d08a312dce49368ba9ed5c2a"}, - {file = "zope.interface-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee934f023f875ec2cfd2b05a937bd817efcc6c4c3f55c5778cbf78e58362ddc"}, - {file = "zope.interface-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:042f2381118b093714081fd82c98e3b189b68db38ee7d35b63c327c470ef8373"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dfbbbf0809a3606046a41f8561c3eada9db811be94138f42d9135a5c47e75f6f"}, - {file = "zope.interface-6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:424d23b97fa1542d7be882eae0c0fc3d6827784105264a8169a26ce16db260d8"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538f2d4a6ffb6edfb303ce70ae7e88629ac6e5581870e66c306d9ad7b564a58"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12175ca6b4db7621aedd7c30aa7cfa0a2d65ea3a0105393e05482d7a2d367446"}, - {file = "zope.interface-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3d7dfd897a588ec27e391edbe3dd320a03684457470415870254e714126b1f"}, - {file = "zope.interface-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b3f543ae9d3408549a9900720f18c0194ac0fe810cecda2a584fd4dca2eb3bb8"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0583b75f2e70ec93f100931660328965bb9ff65ae54695fb3fa0a1255daa6f2"}, - {file = "zope.interface-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:23ac41d52fd15dd8be77e3257bc51bbb82469cf7f5e9a30b75e903e21439d16c"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99856d6c98a326abbcc2363827e16bd6044f70f2ef42f453c0bd5440c4ce24e5"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1592f68ae11e557b9ff2bc96ac8fc30b187e77c45a3c9cd876e3368c53dc5ba8"}, - {file = "zope.interface-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4407b1435572e3e1610797c9203ad2753666c62883b921318c5403fb7139dec2"}, - {file = "zope.interface-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:5171eb073474a5038321409a630904fd61f12dd1856dd7e9d19cd6fe092cbbc5"}, - {file = "zope.interface-6.0.tar.gz", hash = "sha256:aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"}, -] - -[package.dependencies] -setuptools = "*" - -[package.extras] -docs = ["Sphinx", "repoze.sphinx.autointerface"] -test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] -testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] - [metadata] lock-version = "2.0" -python-versions = "^3.8" -content-hash = "9f1b0b741e3bf9068a7c7705822b7a49d56817ce1c54701344eb87d4cf401c72" +python-versions = "^3.9" +content-hash = "e55167dfe5da2005558d60d1d997ddc9e50c93533a285e9c443ef8c95b122878" diff --git a/docs/pyproject.toml b/docs/pyproject.toml index 952c9ec12..1a3af1120 100644 --- a/docs/pyproject.toml +++ b/docs/pyproject.toml @@ -6,21 +6,21 @@ authors = ["Funkwhale Collective <contact@funkwhale.audio>"] license = "AGPLv3" [tool.poetry.dependencies] -python = "^3.8" +python = "^3.9" -sphinx = "==5.3.0" -sphinx_design = "==0.3.0" -sphinx-intl = "2.0.1" -sphinx-rtd-theme = "==1.1.1" -sphinxcontrib-mermaid = "0.7.1" -myst-parser = "1.0.0" - -django = "==3.2.20" -django-environ = "==0.10.0" -funkwhale-api = {path = "../api"} +sphinx = "7.2.6" +sphinx_design = "0.5.0" sphinx-copybutton = "==0.5.2" +sphinx-intl = "2.1.0" +sphinx-rtd-theme = "==2.0.0" +sphinxcontrib-mermaid = "0.9.2" +myst-parser = "2.0.0" +django-environ = "==0.11.2" +django = "==3.2.23" -[tool.poetry.dev-dependencies] + +[tool.poetry.group.dev.dependencies] +sphinx-autobuild = "2024.2.4" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/docs/redirects.txt b/docs/redirects.txt index 7d4074b9b..a1441f3e2 100644 --- a/docs/redirects.txt +++ b/docs/redirects.txt @@ -15,7 +15,6 @@ users/followchannel.html, ../user/channels/follow.html users/follow.html, ../user/libraries/follow.html users/reports.html, ../user/reports/index.html users/builtinplugins.html, ../user/plugins/index.html -moderator/index.html, ../moderator/index.html moderator/reports.html, ../moderator/reports/index.html moderator/domains.html, ../moderator/domains/index.html moderator/users.html, ../moderator/users/index.html diff --git a/docs/serve.py b/docs/serve.py deleted file mode 100755 index 3c4132a7f..000000000 --- a/docs/serve.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python3 -from subprocess import call - -# initial make -call(["python3", "-m", "sphinx", ".", "/tmp/_build"]) -from livereload import Server, shell # noqa: E402 - -server = Server() -server.watch("..", shell("python3 -m sphinx . /tmp/_build")) -server.serve(root="/tmp/_build/", liveport=35730, port=8001, host="0.0.0.0") diff --git a/docs/specs/collections/index.md b/docs/specs/collections/index.md new file mode 100644 index 000000000..c190fe97a --- /dev/null +++ b/docs/specs/collections/index.md @@ -0,0 +1,309 @@ +# Collections + +## The issue + +One of Funkwhale's primary use-cases is content management. Users expect to be able to upload, manage, and share their content easily using the Funkwhale web app or other apps that use the Funkwhale API. + +We have identified the following key focus areas: + +1. Users need to be able to share content easily +2. Users need to be able to follow collections of content easily +3. Users should have the option to upload content **without** needing to organize it explicitly +4. Users need to be able to easily move content between different collections +5. Users need to be able to assign content to multiple collections +6. Users need to be able to see all of their content and how it is organized within apps + +## Proposed solution + +To address the issues above we propose a new management solution called **Collections**. The rationale behind this solution can be found in our conversations [in the forum](https://forum.funkwhale.audio/d/214-whats-wrong-with-libraries-and-a-path-to-fix-them) and [online meeting notes](https://pad.funkwhale.audio/zs-SKbVgROapjv56lsWWtw?view). + +A collection is conceptually a container of content. Users can associate content with multiple collections and share collections with other users. When a user follows a collection, they have access to its content. + +Collections resolve the following issues: + +1. Users can organize their content exactly how they want to +2. Users can associate content to multiple collections or no collections at all +3. Users can share individual objects (tracks, albums, artists, playlists) using **sharing links** +4. Users can easily view all collections they have created and followed + +This specification outlines the behaviors and workflows used in collections. + +## Terminology + +**Collections** enable users to group content **they have uploaded**. Users can create as many collections as they want and can share collections with other users. Users cannot add remote content to their own collections as this content may be revoked by other users and this would break the user experience. + +The **library** is the container that holds all content a user has access to. This includes all content the user uploads and follows. The library can contain as many **collections** as the user wants to create or follow. + +## Information architecture + +This [diagram](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=f4f2aac0-0f5e-11ed-adb9-fff9e854a67c§ion=interactions&index=0&share-id=4a268010-5164-11ed-b91a-c19cdb5a453b) demonstrates how the user's content library is organized on a conceptual level. + +## Feature behavior + +When a user uploads new content to Funkwhale, the uploaded file is associated to track, album, and artist metadata. The upload is associated to an automatically created upload collection that is invisible to the user. The user can select individual items or a list of items and assign them to one or more collections. + +In addition to user collections, we propose the following **automatic** collections: + +Uploaded content +: A collection containing all content the user uploads + +Followed content +: A collection containing all content the user has followed in external collections + +Private content +: A collection containing all content the user has not shared with anyone + +Public content +: A collection containing all content the user has shared publicly + +Favorites +: A collection containing all content the user has favorited + +These collections are managed by Funkwhale and can't be modified directly by the user. The user can use these collections get an overview of what content is local and what is being shared. + +### Backend + +A collection is stored as a model in the database. This model contains the relevant identifying information for the collection, including: + +- The name +- The UUID +- The owning actor +- The visibility level + +Uploaded items can be linked to collections using a `ManytoMany` relationship. + +```{mermaid} +classDiagram + class Upload { + -file : URI + -ManytoMany : Collections + } + class Collection 1{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Collection 2{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Collection 3{ + -id : UUID + -name : String + -visibility : Enum<String> + -owner : Actor + } + class Actor 1{ + -fid : URI + -id : UUID + -name: String + } + class Actor 2{ + -fid : URI + -id : UUID + -name: String + } + Upload -- Collection 1 : Optional + Upload -- Collection 2 : Optional + Upload -- Collection 3 : Optional + Collection 1 -- Actor 1 : Required + Collection 2 -- Actor 1 : Required + Collection 3 -- Actor 2 : Required +``` + +#### API Endpoints + +Funkwhale-compatible apps can communicate with the Funkwhale API to retrieve and modify collection data. The following actions must be facilitated by API endpoints: + +- Create a new collection +- Delete a collection +- Modify a collection's details (description, name, visibility level) +- Add uploads to a collection +- Remove uploads from a collection +- List collections +- List content contained in collections + +#### Sharing mechanism + +Users must be able to share collections with other users using sharing links. Access to content contained within the collection must be restricted to users who have the link. + +Users must be able to share any objects they want to (tracks, albums, artists, playlists). On the backend, this mechanism should do the following: + +1. Create a new collection +2. Associate the selected content to the collection +3. Return the sharing link for the collection + +This collection should not be visible to the end user. + +### Frontend + +In the frontend, the user has the ability to create, modify, and delete collections stored in their library. The user can assign content to collections during the upload process or by using the object's **context menu** after upload. + +When the user adds a containing object such as an artist discography, album, or playlist, all tracks **currently associated** with the object are added. The collection does not update if new content is associated to the object. + +#### Viewing collections + +The content of each collection can be viewed in a **Collection page**. This page offers an overview of content in the collection, organized by content type (track, album, artist, playlist). This page can be used to highlight content such as recently favorited tracks or a variable random selection. + +Users can see all of their collections in the **User library page**. This page clearly shows users all of their collections as well as information such whether the collections are shared or private. + +## Workflows + +In this section we detail the workflows behind some of the actions users are able to take using collections. + +### Uploading content + +The user should be able to choose exactly where their content should go **during the upload process**. They should be able to choose to associate the upload with multiple collections or no collections. This process is outlined in the flowchart below: + +```{mermaid} +flowchart TD + user[Authenticated user] --> upload[Select upload button] + upload --> destination{Is the destination \nalready selected?} --> |no| select[User chooses collections\nor library] + destination --> |yes| choose[User chooses the\nfiles to upload] + select --> choose + choose --> verify[Funkwhale verifies\nmetada] --> correct{Is the metadata\nvalid?} --> |no| edit[User edits metadata\nin Picard] --> verify + correct --> |yes| finish([Upload completes]) +``` + +### Deleting content + +Users must be able to delete content from their own library easily at any time. Deleting the uploaded content must remove it from any associated collections. + +### Creating a collection + +The user should be able to create a collection in one of two ways: + +1. By selecting a page that contains collections and selecting the "Add collection" option +2. By selecting the "Create new collection" from an object's context menu + +In each case, the user should be given a form to fill out with information including: + +- The collection name +- The collection description +- The collection's visibility level + +### Deleting a collection + +If a user decides to delete a collection it **must not** delete the content contained in the collection. When the user selects delete a warning must communicate the following: + +- The collection will no longer be available in the user library page or search results +- Users with whom the collection is currently shared will lose access to the collection's content + +### Adding content to a collection + +Users should be able to select collections during the upload process to add the content immediately. + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon ticking the checkbox, an API call should fire to associate the upload(s) with the collection(s). + +### Removing content from a collection + +Users should be able to remove content from collections by visiting the collection's page, selecting the items, and selecting "Remove from collection". + +Users should also be able to select an object's context menu and choose collections from the "Organize and share" submenu. Upon deselecting the checkbox, an API call should fire to break the association between the upload(s) and the collection(s). + +### Sharing a collection + +Users must be able to assign a visibility level to their collections. This brokers access to the content for other users and is split up as follows: + +- "Private": only the owner and direct followers can access the content. Followers require explicit approval from the owner to access content +- "Local": only the owner and authenticated users on the same domain can access the content +- "Public": any user can access the content + +When a user follows a collection, the collection and its content are accessible in all parts of the library interface. + +Following a **Private** collection uses the following flow: + +1. The **owner** selects the **recipient** they want to share with +2. Funkwhale sends the **recipient** a follow URL for the collection +3. The **recipient** pastes the URL into the search bar and selects **Request to follow collection** +4. The **owner** can then **approve** or **deny** the follow request +5. The **recipient** can only access the collection's content if the **owner** approves the follow + +### Unsharing a collection + +Users must be able to revoke sharing for collections. Once a collection is unshared, the content must not be accessible to past recipients. + +The process for this changes based on the visibility level of the collection: + +- If the user wants to unshare a **Public** collection, they can change the visibility level to **Private** or **Local** +- If the user wants to unshare a **Local** collection, they can change the visibility level to **Private** +- If the user wants to unshare a **Private** collection, they must be able to select the recipient with whom they shared the collection and **invalidate** their sharing URL. When the user's server receives this invalidation request, the content must be made unavailable to the user + +When a user revokes collection access, the metadata entry for the content remains in the recipient's library but is **disabled**. The UI should display a message informing the recipient that they no longer have access to the containing collection. The recipient can hide or remove the metadata entry by selecting "Forget" from the entry's content menu. + +### Following collections + +Users must be able to follow remote content and collections so that the content appears in their library. This content must be clearly marked as external and should not contain the option to add to user collections. + +### Unfollowing collections + +Users must be able to unfollow collections by visiting the collection's page and selecting "Unfollow". The content in the collection should not be accessible to the user after they unfollow the collection. + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [x] CLI + +## Responsible parties + +- Backend group: + - Create new models and API endpoints to support collections + - Formulate a migration path for existing libraries + - Create a compatibility layer for calls between pods with **collections** and pods with **libraries** +- Design group: Create designs for the different ares of the app in which collections are to be shown: + - Search results + - The collection page + - The user library page + - Sharing menus for content +- Documentation group: + - Create UX copy for all designs (in collaboration with design group) + - Document the behavior of collections for end users + - Document the behavior of collections for admins + - Document the structure of the data/API for developers +- Frontend group: + - Create new collection page in line with designs + - Create new user library page in line with designs + - Update search results page to show collections + - Add new context menus for collection management + +## Open questions + +- Terminology: Does “following” a collection make sense? Would “add to library” be better? + +## Minimum viable product + +On the backend, we must: + +1. Create the new models for collections +2. Create endpoints to satisfy the requirements laid out in the feature behavior section +3. Create a migration path and demonstrate successful migration of libraries to collections +4. Create a translation layer between APIv1 library APIs and APIv2 collection APIs + +On the frontend, we must: + +1. Update the user profile page to show the user's collections +2. Update the user's library page to show the user's collections +3. Create the new collection page with separate tabs for artists, albums, playlists, and tracks +4. Add collection management options to the upload form +5. Add collection management options to the object context menus + +Mockups for these pages [are available here](https://dev.funkwhale.audio/funkwhale/funkwhale-design/-/raw/master/specs/collections%20-%20user%20profile.pdf) + +The MVP must allow users to perform the following actions: + +- Add or delete content from their library +- Create and delete collections +- Add content to and remove content from collections +- Share and unshare collections + +### Next steps + +After the core mechanics are implemented, we can add the following to the frontend: + +- User library page: Automatic collections +- Collection page: overview tab +- Replace user favorites page with a browsable collection diff --git a/docs/specs/multi-artist/index.md b/docs/specs/multi-artist/index.md new file mode 100644 index 000000000..21b2b800b --- /dev/null +++ b/docs/specs/multi-artist/index.md @@ -0,0 +1,28 @@ +# Multi-artist support + +Funkwhale requires all releases and recordings to be associated to an artist. In Funkwhale's current structure, only one artist can be associated with a release or recording. However, many releases and recordings are credited to multiple artists. + +Funkwhale supports adding releases with multiple contributors by assigning a generic "Various Artists" artist to collaborative releases. This approach doesn't give proper credit to the contributors, and leads to lots of content being improperly catalogued. + +When a user uploads content created by multiple collaborative artists, they expect the following behavior: + +1. Releases to which the artist has contributed should be present on the artist's page +2. Releases to which the artist has contributed should be present in search results for the artist +3. Releases and recordings should contain links to all contributing artists so that users can discover their other work + +Currently, Funkwhale has no facility to parse multi-artist releases. The metadata fields that hold this information (`ALBUMARTIST` and `ARTIST`) are challenging to parse as they aren't formatted in a consistent way. When a release has multiple contributing artists, Funkwhale needs to be able to parse the following information about each artist to ensure the content is tagged with each artist as a user would expect: + +1. Any aliases the contributing artist might use +2. The **join phrase** used to separate artists in the tag + +```{toctree} +--- +caption: Specifications +maxdepth: 1 + +--- + +mb-content +non-mb-content + +``` diff --git a/docs/specs/multi-artist/mb-content.md b/docs/specs/multi-artist/mb-content.md new file mode 100644 index 000000000..9533c668e --- /dev/null +++ b/docs/specs/multi-artist/mb-content.md @@ -0,0 +1,369 @@ +# Multi-artist support for MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +A `fetch_credit` strategy should be used to fetch artist credit directly from MusicBrainz's entry for releases and recordings. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|yes| query(Funkwhale queries the MusicBrainz API to\nretrieve artist information for each\nunique mbid) + query --> create(Funkwhale fetches artist information\nand creates Artist entries for any\nartists not present in the database) + create --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags when a MusicBrainz ID **isn't** present in the file metadata and creating `Artist` entries for new artists +2. Querying the MusicBrainz API when a MusicBrainz ID **is** present and creating `Artist` entries for new artists +3. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +4. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> fetch_credit: Fetch credit from MusicBrainz + fetch_credit -->> ArtistCredit: Return credit information from MusicBrainz +``` + +If MusicBrainz tags are present in the file metadata, the `fetch_credit` strategy should always be preferred to ensure that content aligns with MusicBrainz's tagging. + +To maintain compatibility with MusicBrainz and ensure that Funkwhale can parse multi-artist releases, the MusicBrainz API should be used to fetch contributor information relating to the release. + +The [`/release` and `/recording` endpoints](https://musicbrainz.org/doc/MusicBrainz_API#Lookups) return `artist-credit` information when called with a `inc=artists` parameter. This information can be parsed to fetch relevant information: + +- The `joinphrase` +- The MusicBrainz `id` of the `artist` +- The artist's `name` + +```text +https://musicbrainz.org/ws/2/release/ef140c88-8bf1-4e50-9555-5c1d1ed5865c?fmt=json&inc=artists +``` + +```json +{ + "asin": null, + "cover-art-archive": { + "darkened": false, + "artwork": true, + "front": true, + "back": false, + "count": 1 + }, + "release-events": [ + { + "area": { + "id": "525d4e18-3d00-31b9-a58b-a146a916de8f", + "type": null, + "name": "[Worldwide]", + "disambiguation": "", + "sort-name": "[Worldwide]", + "iso-3166-1-codes": ["XW"], + "type-id": null + }, + "date": "2012-11-15" + } + ], + "quality": "normal", + "barcode": "", + "date": "2012-11-15", + "status-id": "4e304316-386d-3409-af2e-78857eec5cfe", + "status": "Official", + "title": "One Christmas at a Time", + "disambiguation": "", + "text-representation": { + "script": "Latn", + "language": "eng" + }, + "packaging-id": "119eba76-b343-3e02-a292-f0f00644bb9b", + "packaging": "None", + "country": "XW", + "id": "ef140c88-8bf1-4e50-9555-5c1d1ed5865c", + "artist-credit": [ + { + "joinphrase": " & ", + "name": "Jonathan Coulton", + "artist": { + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df", + "name": "Jonathan Coulton", + "id": "d8df7087-06d5-4545-9024-831bb8558ad1", + "sort-name": "Coulton, Jonathan", + "disambiguation": "", + "type": "Person" + } + }, + { + "artist": { + "type": "Person", + "disambiguation": "", + "id": "7b5b87d3-f3ee-4b5d-b111-1f2e87f87124", + "sort-name": "Roderick, John", + "name": "John Roderick", + "type-id": "b6e035f4-3ce9-331c-97df-83397230b0df" + }, + "name": "John Roderick", + "joinphrase": "" + } + ] +} +``` + +To catalogue multi-artist content, Funkwhale needs to: + +1. Fetch information for **each** contributing artist and create `Artist` objects for any that don't exist +2. Create `ArtistCredit` objects associated with each release and recording for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Funkwhale ->> MusicBrainz: /release/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Album and ArtistCredit information + Funkwhale ->> MusicBrainz: /recording/{mbid}?fmt=json&inc=artists + MusicBrainz -->> Funkwhale: Track and ArtistCredit information + loop For each unique artist mbid + Funkwhale ->> MusicBrainz: /artist/{mbid}?fmt=json&inc=aliases + MusicBrainz -->> Funkwhale: Artist information + end +``` + +Given the above example, Funkwhale would create the following `ArtistCredit` object: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ---------------- | ---------- | +| 1 | 1 | Jonathan Coulton | & | +| 2 | 2 | John Roderick | | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +Data needs to be clearly presented in the web app to ensure that users can easily see which artists collaborated on a work and discover more of their work. + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html +<span> + <a href="{funkwhale_url}/library/artists/{artist_id}">{credit}</a>{joinphrase} +</span> +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html +<span> + <a href="https://open.audio/library/artists/25">Jonathan Coulton</a> & + <a href="https://open.audio/library/artists/395">John Roderick</a> +</span> +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place diff --git a/docs/specs/multi-artist/non-mb-content.md b/docs/specs/multi-artist/non-mb-content.md new file mode 100644 index 000000000..b0b16933b --- /dev/null +++ b/docs/specs/multi-artist/non-mb-content.md @@ -0,0 +1,348 @@ +# Multi-artist support for non-MusicBrainz-tagged content + +## Terminology + +The following terminology is used throughout this spec: + +Join phrase +: The token used to split a list of artists and represent their role in content + +Release +: An **album** or **single**. In Funkwhale a release is represented by the `Album` model + +Recording +: A single track as part of an **album** or **single**. In Funkwhale, a recording is represented by the `Track` model + +## Proposed solution + +To support multi-artist content, a new `ArtistCredit` model should be added to house contributing artist information, including links to `Artist` models and details about credited names and join phrases. The `ArtistCredit` model should link to `Album` and `Track` entries using a `ForeignKey` relationship to allow multiple `artist_credit` entries on each `Album` and `Track`. The existing `artist` field in `Album` and `Track` models is deprecated in favor of the new `artist_credit` field. + +To account for content tagged in tagged in systems **other than MusicBrainz**, a `parse_credit` strategy should be used to parse artist credit from a file's metadata using join phrase parsing. + +## Feature behavior + +The workflow for `ArtistCredit` population goes as follows: + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> mb-tagged{Does the content have a MusicBrainz ID?} + mb-tagged -->|no| parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the <code>artist_credit</code> information\nfor each release/recording) + model --> display([Funkwhale displays the credit for each release/recording\nin the web app/API representation]) +``` + +### Backend + +The backend is responsible for + +1. Tokenizing artist tags in the file's metadata and creating `Artist` entries for new artists +2. Creating `ArtistCredit` entries for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +3. Adding the `ArtistCredit` links to `Track` and `Album` entries + +The `artist_credit` entries must be linked sequentially to preserve ordering. For each entry, Funkwhale should query for an existing `ArtistCredit` entry and return it if found, or create a new one and return the new entry. This ensures that artist credit information is presented in the same order as in the tags. + +#### Data model + +A new `ArtistCredit` model needs to hold the contributing artist information. This model contains the following fields: + +- The Funkwhale `artist_id` of the artist associated with the release or recording +- The `credit` representing the credited name of the artist as given for the release or recording +- The `joinphrase` associated with the artist (for example: `" feat. "`, `" & "`) + +```{mermaid} +classDiagram + direction LR + class Album { + String title + ArtistCredit artist_credit + Date release_date + String release_group_id + Attachment attachment_cover + String type + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + List api_includes + String api + String federation_namespace + MusicBrainz musicbrainz_model + String musicbrainz_mapping + } + class Track { + UUID mbid + String title + ArtistCredit artist_credit + Integer disc_number + Integer position + Album album + License license + Actor attributed_to + String copyright + Attachment attachment_cover + Integer downloads_count + String federation_namespace + String musicbrainz_model + String api + List api_includes + MusicBrainz musicbrainz_mapping + String import_hooks + QuerySet objects + Fetch fetches + } + class Artist { + String name + String federation_namespace + String musicbrainz_model + Object musicbrainz_mapping + Actor attributed_to + TaggedItem tagged_items + Fetch fetches + Content description + Attachment attachment_cover + String content_category + Date modification_date + String api + QuerySet objects + } + class ArtistCredit { + Artist artist_id + String credit + String joinphrase + } + Track "1" --> Album : album + Track "1..*" --> ArtistCredit : artist_credit + Album "1..*" --> ArtistCredit : artist_credit + ArtistCredit "1" --> Artist : Artist +``` + +#### Workflow + +On the backend, the workflow for fetching `ArtistCredit` information is as follows: + +```{mermaid} +sequenceDiagram + ArtistCredit ->> parse_credit: Parse credit from tags + parse_credit -->> ArtistCredit: Return credit information +``` + +Funkwhale should provide the following to enable artist parsing in non-MusicBrainz-tagged content: + +1. A sensible list of default **join phrases** that are commonly found in artist tags +2. A setting to enable admins to override or add to the list of join phrases + +Funkwhale should tokenize the `ALBUMARTIST` and `ARTIST` fields using a list of **join phrases**. For each token in the list, Funkwhale should do the following: + +1. Store content split at the **join phrase** token as the `credit` +2. Search for any artist with the same name as the `credit` and store the id as the `artist_id` + - If no existing artist is found, create a new artist and return the ID as `artist_id` +3. Store the join phrase token that it split at as the `joinphrase` +4. Create an `ArtistCredit` object for each **unique** combination of `artist_id`, `credit`, and `joinphrase` +5. If a matching `ArtistCredit` entry is found, Funkwhale should link to this + +```{mermaid} +sequenceDiagram + Upload ->> parse_content: Read file metadata + loop For each artist name + parse_content ->> Artist: Search Artist entries + Artist -->> parse_content: Return entry (if exists) + parse_content ->> Artist: Create Artist entry (if none found) + end + loop For each unique artist credit combination + parse_content ->> ArtistCredit: Search ArtistCredit entries + ArtistCredit -->> parse_content: Return entry (if exists) + parse_content ->> ArtistCredit: Create ArtistCredit entry (if none found) + parse_content ->> Track: Create Track with artist_credit entries + parse_content ->> Album: Create Album with artist_credit entries + end +``` + +Funkwhale should do the following automatically: + +- Trim whitespace from the artist `credit` +- Preserve whitespace around **both sides** of the `joinphrase` for readability +- Use an **empty** string (`""`) as the `joinphrase` for the last entry in the list + +For example, given a list of join phrases like this: + +- `$`, `|`, `&`, `/`, `feat.` + +And the following tags: + +| Tag | Values | +| ----------- | ------------------------------------------------------- | +| ALBUMARTIST | Tommy J. & Bobby Forth | +| ARTIST | Tommy J. feat. Robin Devil, Jerry Sabbath & Sammy Burns | + +Funkwhale would create the following `ArtistCredit` entries for the `Album`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ----------- | ---------- | +| 1 | 1 | Tommy J. | & | +| 2 | 2 | Bobby Forth | | + +And the following for the `Track`: + +| id | artist_id | credit | joinphrase | +| --- | --------- | ------------- | ---------- | +| 3 | 1 | Tommy J. | " feat. " | +| 4 | 3 | Robin Devil | ", " | +| 5 | 4 | Jerry Sabbath | " & " | +| 6 | 5 | Sammy Burns | "" | + +#### API behavior + +The Funkwhale API needs to return artist credit information in a way that is easily consumed by a client. + +Endpoints should include a `credited_artist` filter that allows a client to return results for which artists are credited. This filter should take a list of IDs. + +To return any albums where the artist is listed in the `artist_credit` field, you can filter by the `artist_id` field using the `credited_artist` filter: + +```text +https://open.audio/api/v2/albums?credited_artist=6451,6452 +``` + +The `credit` field of the `artist_credit` object must also be searchable using a standard query: + +```text +https://tanukitunes.com/api/v2/albums?q=jonathan+coulton +``` + +#### Migration + +To ensure all content has `artist_credit` information, an initial migration should copy the current artist information into an `ArtistCredit` object for each Album and Track with the following mapping: + +- `artist_id` = Artist `id` +- `credit` = Artist `name` +- `joinphrase` = `""` + +Each album/track must have at least one `artist_credit` entry listed against it. + +### Frontend + +To prevent issues with tagging, the user should be presented a summary of artist credits that are separated using the `parse_credit` strategy. + +Once the upload has been processed by the server, the user should be shown a summary of the uploaded content with artists listed against each recording and release. The user should then be able to amend these results and send a request to update the values. Upon receiving a new value, the server should perform the same deduplication it performs during a new upload. + +1. The user uploads new content to Funkwhale +2. Funkwhale parses the artist credits and saves the new credit objects in case the upload is interrupted +3. Funkwhale displays a summary of the changes + 1. If the results are **correct**, the user accepts the changes and finishes the upload + 2. If the results are **incorrect**, the user modifies the artist credits and submits the changes + +```{mermaid} +flowchart TD + upload([The user uploads content to Funkwhale]) + upload --> read(Funkwhale reads the file tags of each release/recording) + read --> parse(Funkwhale parses the artists tag\nand splits the artist at any tokens\n in the join phrase list) + parse --> artist(Funkwhale creates Artist entries for any\nartists that aren't present in the database) + artist --> model(Funkwhale stores the artist_credit information\nfor each release/recording) + model --> verify(Funkwhale displays the results to the user) + verify --> correct{Are the artist tags correct?} + correct -->|no| tweak(The user corrects the details and\nsubmits the new information to Funkwhale) + tweak & correct -->|yes| finish(The user finishes the upload process) +``` + +#### Representation in releases and tracks + +The frontend should use the `artist_credit` field to populate artist links on releases and tracks. Credited names and join phrases must be preserved to line up with the artists' intent. + +The frontend should format the results as follows for **each** artist: + +```html +<span> + <a href="{funkwhale_url}/library/artists/{artist_id}">{credit}</a>{joinphrase} +</span> +``` + +For example, given the following `artist_credit` response: + +```json +[ + { + "artist_id": 25, + "credit": "Jonathan Coulton", + "joinphrase": " & " + }, + { + "artist_id": 395, + "credit": "John Roderick", + "joinphrase": "" + } +] +``` + +The frontend would render the following: + +```html +<span> + <a href="https://open.audio/library/artists/25">Jonathan Coulton</a> & + <a href="https://open.audio/library/artists/395">John Roderick</a> +</span> +``` + +#### "Also appears in" section + +To keep artist discographies properly catalogued, only albums attributed to the artist, not albums with tracks featuring the artist, should appear in the "Albums by" section of the artist page. + +Releases to which the artist has contributed should be separated into a new section labeled "Also appears in". This ensures that it is easy to discover content to which an artist has contributed while also prioritizing their own content on the artist page. + +#### "Compilations" page + +The "Various Artists" artist is a special artist used in MusicBrainz to catalogue compilation content not attributed primarily to a specific artist or artists. This artist is widely used in Funkwhale as the Album Artist tag for compilation content. To preserve this content and make compilation content easier to find, we should create a special "Compilations" page to house compilation content. + +### Documentation + +The following needs to be documented: + +- The artist splitting mechanism. Meaningful examples should be provided to help users tag their content +- The environment setting to override the join phrase list +- Any tasks or script functions which are created to automate the update of historical content + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- The backend developers in the **Development** group are responsible for: + - Creating the new `ArtistCredit` model + - Updating the `Album` and `Track` models to link to `ArtistCredit` entries + - Creating the strategies for populating `ArtistCredit` during the upload process + - Updating the API/creating new endpoints + - Creating the database migration to add the new field and that artist information is copied over +- The frontend developers in the **Development** group are responsible for: + - Updating the artist representations in the Album and Track pages to use the new `artist_credit` field in the API response + - Creating the new "Also appears in" section for the artist discography pages + - Creating a workflow to enable users to verify uploaded data and fix any broken artist credits +- The **Design** group is responsible for: + - Providing designs for how multi-artist content should be rendered responsively + - Providing designs for the new "Compilations" page + - Providing designs for the updated Artist page +- The **Documentation** group is responsible for: + - Documenting the new feature behavior + - Documenting the new environment settings + - Providing docstrings for API development + +## Open questions + +- What should be used as the default join words list? +- To maintain compatibility with API v1, should we continue to populate the `artist` tag on `Track` and `Album` entries with the first credited artist? + +## Minimum viable product + +The MVP for this product is an implementation of the backend behavior. It should: + +1. Set up the new models +2. Create the database migration +3. Implement the token splitting and data fetching for new files + +### Next steps + +1. Create a `manage.py` script that enables admins to update entries in the database +2. Create a task that updates files imported in-place diff --git a/docs/specs/nodeinfo21/index.md b/docs/specs/nodeinfo21/index.md index 32ed498aa..adc27ab75 100644 --- a/docs/specs/nodeinfo21/index.md +++ b/docs/specs/nodeinfo21/index.md @@ -23,7 +23,7 @@ The NodeInfo endpoint is used to communicate the features and capabilities of a Read [the NodeInfo specification for more information](https://nodeinfo.diaspora.software/docson/index.html#/ns/schema/2.1#$$expand). ::: -The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance. +The NodeInfo endpoint must contain all mandatory elements listed in the specification. In addition to this, Funkwhale's implementation should list additional details about the instance in the `metadata` object. `actorId` (URL) : The URL of the pod service actor @@ -37,15 +37,9 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `longDescription` (String) : A longer description of the pod -`rules` (String) -: A collection of rules users of the pod must abide by - `contactEmail` (Email address) : The email address of the pod administrator -`terms` (String) -: The terms of use associated with the pod - `nodeName`(String) : The name of the pod @@ -55,12 +49,6 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `defaultUploadQuota` (Number) : The default upload quota (in megabytes) allowed for new users -`library.federationEnabled` (Boolean) -: Whether federation is enabled - -`library.anonymousCanListen` (Boolean) -: Whether public endpoints require authentication - `supportedUploadExtensions` (Array\<String\>) : A list of file extensions enabled for upload @@ -76,30 +64,51 @@ The NodeInfo endpoint must contain all mandatory elements listed in the specific `instanceSupportMessage` (String) : The support message associated with the instance -`content.top_music_categories` (Array\<Object\>) +`content.local` (Object) +: An object containing a summary of local content + +`content.local.artists` (Number) +: The number of artists associated with local uploads on the pod + +`content.local.releases` (Number) +: The number of albums or series associated with local uploads on the pod + +`content.local.recordings` (Number) +: The number of tracks or episodes associated with local uploads on the pod + +`content.local.hoursOfContent` (Number) +: The total number of hours of content associated with local uploads on the pod + +`content.topMusicCategories` (Array\<{ `name`: String, `count`: Number}>) : The top three music genres and the number of uploads tagged with them -`content.top_podcast_categories` (Array\<Object\>) +`content.topPodcastCategories` (Array\<{ `name`: String, `count`: Number}>) : The top three podcast categories and the number of uploads tagged with them -`instance_policy.moderation_policy` (String) -: The moderation policy of the pod - -`instance_policy.terms_of_service` (String) -: The terms of service of the pod - -`instance_policy.languages` (Array\<String\>) +`languages` (Array\<String\>) : The languages spoken by the pod administrators -`instance_policy.location` (String) +`location` (String) : The country the pod is located in -`federation.follows_instances` (Number) +`codeOfConduct` (String \<Url\>) +: If the server admin has populated the **Rules** setting on their pod, this value is populated with the URL to the pod's about page: `<server_domain>/about/pod#rules`. + +`federation.followsInstances` (Number) : The number of Funkwhale pods that the target pod follows -`federation.following_instances` (Number) +`federation.followingInstances` (Number) : The number of Funkwhale pods that publicly follow the target pod +`usage.listenings` (Number) +: The total number of listenings on the pod + +`usage.downloads` (Number) +: The total number of downloads (streams) the pod has served + +`usage.favorites.tracks` (Number) +: The total number of track favorites recorded on the pod. + `features` (Array\<String\>) : A list of enabled features @@ -141,19 +150,13 @@ Example response: }, "metadata": { "actorId": "string", - "private": false, + "private": true, "shortDescription": "string", "longDescription": "string", - "rules": "string", "contactEmail": "user@example.com", - "terms": "string", "nodeName": "string", "banner": "string", "defaultUploadQuota": 0, - "library": { - "federationEnabled": true, - "anonymousCanListen": true - }, "supportedUploadExtensions": ["string"], "allowList": { "enabled": true, @@ -161,41 +164,64 @@ Example response: }, "funkwhaleSupportMessageEnabled": true, "instanceSupportMessage": "string", - "instance_policy": { - "moderation_policy": "string", - "terms_of_service": "string", - "languages": ["string"], - "location": "string" - }, + "languages": ["string"], + "location": "string", + "codeOfConduct": "string", "content": { - "top_music_categories": [ + "local": { + "artists": 1000, + "releases": 10000, + "recordings": 150000, + "hoursOfContent": 7500 + }, + "topMusicCategories": [ { - "rock": 1256 + "name": "rock", + "count": 1256 }, { - "jazz": 604 + "name": "jazz", + "count": 604 }, { - "classical": 308 + "name": "classical", + "count": 308 } ], - "top_podcast_categories": [ + "topPodcastCategories": [ { - "comedy": 12 + "name": "comedy", + "count": 12 }, { - "politics": 4 + "name": "politics", + "count": 4 }, { - "nature": 1 + "name": "nature", + "count": 1 } ], "federation": { - "followed_instances": 0, - "following_instances": 0 + "followedInstances": 0, + "followingInstances": 0 } }, - "features": ["channels", "podcasts", "collections", "audiobooks"] + "usage": { + "listenings": 0, + "downloads": 0, + "favorites": { + "tracks": 0 + } + }, + "features": [ + "channels", + "podcasts", + "collections", + "audiobooks", + "federation", + "anonymousCanListen" + ] } } ``` diff --git a/docs/specs/nodeinfo21/schema.yml b/docs/specs/nodeinfo21/schema.yml index 6f85665c7..58035c2db 100644 --- a/docs/specs/nodeinfo21/schema.yml +++ b/docs/specs/nodeinfo21/schema.yml @@ -456,27 +456,17 @@ components: type: string longDescription: type: string - rules: - type: string contactEmail: type: string format: email - terms: - type: string nodeName: type: string banner: type: string format: url + nullable: true defaultUploadQuota: type: integer - library: - type: object - properties: - federationEnabled: - type: boolean - anonymousCanListen: - type: boolean supportedUploadExtensions: type: array items: @@ -488,57 +478,97 @@ components: type: boolean domains: type: array + nullable: true items: type: string funkwhaleSupportMessageEnabled: type: boolean instanceSupportMessage: type: string - instance_policy: - type: object - properties: - moderation_policy: - type: string - format: url - terms_of_service: - type: string - format: url - languages: - type: array - items: - type: string - location: - type: string + languages: + type: array + items: + type: string + location: + type: string + codeOfConduct: + type: string + format: url content: type: object properties: - top_music_categories: + local: + type: object + properties: + artists: + type: number + releases: + type: number + recordings: + type: number + hoursOfContent: + type: number + example: + artists: 1000 + releases: 10000 + recordings: 150000 + hoursOfContent: 7500 + topMusicCategories: type: array items: type: object - additionalProperties: - type: integer + properties: + name: + type: string + count: + type: integer + minimum: 0 example: - - "rock": 1256 - - "jazz": 604 - - "classical": 308 - top_podcast_categories: + - name: "rock" + count: 1256 + - name: "jazz" + count: 604 + - name: "classical" + count: 308 + topPodcastCategories: type: array items: type: object - additionalProperties: - type: integer + properties: + name: + type: string + count: + type: integer + minimum: 0 example: - - "comedy": 12 - - "politics": 4 - - "nature": 1 + - name: "comedy" + count: 12 + - name: "politics" + count: 4 + - name: "nature" + count: 1 federation: type: object properties: - followed_instances: + followedInstances: type: integer - following_instances: + followingInstances: type: integer + usage: + type: object + properties: + listenings: + type: integer + minimum: 0 + downloads: + type: integer + minimum: 0 + favorites: + type: object + properties: + tracks: + type: integer + minimum: 0 features: type: array items: @@ -548,6 +578,10 @@ components: - "podcasts" - "collections" - "audiobooks" + - "federation" + - "anonymousCanListen" + - "onlyMbidTaggedContent" + Error: type: object properties: diff --git a/docs/specs/quality-filter/index.md b/docs/specs/quality-filter/index.md index 5f1ff5d2a..e61da81ef 100644 --- a/docs/specs/quality-filter/index.md +++ b/docs/specs/quality-filter/index.md @@ -36,6 +36,7 @@ Under a subsection labeled {guilabel}`Required metadata`: - A checkbox for {guilabel}`Album art`. If checked, only albums with associated art should be returned by the API - A checkbox for {guilabel}`Release date`. If checked, only albums with a properly formatted release date should be returned by the API - A checkbox for {guilabel}`Genre tags`. If checked, only content that is tagged with at least one genre tag should be returned by the API +- A checkbox for {guilabel}`MusicBrainz ID`. If enabled, only content with a MusicBrainz ID is returns in API calls. The menu should also contain a {guilabel}`Quality filter` slider that allows admins to choose a **minimum** quality level. This level should be abstracted on the backend to apply a sensible value to all supported file formats. @@ -53,6 +54,7 @@ The following configurable filters need to be applied: - `format`: a comma-separated list of accepted file formats (e.g. `mp3,ogg,vorbis,flac`). Only files matching the formats in the list should be returned if this filter is passed - `has_tags`: a boolean value that indicates whether the content should be tagged (`true`) or not (`false`) +- `has_mbid`: a boolean value that indicates whether the content has a `mbid` tag associated (`true`) or not (`false`) - `quality`: an enum value that filters content based on the file quality. If no value is passed, uploads of any quality should be returned. Accepted values: - `low` - `medium` diff --git a/docs/specs/upload-process/index.md b/docs/specs/upload-process/index.md new file mode 100644 index 000000000..2739fbc89 --- /dev/null +++ b/docs/specs/upload-process/index.md @@ -0,0 +1,196 @@ +# Upload process + +## The issue + +Our current upload process is quite cumbersome and can be confusing for new users. Essentially, users have to know exactly where they want to put content before they've even uploaded it, and once it's uploaded it's hard to move. + +There are currently 2 upload flows: + +### Upload to library + +Uploading to a content library is the oldest upload mechanism in Funkwhale. The flow goes like this: + +1. The user clicks on the upload button +2. The user selects "Upload third-party content in a library" +3. The user chooses which library they want to upload to and clicks "Upload" +4. The user selects content or drags and drops it to complete the upload + +### Upload to a channel + +Channels are a newer feature, but the upload process is largely the same: + +1. The user clicks on the upload button +2. The user selects "Publish your work in a channel" +3. The user selects the channel they want to upload to +4. The user selects "Upload" +5. The user enters some metadata about the entry +6. The user selects content or drags and drops it to complete the upload +7. The user inputs relevant details about each track + +## Proposed solution + +To simplify this flow, the upload process should have a single entrypoint which then guides the user to the correct upload context. Rather than needing to go through a series of steps to upload each item. The proposed solution is to create a single modal for uploads that doesn't require the user to navigate to upload content to different locations. + +## Feature behavior + +The new feature will present an upload menu that gives users all upload options as a selectable radio menu: + +1. Library (later Collections) +2. Music channel +3. Podcast channel + +Once the user selects an option, they can select the target from a dropdown and start uploading straight away. + +### Frontend + +The new workflow goes as follows: + +1. The user selects the upload button. An upload modal opens +2. The user selects their upload target: + - Their music library/collections(s) + - A music channel + - A podcast channel +3. The modal displays all items in a selected category as a dropdown list. For example: + - A list of libraries/collections owned by the user + - A list of music channels owned by the user + - A list of podcast channels owned by the user +4. The user selects the location to which they want to upload their content +5. The user selects the files they want to upload from a file picker, or by dragging and dropping files onto the modal +6. The user can select a "Upload in background" button which dismisses the modal but _continues the upload_ +7. Funkwhale assesses if all files have the correct metadata and highlights any issues for the user to fix _with a meaningful message_. The frontend keep the connection open until the API sends a response + +```{mermaid} +flowchart TD + upload([User selects the upload button]) --> modal(An upload modal opens) + modal --> select{The user selects their upload target} + select --> |Library/Collection| library(The modal displays a list of libraries/collections) + select --> |Music channel| music(The modal displays the user's music channels) + select --> |Podcast channel| podcast(The modal displays the user's podcast channels) + library & music & podcast --> choose(The user chooses the upload location) + choose --> files[The user drags files to upload\nor selects files in a file picker] + files --> wait(The user waits for the upload to complete) & close(The user closes the modal) + wait & close --> process(Funkwhale processes the uploads\nand verifies metadata) + process --> message([Funkwhale returns status messages for all uploads\nand notifies the user the the upload is complete]) +``` + +The frontend should reflect the **status** of the upload to inform the user how the upload is progressing: + +- `Failed`: The file is improperly tagged **or** the API has responded with an error +- `Uploading`: The file is being sent to the server +- `Processing`: The server is processing the file and no success response has been returned yet +- `Success`: The API has responded with a `200: Success` response and passed back information about the upload. + +#### UX considerations + +To prevent disrupted uploads, the following UX should be implemented + +- If the user dismisses the modal with the escape key, by clicking outside the modal, or by moving back to the previous page, _the user should be warned and given the option to cancel their upload or continue it in the background_ +- The user should have the option to cancel an upload at any time +- If an upload is sent to the background, it should notify the user in some way when the upload is complete + +:::{seealso} +See the [interactive prototype](https://design.funkwhale.audio/#/view/e3a187f0-0f5e-11ed-adb9-fff9e854a67c?page-id=d9f9f4d0-1a7b-11ed-8551-a35b3c702efa§ion=interactions&index=0) for an overview of the behavior. +::: + +### Backend behavior + +The upload process remains the same on the backend. However, the error checking needs to be more descriptive. For example: + +- Failed metadata checks should be explicit about what issues were found in the metadata and should return this in a readable way for the user to fix +- If an upload fails partway, this should be made clear so that the user can attempt a reupload +- The backend should return a meaningful status message reflecting the file processing state + +#### Response structure (V2 only) + +If the upload succeeds, the API should respond with a `200: Success` message and return a payload containing the following information: + +- The upload `guid` +- The `title` of the uploaded file +- The `createdDate` of the upload +- The `fileType` of the upload +- The associated `recording` +- The associated `release` +- The `owner` (actor) of the upload + +```json +{ + "guid": "18c455d8-9840-4000-804d-c53e92d85d01", + "title": "string", + "createdDate": "1970-01-01T00:00:00.000Z", + "fileType": "flac", + "recording": { + "guid": "18c455d8-9840-4000-82af-67024a9e2018", + "fid": "http://example.com", + "name": "string", + "playable": false, + "local": false, + "artistCredit": [ + { + "name": "string", + "guid": "18c455d8-9840-4000-8271-2731b97a2c01", + "mbid": "18c455d8-9840-4000-8f04-1f9dd7f16201", + "joinPhrase": "string" + } + ], + "cover": { + "guid": "18c455d8-9840-4000-85af-4178e969db01", + "mimetype": "string", + "size": 0, + "creationDate": "1970-01-01T00:00:00.000Z", + "urls": { + "source": "http://example.com", + "original": "http://example.com" + } + } + }, + "release": { + "guid": "18c455d8-9840-4000-81e9-3cc3a7567201", + "fid": "http://example.com", + "mbid": "18c455d8-9840-4000-8b86-dd1e40a7bb80", + "name": "string", + "artistCredit": [ + { + "name": "string", + "guid": "18c455d8-9840-4000-88dc-fd4cf3957201", + "mbid": "18c455d8-9840-4000-8e40-35019dd11180", + "joinPhrase": "string" + } + ], + "playable": false, + "cover": { + "guid": "18c455d8-9840-4000-831e-ea8add02c380", + "mimetype": "string", + "size": 0, + "creationDate": "1970-01-01T00:00:00.000Z", + "urls": { + "source": "http://example.com", + "original": "http://example.com" + } + } + }, + "owner": { + "fid": "http://example.com", + "fullUsername": "string", + "preferredUsername": "string", + "name": "string", + "domain": "string", + "local": false + } +} +``` + +## Availability + +- [ ] Admin panel +- [x] App frontend +- [ ] CLI + +## Responsible parties + +- **Design group**: mockups and interface designs +- **Frontend group**: building the UI to the design spec +- **Backend group**: develop metadata checks + +## Minimum viable product + +The MVP for this product should be able to replicate the functionality of the current v1 upload process with the improved workflow outlined above. diff --git a/docs/specs/user-deletion/index.md b/docs/specs/user-deletion/index.md new file mode 100644 index 000000000..c7132757a --- /dev/null +++ b/docs/specs/user-deletion/index.md @@ -0,0 +1,143 @@ +# User deletion + +## The issue + +Funkwhale users broadcast activities such as Listenings and Favorites both locally and over federation. Users require the ability to fully delete their presence from local and federated servers to comply with their request. + +## The solution + +User deletions must be actioned as _cascading_ deletions both locally and across federation. Any action or information associated with a user's {term}`actor <Actor>` should be deleted, and the actor itself must be marked as {term}`Tombstoned <Tombstone>` to prevent another user from claiming the actor in future. + +:::{important} +If the user owns any joint Channels or Playlists, these should only be deleted if the user is the **only** user with access to the {term}`object <Object>`. +::: + +When a user deletes their account, the following must happen: + +1. The local server must remove all Favorites, Listenings, Collections, and Uploads owned by the actor +2. The local server must delete the user's profile and mark their actor as `Tombstoned` +3. The local server must delete the profile of any Channels owned solely by the user and mark their actor as `Tombstoned` +4. The local server's {term}`Service actor` must broadcast the deletion {term}`activity <Activity>` to the **Service actors** of all servers known to it +5. Remote servers should delete all data associated with the deleted actor, including cached content belonging to the actor + +```{mermaid} +sequenceDiagram + User ->> API : Delete account + API -->> User : Acknowledge + par cascade deletion in the background + API ->> Database : Cascade delete local content + activate Database + API ->> Service actor : Broadcast deletion + Service actor ->> Remote servers : Broadcast deletion + Remote servers -->> Service actor : Cascade delete + end +``` + +### API behavior + +The Funkwhale client API is responsible for handling deletion requests and actioning the resulting cascade deletion. Users should request a deletion using a `DELETE` request: + +```text +DELETE /api/v2/users/{id} +``` + +:::{danger} +Users must only be able to delete their own account. Unauthorized deletion requests must return a `401: Unauthorized` response. + +Admins and moderators with sufficient privilege to remove accounts should be able to remove local accounts using this endpoint. +::: + +On receipt of a deletion request, the API must return a `202: Accepted` response to inform the user that the deletion process has been received. + +If the server admin has enabled email notifications, the server should send an email notifying the user that their account has been successfully started and all of their information will be deleted. + +After this, the server must handle the following: + +1. Deleting any Uploads owned by the user +2. Deleting any Favorites associated with the user +3. Deleting any Listenings associated with the actor +4. Deleting any Playlists associated with the actor +5. Deleting any Collections owned by the user +6. Deleting any Channels owned solely by the user + +The user's account information (such as name, email address, signup date, last login) must be removed and their federation actor `Tombstoned` to prevent reuse of their handle. Since Channels and Collections are federation actors with their own collection of followers, these must also be `Tombstoned` and their identifying information removed. + +If a request is sent to the API for a `Tombstoned` actor, it must respond with `410: Gone`. + +### ActivityPub behavior + +Funkwhale must broadcast any deletion requests to ActivityPub servers with which it has previously interacted by posting a [`Delete` activity][delete] targeting the user's [actor] to the Service Actor's [outbox]. The Service actor should broadcast the following: + +1. A [`Delete` activity][delete] for the user's [actor] +2. A [`Delete` activity][delete] for the actor of any Collections owned by the user +3. A [`Delete` activity][delete] for the actor of any Channels owned solely by the user +4. A [`Delete` activity][delete] for the actor of any Channel owner owned solely by the user + +```{mermaid} +flowchart TD + delete([The user sends a DELETE request]) --> outbox(The deletion is added to\nthe Service actor's outbox) + outbox --> collections{Does the user own\nany collections?} + collections -->|yes| tscollection(The collection is tombstoned and the deletion\nis added to the Service actor's outbox) + tscollection --> virtual{Does the user solely own any\nvirtual actors?} + virtual -->|yes| tsvirtual(The virtual actor is tombstoned and the deletion\nis added to the Service actor's outbox) + tsvirtual --> channel{Does the virtual actor own any\nChannels?} + channel -->|yes| tschannel(The Channel is tombstoned and the deletion\nis added to the Service actor's outbox) + outbox & tscollection & tsvirtual & tschannel --> serviceactor([The Service actor broadcasts\nall deletions to known servers]) +``` + +On receipt of a [`Delete` activity][delete], the server should cascade delete any content owned by the targeted actor. + +### Web app behavior + +The Funkwhale web app must present users with a dangerous button to action an account deletion request. This button must be prefaced with clear prose that outlines precisely the impact that deleting an account has. + +To ensure that users don't delete their account by mistake, they must verify their request twice and input their password to prevent abuse of the feature. The user experience flow for deleting an account goes as follows: + +1. The user navigates to their account settings page +2. The user locates the "Delete account" button that is clearly and visually separated from other actions on the page +3. The user reads the warnings about the deletion process and selects the button to begin the deletion process +4. A modal appears asking the user to authenticate by typing in the name of the targeted object (for example: their username) +5. If the object name is entered correctly, the user is presented with a final warning that informs them that the deletion process can't be reversed +6. If the user chooses to proceed, the app logs the user out and informs them that the deletion process has begun + +```{mermaid} +flowchart TD + settings([The user navigates to\nthe settings menu]) --> delete(The user selects the\nDelete account button) + delete --> password(A password input appears) + password --> correctpass{Did the user enter their\npassword correctly?} + correctpass -->|yes| warning(A final warning appears informing\nthe user that the deletion process\nis destructive and irreversible) + warning --> confirm{Did the user confirm the\naccount deletion?} + confirm -->|yes| logout(The user is logged out and a notification\nconfirms their account is gone) + logout --> email([The server sends the user an email to\nconfirm the deletion]) + correctpass & confirm -->|no| cancel([The account deletion process is\ncancelled]) +``` + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Frontend group** is responsible for creating the interface for in-app account deletion using Funkwhale UI components +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to fully delete their accounts and their content. Since users don't currently share content over ActivityPub, only local deletion needs to be achieved for the MVP. + +Since **Channels** currently implement ActivityPub behavior, we need to confirm that: + +- Channel deletions broadcast the object deletion to remote servers +- Remote servers remove all associated data when a deletion broadcast is received + +### Next steps + +At each stage of development, we need to consider how account deletion factors into features. Each ActivityPub-enabled feature must have deletion logic as part of its structure. + +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[delete]: https://www.w3.org/TR/activitypub/#delete-activity-outbox diff --git a/docs/specs/user-follow/index.md b/docs/specs/user-follow/index.md new file mode 100644 index 000000000..de3dced5b --- /dev/null +++ b/docs/specs/user-follow/index.md @@ -0,0 +1,295 @@ +# User following + +## Terminology + +The following terminology is used throughout this document: + +User +: A **person** with an account on a Funkwhale server or ActivityPub-enabled platform. + +Follow +: The act of subscribing to a user's activities to render them in a feed as they occur. + +Object +: A collection of information - formatted as [`JSON-LD`](https://json-ld.org/) - that represents entities such as content, users, or activities performed in Funkwhale. See the [ActivityPub specification](https://www.w3.org/TR/activitypub/#obj) for more details. + +Activity +: A verb that describes an action targeting an **Object**. This informs the receiving server what it needs to do with the object. For example: `Create`, `Delete`, `Undo`, `Follow`, `Block`. + +Actor +: An ActivityPub object representing an entity capable of performing actions. See the [ActivityPub specification][actor] for more details. + +Requesting user +: The user who sends a request. For example: If **Bob** requests to follow **Alice**, **Bob** is the requesting user. + +Target user +: The user who is the subject of a request. For example: If **Bob** requests to follow **Alice**, **Alice** is the target user. + +## The issue + +Funkwhale is an audio platform with an emphasis on social interaction across a federated network of servers. To this end, Funkwhale users should be able to interact with one another in meaningful ways. + +Funkwhale users broadcast the following activity when using the software: + +1. **Favoriting** content +2. **Listening** to content + +Users across the federated web should be able to follow Funkwhale accounts to receive this activity in their streams. + +## Proposed solution + +To facilitate this, Funkwhale uses the following mechanisms: + +- The **Funkwhale client API** for user to user interactions on the same server +- [ActivityPub](https://www.w3.org/TR/activitypub) for server-to-server (S2S) interactions between users + +Users should be able to discover other users using the [Webfinger protocol][webfinger] and render their public details in a manner compliant with the platform they use. Within Funkwhale, user activity should be rendered natively. Other Fediverse software may choose how to render this information. + +This specification outlines the workflows for the following actions for **local** and **remote** requests: + +1. User discovery +2. User follows +3. User unfollows +4. User blocking + +### User discovery + +Funkwhale implements the [Webfinger protocol][webfinger] for account discovery. When the **requesting user** enters the **target user's** federation handle, Funkwhale should attempt to resolve the location of the **target user** by querying the `acct:` resource with the URL encoded handle. + +#### Webfinger request + +```console +$ curl -X GET \ +-H "Content-type: application/json" \ +'https://open.audio/.well-known/webfinger?resource=acct:user%40open.audio' +``` + +#### Response + +```json +{ + "subject": "acct:user@open.audio", + "links": [ + { + "rel": "self", + "href": "https://open.audio/federation/actors/user", + "type": "application/activity+json" + } + ], + "aliases": ["https://open.audio/federation/actors/user"] +} +``` + +#### Web app behavior + +When a requesting user enters the handle of a target user in the search bar, Funkwhale does the following: + +1. Verifies the handle is well-formed +2. Forwards the request to the server + +The server is responsible for dereferencing the Webfinger query. The server does the following: + +1. Queries the domain for the account using Webfinger + - **If** the domain doesn't have a Webfinger endpoint, returns a meaningful error message. This must be displayed to the user. + - **If** the server is subject to a domain filter, or is filtering the requesting server, returns a meaningful error message. This must be displayed to the user. + - **If** no user is found on the domain, returns a meaningful error message. +2. If a matching user is found, the server should return the URL of the resource to the web app. The web app should then redirect the requesting user to a user page that shows the target user's profile image and preferred username + - **If** the target user has set their activity to **public**, the web app should render their **Favorites** and **Recently Listened** activity + +```{mermaid} +flowchart TD + search([A requesting user enters a fediverse handle\nin the search bar]) --> query(Funkwhale queries the target domain) + query --> webfinger{Does the target server\support Webfinger?} + subgraph Request verification + webfinger -->|no| error([The server returns an error message]) + webfinger -->|yes| filter{Is the requesting server subject\nto a domain filter or vice versa?} + filter -->|yes| error + filter -->|no| userfound{Was the target user found\non the server?} + userfound -->|no| error + end + userfound -->|yes| redirect([The user is redirected to a profile page\nin the web app]) +``` + +### Following users + +Following a user is a process by which a **requesting user** subscribes to the activities of a **target user**. If the **target user** accepts the follow request, the **requesting user** receives any new activities in their home feed. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/follow +``` + +When the server receives a `follow` request, it creates a `follow_request` object containing the status of the follow request which is used to display request information to the target user in their notifications. + +:::{note} +If the **target user** has configured their profile to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Follow` activity][follow]: + +1. A [`Follow` activity][follow] is posted to the **requesting user's** [outbox collection][outbox] with the **target user** as the recipient +2. The **target user** receives the request in their [inbox collection][inbox] +3. The **target user** then needs to [`Accept`][accept] or [`Reject`][reject] the [`Follow`][follow] + - If the **target user** accepts the follow, the **requesting user** is added to the **target user's** [following collection][following]. The **target user** is added to the **requesting user's** [followers collection][followers] + - If the **target user** rejects the follow, the **requesting user** is _not_ added to the **target user's** [following collection][following]. The **target user** is _not_ added to the **requesting user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Follow request + note over Bob's Outbox, Bob's Inbox : Bob's ActivityPub collections + Bob's Outbox ->> Alice's Inbox : Follow request + note over Alice's Inbox, Alice's Outbox : Alice's ActivityPub collections + Alice's Inbox ->> Alice : Display follow request + activate Alice + alt if Alice accepts Bob's request + Alice -->> Alice's Outbox : Accept follow + Alice's Outbox --> Bob's Inbox : Accept + Bob's Inbox --> Bob : Display following + end + alt if Alice rejects Bob's request + Alice -->> Alice's Inbox : Reject follow + end +``` + +:::{note} +If the **target user** has configured their activity to be _public_, all `Follows` are `Accepted` immediately. +::: + +#### Web app behavior + +In the Funkwhale web app, the **requesting user** sees a **Follow** button on the **target user's** profile page. When they select this button, the following happens: + +1. If the **target user's** profile can be followed, an action button is displayed. +2. When the **requesting user** attempts the follow the **target user**, the button should change to a {guilabel}`Pending` status. +3. If the **target user** `Accepts` the follow request, the button should update to show a {guilabel}`Following` status. + +### Unfollowing users + +Following a user is a process by which a **requesting user** unsubscribes from the activities of a **target user**. A **requesting user** may unfollow a **target user** unilaterally at any time to stop receiving updates. + +#### API behavior + +Follow requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unfollow +``` + +#### ActivityPub behavior + +If the **target user** is on a different server to the **requesting user**, the request is handled using the [ActivityPub `Undo` activity][undo]: + +1. An [`Undo` activity][undo] is posted to the **requesting user's** [outbox collection][outbox] with a [`Follow activity`][follow] as the target +2. The **target user** is removed from the **requesting user's** [following collection][following] +3. The **target user** receives the undo request in their [inbox collection][inbox] +4. The **requesting user** is removed from the **target user's** [followers collection][followers] + +```{mermaid} +sequenceDiagram + autonumber + Bob ->> Bob's Outbox : Undo request + note over Bob, Bob's Outbox : The target user is removed + Bob's Outbox ->> Alice's Inbox : Undo Follow + note over Alice's Inbox, Alice : The requesting user is removed +``` + +#### Web app behavior + +When a **requesting user** unfollows a **target user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **target user** must be visually hidden. + +### Blocking users + +When one user blocks another, no information may be shared between them. Blocking is a unilateral action that can be taken by both **requesting** and **target** actors to prevent the other from interacting with them. + +#### API behavior + +Block requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/block +``` + +#### ActivityPub behavior + +If the the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Block` activity][block] with the **blocked user's** [`Actor`][actor] as a target. + +1. A [`Block` activity][block] is posted to the **blocking user's** [outbox collection][outbox] with the **blocked user's** [`Actor`][actor] the target + - If the **blocked user** was previously in the **blocking user's** [following collection][following], they are removed + - If the **blocked user** was previously in the **blocking user's** [followers collection][followers], they are removed + +:::{warning} +As noted in the ActivityPub spec, the **blocked user** must _not_ be informed of the `Block` activity. +::: + +#### Web app behavior + +When a **blocking user** blocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. All activities relating to the **blocked user** must be visually hidden. + +If a **blocking user** navigates to the profile of a **blocked user** who has blocked them, the UI _must not_ reflect that they are blocked. The **blocking user** must be able to send a follow request which is _not_ sent to the **blocked user**. + +### Unblocking users + +**Blocking users** can unilaterally reverse blocks they have imposed on **blocked users**. This enables them to request to follow the **blocked user's** activities again. + +#### API behavior + +Unblock requests should be handled by an endpoint using a `POST` request. This request must immediately return a status message to the client. + +```text +POST /api/v2/users/{id}/unblock +``` + +#### ActivityPub behavior + +If the **blocked user** is on a different server to the **blocking user**, the request is handled using the [ActivityPub `Undo` activity][undo]. + +#### Web app behavior + +When a **blocking user** unblocks a **blocked user**, the UI must update to visually indicate that the action has succeeded. The **Follow** button must become active and interactive again. + +## Availability + +- [x] App frontend +- [x] CLI + +## Responsible parties + +The following working groups are responsible for implementing this feature: + +- The **Backend group** is responsible for building the API endpoints and ActivityPub S2S logic +- The **Design group** is responsible for drafting designs for the web app interactions +- The **Frontend group** is responsible for implementing the designs from the **Design group** and adding support for the new API +- The **Documentation group** is responsible for finalizing the specification of the feature and documenting it for users + +## Open questions + +- The API actions and endpoint names are placeholders. We need to decide what they should be called +- What limitations are there when fetching activities from remote actors? +- How should a user's followers collection, following collection, and pending requests be displayed in the web app? +- How are followed activities fetched and displayed to a user? + +## Minimum viable product + +The MVP for this feature is to implement the backend logic to enable Funkwhale users to follow one another. This can be added to the web app using existing profile fetching logic. + +### Next steps + +Once the backend logic is implemented, the frontend implementation should be revisited to improve the UX and discoverability. Additional features such as showing federated favorites on audio objects should also be considered. + +[webfinger]: https://www.rfc-editor.org/rfc/rfc7033 +[outbox]: https://www.w3.org/TR/activitypub/#outbox +[inbox]: https://www.w3.org/TR/activitypub/#inbox +[accept]: https://www.w3.org/TR/activitypub/#accept-activity-inbox +[reject]: https://www.w3.org/TR/activitypub/#reject-activity-inbox +[follow]: https://www.w3.org/TR/activitypub/#follow-activity-outbox +[actor]: https://www.w3.org/TR/activitypub/#actors +[following]: https://www.w3.org/TR/activitypub/#following +[followers]: https://www.w3.org/TR/activitypub/#followers +[undo]: https://www.w3.org/TR/activitypub/#undo-activity-outbox +[block]: https://www.w3.org/TR/activitypub/#block-activity-outbox diff --git a/docs/user/channels/delete.md b/docs/user/channels/delete.md index b32073a8e..7f35d4ff9 100644 --- a/docs/user/channels/delete.md +++ b/docs/user/channels/delete.md @@ -1,7 +1,7 @@ # Delete a channel ```{warning} -Deleting a channel is irreversible. If you delete a channel you also delete the content associated with it. Users won't be able to access the channel any more. You can't re-use the channel's __Fediverse handle__ for another channel. +Deleting a channel is irreversible. If you delete a channel you also delete the content associated with it. Users won't be able to access the channel any more. You can't reuse the channel's __Fediverse handle__ for another channel. ``` If you want to delete your channel, follow these steps: diff --git a/front/docker/funkwhale.conf.template b/front/docker/funkwhale.conf.template index af2fac74d..b7081f56d 100644 --- a/front/docker/funkwhale.conf.template +++ b/front/docker/funkwhale.conf.template @@ -1,4 +1,5 @@ upstream funkwhale-api { + # depending on your setup, you may want to update this server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; } @@ -8,18 +9,17 @@ map $http_upgrade $connection_upgrade { '' close; } + server { listen 80; listen [::]:80; - charset utf-8; + server_name _; - add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; - add_header Referrer-Policy "strict-origin-when-cross-origin"; - add_header X-Frame-Options "SAMEORIGIN" always; - add_header Service-Worker-Allowed "/"; - + # General configs root /usr/share/nginx/html; + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; # compression settings gzip on; @@ -27,7 +27,6 @@ server { gzip_min_length 256; gzip_proxied any; gzip_vary on; - gzip_types application/javascript application/vnd.geo+json @@ -48,6 +47,12 @@ server { text/x-cross-domain-policy; # end of compression settings + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + location /api/ { include /etc/nginx/funkwhale_proxy.conf; # This is needed if you have file import via upload enabled. @@ -55,17 +60,39 @@ server { proxy_pass http://funkwhale-api; } - location / { + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; alias /usr/share/nginx/html/; + try_files $uri $uri/ /index.html; + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location / { expires 1d; + include /etc/nginx/funkwhale_proxy.conf; + alias /usr/share/nginx/html/; try_files $uri $uri/ /index.html; } location ~ "/(front/)?embed.html" { + alias /usr/share/nginx/html/embed.html; add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; add_header Referrer-Policy "strict-origin-when-cross-origin"; - alias /usr/share/nginx/html/embed.html; expires 1d; } @@ -131,4 +158,5 @@ server { # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; } + } diff --git a/front/package.json b/front/package.json index 87003d8cb..5900b1357 100644 --- a/front/package.json +++ b/front/package.json @@ -11,15 +11,18 @@ "serve": "vite preview", "test": "vitest run", "test:unit": "vitest run --coverage", + "test:generate-mock-server": "msw-auto-mock ../docs/schema.yml -o test/msw-server.ts --node", "lint": "eslint --cache --cache-strategy content --ext .ts,.js,.vue,.json,.html src test cypress public/embed.html", "lint:tsc": "vue-tsc --noEmit --incremental && tsc --noEmit --incremental -p cypress", "fix-fomantic-css": "scripts/fix-fomantic-css.sh", "postinstall": "yarn run fix-fomantic-css" }, "dependencies": { + "@funkwhale/ui": "0.2.2", "@sentry/tracing": "7.47.0", "@sentry/vue": "7.47.0", - "@vue/runtime-core": "3.3.2", + "@tauri-apps/api": "2.0.0-beta.1", + "@vue/runtime-core": "3.3.11", "@vueuse/core": "10.3.0", "@vueuse/integrations": "10.3.0", "@vueuse/math": "10.3.0", @@ -29,24 +32,24 @@ "butterchurn": "3.0.0-beta.4", "butterchurn-presets": "3.0.0-beta.4", "diff": "5.1.0", - "dompurify": "2.4.7", + "dompurify": "3.0.8", "focus-trap": "7.2.0", - "fomantic-ui-css": "2.9.2", - "howler": "2.2.3", + "fomantic-ui-css": "2.9.3", "idb-keyval": "6.2.1", "lodash-es": "4.17.21", - "lru-cache": "7.14.1", + "lru-cache": "10.2.0", "moment": "2.29.4", "showdown": "2.1.0", "stacktrace-js": "2.0.2", - "standardized-audio-context": "25.3.55", + "standardized-audio-context": "25.3.60", "text-clipper": "2.2.0", "transliteration": "2.3.5", "universal-cookie": "4.0.4", - "vue": "3.3.2", + "vite-plugin-pwa": "0.14.4", + "vue": "3.3.11", "vue-gettext": "2.1.12", - "vue-i18n": "9.3.0-beta.19", - "vue-router": "4.2.2", + "vue-i18n": "9.9.1", + "vue-router": "4.2.5", "vue-upload-component": "3.1.8", "vue-virtual-scroller": "2.0.0-beta.8", "vue3-gettext": "2.3.4", @@ -57,50 +60,52 @@ "vuex-router-sync": "5.0.0" }, "devDependencies": { + "@faker-js/faker": "8.4.1", "@intlify/eslint-plugin-vue-i18n": "2.0.0", - "@intlify/unplugin-vue-i18n": "0.8.2", - "@types/diff": "5.0.3", - "@types/dompurify": "2.4.0", - "@types/howler": "2.2.7", - "@types/jquery": "3.5.16", - "@types/lodash-es": "4.17.7", - "@types/moxios": "0.4.15", - "@types/qs": "6.9.7", - "@types/semantic-ui": "2.2.7", - "@types/showdown": "2.0.0", + "@intlify/unplugin-vue-i18n": "2.0.0", + "@tauri-apps/cli": "2.0.0-beta.2", + "@types/diff": "5.0.9", + "@types/dompurify": "3.0.5", + "@types/jquery": "3.5.29", + "@types/lodash-es": "4.17.12", + "@types/moxios": "0.4.17", + "@types/qs": "6.9.10", + "@types/semantic-ui": "2.2.9", + "@types/showdown": "2.0.6", "@types/vue-virtual-scroller": "npm:@earltp/vue-virtual-scroller", - "@typescript-eslint/eslint-plugin": "5.48.2", - "@vitejs/plugin-vue": "4.2.3", - "@vitest/coverage-c8": "0.25.8", + "@typescript-eslint/eslint-plugin": "7.1.0", + "@vitejs/plugin-vue": "5.0.3", + "@vitest/coverage-v8": "1.3.1", "@vue-macros/volar": "0.13.3", - "@vue/compiler-sfc": "3.3.2", + "@vue/compiler-sfc": "3.3.11", "@vue/eslint-config-standard": "8.0.1", - "@vue/eslint-config-typescript": "11.0.2", + "@vue/eslint-config-typescript": "12.0.0", "@vue/test-utils": "2.2.7", - "@vue/tsconfig": "0.1.3", - "axios-mock-adapter": "1.21.4", - "cypress": "12.14.0", - "eslint": "8.30.0", - "eslint-config-standard": "17.0.0", - "eslint-plugin-html": "7.1.0", - "eslint-plugin-import": "2.26.0", - "eslint-plugin-n": "15.6.1", + "@vue/tsconfig": "0.5.1", + "cypress": "13.6.4", + "eslint": "8.57.0", + "eslint-config-standard": "17.1.0", + "eslint-plugin-html": "8.0.0", + "eslint-plugin-import": "2.29.1", + "eslint-plugin-n": "16.6.2", "eslint-plugin-node": "11.1.0", "eslint-plugin-promise": "6.1.1", - "eslint-plugin-vue": "9.8.0", - "jsdom": "20.0.3", - "jsonc-eslint-parser": "2.1.0", + "eslint-plugin-vue": "9.22.0", + "jsdom": "24.0.0", + "jsonc-eslint-parser": "2.4.0", + "msw": "2.2.1", + "msw-auto-mock": "0.18.0", + "patch-package": "8.0.0", "rollup-plugin-visualizer": "5.9.0", "sass": "1.57.1", "sinon": "15.0.2", - "standardized-audio-context-mock": "9.6.18", - "typescript": "4.9.5", + "standardized-audio-context-mock": "9.6.32", + "typescript": "5.3.3", "unplugin-vue-macros": "2.4.6", "utility-types": "3.10.0", - "vite": "4.3.5", - "vite-plugin-pwa": "0.14.4", - "vitest": "0.25.8", - "vue-tsc": "1.6.5", + "vite": "5.1.3", + "vitest": "1.3.1", + "vue-tsc": "1.8.27", "workbox-core": "6.5.4", "workbox-precaching": "6.5.4", "workbox-routing": "6.5.4", diff --git a/front/public/embed.html b/front/public/embed.html index 39bca4c9a..8e367ada3 100644 --- a/front/public/embed.html +++ b/front/public/embed.html @@ -82,7 +82,8 @@ // that do not support other codecs to be able to play it :) if (sources.length > 0 && !sources.some(({ mimetype }) => mimetype === 'audio/mpeg')) { const source = sources[0].listen_url - const url = new URL(source.test(/^https?:/) + const regex = /^https?:/ + const url = new URL(regex.test(source) ? source : source[0] === '/' ? `${baseUrl}${source}` diff --git a/front/src/App.vue b/front/src/App.vue index 37b9f48a7..6d6ab2649 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -2,7 +2,7 @@ import type { QueueTrack } from '~/composables/audio/queue' import { useIntervalFn, useStyleTag, useToggle, useWindowSize } from '@vueuse/core' -import { computed, nextTick, onMounted, ref, watchEffect, defineAsyncComponent } from 'vue' +import { computed, nextTick, onMounted, watchEffect, defineAsyncComponent } from 'vue' import { useQueue } from '~/composables/audio/queue' import { useStore } from '~/store' @@ -14,7 +14,6 @@ const ChannelUploadModal = defineAsyncComponent(() => import('~/components/chann const PlaylistModal = defineAsyncComponent(() => import('~/components/playlists/PlaylistModal.vue')) const FilterModal = defineAsyncComponent(() => import('~/components/moderation/FilterModal.vue')) const ReportModal = defineAsyncComponent(() => import('~/components/moderation/ReportModal.vue')) -const SetInstanceModal = defineAsyncComponent(() => import('~/components/SetInstanceModal.vue')) const ServiceMessages = defineAsyncComponent(() => import('~/components/ServiceMessages.vue')) const ShortcutsModal = defineAsyncComponent(() => import('~/components/ShortcutsModal.vue')) const AudioPlayer = defineAsyncComponent(() => import('~/components/audio/Player.vue')) @@ -72,7 +71,6 @@ const [showShortcutsModal, toggleShortcutsModal] = useToggle(false) onKeyboardShortcut('h', () => toggleShortcutsModal()) const { width } = useWindowSize() -const showSetInstanceModal = ref(false) // Fetch user data on startup // NOTE: We're not checking if we're authenticated in the store, @@ -99,10 +97,8 @@ store.dispatch('auth/fetchUser') <sidebar :width="width" - @show:set-instance-modal="showSetInstanceModal = !showSetInstanceModal" @show:shortcuts-modal="toggleShortcutsModal" /> - <set-instance-modal v-model:show="showSetInstanceModal" /> <service-messages /> <transition name="queue"> <queue v-show="store.state.ui.queueFocused" /> diff --git a/front/src/assets/logo/logo-full-500-white.png b/front/src/assets/logo/logo-full-500-white.png new file mode 100644 index 000000000..0bd22fb34 Binary files /dev/null and b/front/src/assets/logo/logo-full-500-white.png differ diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue index 23e16ea77..9b6cd4d80 100644 --- a/front/src/components/Home.vue +++ b/front/src/components/Home.vue @@ -264,7 +264,7 @@ whenever(() => store.state.auth.authenticated, () => { <div class="content"> <a class="header" - href="https://funkwhale.audio/en_US/apps" + href="https://funkwhale.audio/apps" target="_blank" rel="noopener" > diff --git a/front/src/components/SetInstanceModal.vue b/front/src/components/SetInstanceModal.vue deleted file mode 100644 index 43b1662e9..000000000 --- a/front/src/components/SetInstanceModal.vue +++ /dev/null @@ -1,160 +0,0 @@ -<script setup lang="ts"> -import { ref, computed, watch, nextTick } from 'vue' -import { useI18n } from 'vue-i18n' -import { useVModel } from '@vueuse/core' -import { useStore } from '~/store' -import { uniq } from 'lodash-es' - -import axios from 'axios' - -import SemanticModal from '~/components/semantic/Modal.vue' - -interface Events { - (e: 'update:show', show: boolean): void -} - -interface Props { - show: boolean -} - -const emit = defineEmits<Events>() -const props = defineProps<Props>() - -const show = useVModel(props, 'show', emit) - -const instanceUrl = ref('') - -const store = useStore() -const suggestedInstances = computed(() => { - const serverUrl = store.state.instance.frontSettings.defaultServerUrl - - return uniq([ - store.state.instance.instanceUrl, - ...store.state.instance.knownInstances, - serverUrl.endsWith('/') ? serverUrl : serverUrl + '/', - store.getters['instance/defaultInstance'] - ]) -}) - -watch(() => store.state.instance.instanceUrl, () => store.dispatch('instance/fetchSettings')) - -const { t } = useI18n() -const isError = ref(false) -const isLoading = ref(false) -const checkAndSwitch = async (url: string) => { - isError.value = false - isLoading.value = true - - try { - const instanceUrl = new URL(url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`).origin - await axios.get(instanceUrl + '/api/v1/instance/nodeinfo/2.0/') - - show.value = false - store.commit('ui/addMessage', { - content: t('components.SetInstanceModal.message.newUrl', { url: instanceUrl }), - date: new Date() - }) - - await nextTick() - store.dispatch('instance/setUrl', instanceUrl) - } catch (error) { - isError.value = true - } - - isLoading.value = false -} -</script> - -<template> - <semantic-modal - v-model:show="show" - @update:show="isError = false" - > - <h3 class="header"> - {{ $t('components.SetInstanceModal.header.chooseInstance') }} - </h3> - <div class="scrolling content"> - <div - v-if="isError" - role="alert" - class="ui negative message" - > - <h4 class="header"> - {{ $t('components.SetInstanceModal.header.failure') }} - </h4> - <ul class="list"> - <li> - {{ $t('components.SetInstanceModal.help.serverDown') }} - </li> - <li> - {{ $t('components.SetInstanceModal.help.notFunkwhaleServer') }} - </li> - </ul> - </div> - <form - class="ui form" - @submit.prevent="checkAndSwitch(instanceUrl)" - > - <p - v-if="$store.state.instance.instanceUrl" - class="description" - > - <i18n-t keypath="components.SetInstanceModal.message.currentConnection"> - <a - :href="$store.state.instance.instanceUrl" - target="_blank" - > - {{ $store.getters['instance/domain'] }} - <i class="external icon" /> - </a> - </i18n-t> - {{ $t('', {url: $store.state.instance.instanceUrl, hostname: $store.getters['instance/domain']}) }} - </p> - <p v-else> - {{ $t('components.SetInstanceModal.help.selectPod') }} - </p> - <div class="field"> - <label for="instance-picker">{{ $t('components.SetInstanceModal.label.url') }}</label> - <div class="ui action input"> - <input - id="instance-picker" - v-model="instanceUrl" - type="text" - placeholder="https://funkwhale.server" - > - <button - type="submit" - :class="['ui', 'icon', {loading: isLoading}, 'button']" - > - {{ $t('components.SetInstanceModal.button.submit') }} - </button> - </div> - </div> - </form> - <div class="ui hidden divider" /> - <form - class="ui form" - @submit.prevent="" - > - <div class="field"> - <h4> - {{ $t('components.SetInstanceModal.header.suggestions') }} - </h4> - <button - v-for="(url, key) in suggestedInstances" - :key="key" - class="ui basic button" - @click="checkAndSwitch(url)" - > - {{ url }} - </button> - </div> - </form> - </div> - <div class="actions"> - <button class="ui basic cancel button"> - {{ $t('components.SetInstanceModal.button.cancel') }} - </button> - </div> - </semantic-modal> -</template> diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index a3cd9ca78..5cace5695 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -17,16 +17,12 @@ import Logo from '~/components/Logo.vue' import useThemeList from '~/composables/useThemeList' import useTheme from '~/composables/useTheme' - -interface Events { - (e: 'show:set-instance-modal'): void -} +import { isTauri as checkTauri } from '~/composables/tauri' interface Props { width: number } -const emit = defineEmits<Events>() defineProps<Props>() const store = useStore() @@ -108,6 +104,8 @@ watch(locale, (locale) => { }) const isProduction = import.meta.env.PROD +const isTauri = checkTauri() + const showUserModal = ref(false) const showThemeModal = ref(false) @@ -540,15 +538,15 @@ onMounted(() => { </div> </div> <div - v-if="!isProduction" + v-if="!isProduction || isTauri" class="item" > - <a - role="button" - href="" + <router-link + to="/instance-chooser" class="link item" - @click.prevent="emit('show:set-instance-modal')" - >{{ $t('components.Sidebar.link.switchInstance') }}</a> + > + {{ $t('components.Sidebar.link.switchInstance') }} + </router-link> </div> </nav> </section> diff --git a/front/src/components/admin/SettingsGroup.vue b/front/src/components/admin/SettingsGroup.vue index ae05e1e48..a2bf872a6 100644 --- a/front/src/components/admin/SettingsGroup.vue +++ b/front/src/components/admin/SettingsGroup.vue @@ -217,6 +217,20 @@ const save = async () => { {{ v[1] }} </option> </select> + <select + v-else-if="setting.field.class === 'ChoiceField'" + :id="setting.identifier" + v-model="values[setting.identifier]" + class="ui search selection dropdown" + > + <option + v-for="v in setting.additional_data?.choices" + :key="v[0]" + :value="v[0]" + > + {{ v[1] }} + </option> + </select> <div v-else-if="setting.field.widget.class === 'ImageWidget'"> <input :id="setting.identifier" diff --git a/front/src/components/audio/EmbedWizard.vue b/front/src/components/audio/EmbedWizard.vue index 05ddd2441..266ba4c7d 100644 --- a/front/src/components/audio/EmbedWizard.vue +++ b/front/src/components/audio/EmbedWizard.vue @@ -39,8 +39,7 @@ const iframeSrc = computed(() => { const frameWidth = computed(() => width.value ?? '100%') const embedCode = computed(() => `<iframe width="${frameWidth.value}" height="${height.value}" scrolling="no" frameborder="no" src="${iframeSrc.value.replace(/&/g, '&')}"></iframe>`) -const textarea = ref() -const { copy, copied } = useClipboard({ source: textarea }) +const { copy, copied } = useClipboard({ source: embedCode }) </script> <template> @@ -103,8 +102,7 @@ const { copy, copied } = useClipboard({ source: textarea }) {{ $t('components.audio.EmbedWizard.help.embed') }} </p> <textarea - ref="textarea" - :value="embedCode" + v-model="embedCode" rows="5" readonly /> diff --git a/front/src/components/auth/LoginForm.vue b/front/src/components/auth/LoginForm.vue index 41be7710b..ebdd917c3 100644 --- a/front/src/components/auth/LoginForm.vue +++ b/front/src/components/auth/LoginForm.vue @@ -1,9 +1,9 @@ <script setup lang="ts"> import type { BackendError } from '~/types' -import type { RouteLocationRaw } from 'vue-router' +import { onBeforeRouteLeave, type RouteLocationRaw, useRouter } from 'vue-router' import { ref, reactive, computed, onMounted, nextTick } from 'vue' -import { useRouter } from 'vue-router' +import { useEventListener } from '@vueuse/core' import { useI18n } from 'vue-i18n' import { useStore } from '~/store' @@ -26,6 +26,15 @@ const { t } = useI18n() const store = useStore() const router = useRouter() +// TODO (wvffle): Move to store logic when migrated to pinia +useEventListener(window, 'beforeunload', () => { + store.dispatch('auth/tryFinishOAuthFlow') +}) + +onBeforeRouteLeave(() => { + store.dispatch('auth/tryFinishOAuthFlow') +}) + const credentials = reactive({ username: '', password: '' @@ -53,13 +62,13 @@ const submit = async () => { } else { await store.dispatch('auth/oauthLogin', props.next) } - } catch (error) { + } catch (error: any) { const backendError = error as BackendError if (backendError.response?.status === 400) { errors.value = ['invalid_credentials'] } else { - errors.value = backendError.backendErrors + errors.value = backendError.backendErrors ?? [error.message ?? error] } } @@ -81,7 +90,9 @@ const submit = async () => { {{ $t('components.auth.LoginForm.header.loginFailure') }} </h4> <ul class="list"> - <li v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value"> + <li + v-if="errors[0] == 'invalid_credentials' && $store.state.instance.settings.moderation.signup_approval_enabled.value" + > {{ $t('components.auth.LoginForm.help.approvalRequired') }} </li> <li v-else-if="errors[0] == 'invalid_credentials'"> @@ -98,7 +109,7 @@ const submit = async () => { {{ $t('components.auth.LoginForm.label.username') }} <template v-if="showSignup"> <span class="middle pipe symbol" /> - <router-link :to="{path: '/signup'}"> + <router-link :to="{ path: '/signup' }"> {{ $t('components.auth.LoginForm.link.createAccount') }} </router-link> </template> @@ -120,7 +131,7 @@ const submit = async () => { <span class="middle pipe symbol" /> <router-link tabindex="1" - :to="{name: 'auth.password-reset', query: {email: credentials.username}}" + :to="{ name: 'auth.password-reset', query: { email: credentials.username } }" > {{ $t('components.auth.LoginForm.link.resetPassword') }} </router-link> @@ -138,7 +149,7 @@ const submit = async () => { </p> </template> <button - :class="['ui', {'loading': isLoading}, 'right', 'floated', buttonClasses, 'button']" + :class="['ui', { 'loading': isLoading }, 'right', 'floated', buttonClasses, 'button']" type="submit" > {{ $t('components.auth.LoginForm.button.login') }} diff --git a/front/src/components/common/HumanDate.vue b/front/src/components/common/HumanDate.vue index 881762aba..e870ad4ae 100644 --- a/front/src/components/common/HumanDate.vue +++ b/front/src/components/common/HumanDate.vue @@ -13,13 +13,14 @@ const props = withDefaults(defineProps<Props>(), { }) const date = computed(() => new Date(props.date)) + // TODO (wvffle): Translate useTimeAgo const realDate = useTimeAgo(date) </script> <template> <time - :datetime="date" + :datetime="date.toString()" :title="momentFormat(date)" > <i diff --git a/front/src/composables/audio/queue.ts b/front/src/composables/audio/queue.ts index b906612a4..9f4659f9c 100644 --- a/front/src/composables/audio/queue.ts +++ b/front/src/composables/audio/queue.ts @@ -101,7 +101,7 @@ export const currentTrack = computed(() => queue.value[currentIndex.value]) // Use Queue export const useQueue = createGlobalState(() => { - const { currentSound } = useTracks() + const { currentSound, clearCache } = useTracks() const createQueueTrack = async (track: Track, skipFetch = false): Promise<QueueTrack> => { const { default: store } = await import('~/store') @@ -341,6 +341,9 @@ export const useQueue = createGlobalState(() => { await delMany(lastTracks) currentIndex.value = 0 + + // Clear track cache + clearCache() } // Radio queue populating diff --git a/front/src/composables/audio/tracks.ts b/front/src/composables/audio/tracks.ts index 8ea991867..aeffe7020 100644 --- a/front/src/composables/audio/tracks.ts +++ b/front/src/composables/audio/tracks.ts @@ -4,13 +4,13 @@ import type { Sound } from '~/api/player' import { createGlobalState, syncRef, useTimeoutFn, whenever } from '@vueuse/core' import { computed, ref, watchEffect } from 'vue' +import { LRUCache } from 'lru-cache' import { connectAudioSource } from '~/composables/audio/audio-api' import { usePlayer } from '~/composables/audio/player' import { useQueue } from '~/composables/audio/queue' import { soundImplementation } from '~/api/player' -import useLRUCache from '~/composables/data/useLRUCache' import useLogger from '~/composables/useLogger' import store from '~/store' @@ -22,11 +22,13 @@ const AUDIO_ELEMENT = document.createElement('audio') const logger = useLogger() const soundPromises = new Map<number, Promise<Sound>>() -const soundCache = useLRUCache<number, Sound>({ +const soundCache = new LRUCache<number, Sound>({ max: 3, dispose: (sound) => sound.dispose() }) +const currentTrack = ref<QueueTrack>() + export const fetchTrackSources = async (id: number): Promise<QueueTrackSource[]> => { const { uploads } = await axios.get(`tracks/${id}/`) .then(response => response.data as Track, () => ({ uploads: [] as Upload[] })) @@ -130,7 +132,7 @@ export const useTracks = createGlobalState(() => { // // This means that the currently playing track (B) is never removed from the cache (and isn't disposed prematurely) during its playback. // However, we end up in a situation where previous track isn't cached anymore but two next tracks are. - // That implies that when user changes to the previous track ( onlybefore track B ends), a new sound instance would be created, + // That implies that when user changes to the previous track (only before track B ends), a new sound instance would be created, // which means that there might be some network requests before playback. if (currentTrack.value) { soundCache.get(currentTrack.value.id) @@ -195,8 +197,6 @@ export const useTracks = createGlobalState(() => { } } - const currentTrack = ref<QueueTrack>() - // NOTE: We want to have it called only once, hence we're using createGlobalState const initialize = createGlobalState(() => { const { currentIndex, currentTrack: track, queue, hasNext } = useQueue() @@ -226,10 +226,15 @@ export const useTracks = createGlobalState(() => { const currentSound = computed(() => soundCache.get(currentTrack.value?.id ?? -1)) + const clearCache = () => { + return soundCache.clear() + } + return { initialize, createSound, createTrack, + clearCache, currentSound } }) diff --git a/front/src/composables/data/useLRUCache.ts b/front/src/composables/data/useLRUCache.ts deleted file mode 100644 index 14c4de962..000000000 --- a/front/src/composables/data/useLRUCache.ts +++ /dev/null @@ -1,11 +0,0 @@ -import LRU from 'lru-cache' -import { reactive } from 'vue' - -export default <T, K>(options: LRU.Options<T, K>) => { - const cache = new LRU(options) - - // @ts-expect-error keyMap is used internally so it is not defined in the types - cache.keyMap = reactive(cache.keyMap) - - return cache -} diff --git a/front/src/composables/tauri.ts b/front/src/composables/tauri.ts new file mode 100644 index 000000000..f6c08195f --- /dev/null +++ b/front/src/composables/tauri.ts @@ -0,0 +1,3 @@ +export const isTauri = () => { + return 'TAURI_ENV_PLATFORM' in import.meta.env +} diff --git a/front/src/composables/useLogger.ts b/front/src/composables/useLogger.ts index cdb14464e..86161d830 100644 --- a/front/src/composables/useLogger.ts +++ b/front/src/composables/useLogger.ts @@ -46,7 +46,11 @@ const FILETYPE_COLOR: Record<string, string> = { // NOTE: We're pushing all logs to the end of the event loop const createLoggerFn = (level: LogLevel) => { - // NOTE: Don't log time and debug in production + // NOTE: Use console in test environment + // eslint-disable-next-line no-console + if (import.meta.env.VITEST) return console[level] + + // NOTE: Don't log time and debug in production environment if (level === 'time' || level === 'debug') { if (import.meta.env.PROD) return () => undefined } diff --git a/front/src/locales/ar.json b/front/src/locales/ar.json index c84456a99..6477b70f2 100644 --- a/front/src/locales/ar.json +++ b/front/src/locales/ar.json @@ -2297,22 +2297,6 @@ "modal": "اختصارات لوحة المفاتيح" } }, - "SetInstanceModal": { - "button": { - "cancel": "إلغاء", - "submit": "إرسال" - }, - "header": { - "chooseInstance": "اختر خادومك", - "suggestions": "الخيارات المتاحة" - }, - "label": { - "url": "بيانات مثيل الخادم" - }, - "message": { - "newUrl": "إنك الآن تستخدم خادم Funkwhale على { url }" - } - }, "Queue": { "button": { "clear": "امسح", @@ -3593,6 +3577,21 @@ "tracks": "المَقاطِع" } } + }, + "ChooseInstance": { + "button": { + "submit": "إرسال" + }, + "header": { + "chooseInstance": "اختر خادومك", + "suggestions": "الخيارات المتاحة" + }, + "label": { + "url": "بيانات مثيل الخادم" + }, + "message": { + "newUrl": "إنك الآن تستخدم خادم Funkwhale على { url }" + } } }, "composables": { diff --git a/front/src/locales/bn.json b/front/src/locales/bn.json new file mode 100644 index 000000000..450dfc5a1 --- /dev/null +++ b/front/src/locales/bn.json @@ -0,0 +1,4615 @@ +{ + "App": { + "loading": "প্রকরিয়ারত…" + }, + "components": { + "About": { + "description": { + "findApp": "", + "funkwhale": "", + "publicContent": "", + "quota": "", + "signup": "" + }, + "header": { + "aboutPod": "", + "findApp": "", + "funkwhale": "", + "publicContent": "", + "signup": "" + }, + "help": { + "closedRegistrations": "" + }, + "link": { + "findOtherPod": "", + "learnMore": "" + }, + "message": { + "greeting": "", + "loggedIn": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "সম্পর্কে" + }, + "AboutPod": { + "feature": { + "allowList": "অনুমোদন-তালিকা", + "anonymousAccess": "", + "federation": "ফেডারেশন", + "quota": "", + "registrations": "নিবন্ধন", + "status": { + "closed": "বন্ধ", + "disabled": "নিষ্ক্রিয়", + "enabled": "সক্রিয়", + "open": "খোলা" + }, + "version": "" + }, + "header": { + "about": "", + "contact": "যোগাযোগ", + "features": "বৈশিষ্ট্যসমূহ", + "rules": "নিয়ম", + "statistics": "পরিসংখ্যান", + "terms": "" + }, + "link": { + "about": "", + "features": "বৈশিষ্ট্যসমূহ", + "introduction": "ভূমিকা", + "rules": "নিয়ম", + "statistics": "পরিসংখ্যান", + "terms": "" + }, + "message": { + "contact": "" + }, + "notApplicable": "অপ্রযোজ্য", + "placeholder": { + "noDescription": "", + "noRules": "", + "noTerms": "" + }, + "stat": { + "activeUsers": "", + "albumsCount": "", + "artistsCount": "", + "hoursOfMusic": "", + "listeningsCount": "", + "tracksCount": "" + }, + "title": "সম্পর্কে" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "", + "paragraph2": "" + }, + "quota": "", + "signup": "" + }, + "header": { + "about": "", + "aboutFunkwhale": "", + "contact": "যোগাযোগ", + "links": "", + "login": "", + "newAlbums": "", + "newChannels": "", + "signup": "", + "statistics": "পরিসংখ্যান", + "welcome": "" + }, + "help": { + "registrationsClosed": "" + }, + "link": { + "findOtherPod": "", + "funkwhale": "", + "learnMore": "", + "mobileApps": { + "description": "", + "label": "" + }, + "publicContent": { + "description": "", + "label": "" + }, + "rules": "", + "userGuides": { + "description": "", + "label": "" + }, + "viewMore": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "মূলপাতা" + }, + "PageNotFound": { + "header": { + "pageNotFound": "" + }, + "link": { + "home": "" + }, + "message": { + "pageNotFound": "" + }, + "title": "" + }, + "Queue": { + "button": { + "clear": "পরিষ্কার", + "close": "বন্ধ", + "stopRadio": "" + }, + "header": { + "failure": "", + "noSources": "", + "radio": "" + }, + "label": { + "addArtistContentFilter": "", + "duration": "সময়কাল", + "enterFullscreen": "", + "exitFullscreen": "", + "favorite": "", + "next": "", + "pause": "থামো", + "play": "চালু", + "populatingRadio": "", + "previous": "", + "queue": "", + "remove": "সরাও", + "restart": "", + "selectTrack": "", + "showCoverArt": "", + "showVisualizer": "" + }, + "message": { + "automaticPlay": "", + "radio": "", + "webglUnsupported": "" + }, + "meta": { + "end": "শেষ", + "queuePosition": "", + "startTime": "০০:০০", + "unknownAlbum": "", + "unknownArtist": "" + }, + "warning": { + "connectivity": "" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "ফেডিভার্স", + "rss": "আরএসএস", + "search": "অনুসন্ধান" + }, + "description": { + "fediverse": "", + "rss": "" + }, + "error": { + "fetchFailed": "" + }, + "header": { + "fetchFailed": "" + }, + "label": { + "fediverse": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + }, + "rss": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + } + }, + "warning": { + "unsupported": "" + } + }, + "ShortcutsModal": { + "button": { + "close": "" + }, + "header": { + "modal": "" + }, + "shortcut": { + "audio": { + "clearQueue": "", + "decreaseVolume": "", + "expandQueue": "", + "increaseVolume": "", + "label": "", + "playNext": "", + "playPause": "", + "playPrevious": "", + "seekBack30": "", + "seekBack5": "", + "seekForward30": "", + "seekForward5": "", + "shuffleQueue": "", + "toggleFavorite": "", + "toggleLoop": "", + "toggleMute": "" + }, + "general": { + "focus": "", + "label": "", + "show": "", + "unfocus": "" + } + } + }, + "Sidebar": { + "header": { + "administration": "", + "explore": "", + "library": "", + "main": "", + "more": "" + }, + "label": { + "add": "", + "administration": "", + "edits": "", + "follows": "", + "language": "", + "main": "", + "play": "", + "reports": "", + "theme": "" + }, + "link": { + "about": "", + "albums": "", + "artists": "", + "browse": "", + "channels": "", + "createAccount": "", + "favorites": "", + "home": "", + "library": "", + "login": "", + "moderation": "", + "playlists": "", + "podcasts": "", + "radios": "", + "search": "", + "settings": "", + "switchInstance": "", + "users": "" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "" + }, + "header": { + "error": "", + "image": "" + }, + "message": { + "success": "" + } + }, + "SignupFormBuilder": { + "button": { + "add": "", + "edit": "", + "preview": "" + }, + "help": { + "additionalFields": "", + "helpText": "" + }, + "label": { + "additionalField": "", + "additionalFields": "", + "delete": "", + "helpText": "", + "moveDown": "", + "moveUp": "" + }, + "table": { + "additionalFields": { + "header": { + "actions": "", + "label": "", + "required": "", + "type": "" + }, + "required": { + "false": "", + "true": "" + }, + "type": { + "long": "", + "short": "" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "ChannelEntries": { + "help": { + "subscribe": "" + } + }, + "ChannelForm": { + "header": { + "error": "" + }, + "help": { + "discography": "", + "podcast": "", + "podcastFields": "", + "username": "" + }, + "label": { + "category": "", + "description": "", + "discography": "", + "email": "", + "image": "", + "language": "", + "name": "", + "owner": "", + "podcast": "", + "subcategory": "", + "tags": "", + "username": "" + }, + "legend": { + "purpose": "" + }, + "loader": { + "loading": "" + }, + "placeholder": { + "name": "", + "username": "" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "" + } + }, + "ChannelSeries": { + "button": { + "showMore": "" + }, + "help": { + "subscribe": "" + } + }, + "ChannelsWidget": { + "button": { + "showMore": "" + } + }, + "EmbedWizard": { + "button": { + "copy": "" + }, + "header": { + "preview": "" + }, + "help": { + "anonymous": "", + "embed": "", + "width": "" + }, + "label": { + "embed": "", + "height": "", + "width": "" + }, + "message": { + "copy": "" + }, + "warning": { + "anonymous": "" + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "", + "follow": "", + "unfollow": "" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "", + "addToQueue": "", + "discretePlay": "", + "episodeDetails": "", + "hideArtist": "", + "playAlbum": "", + "playArtist": "", + "playNext": "", + "playNow": "", + "playPlaylist": "", + "playTrack": "", + "playTracks": "", + "report": "", + "startRadio": "", + "trackDetails": "" + }, + "title": { + "more": "", + "unavailable": "" + } + }, + "Player": { + "header": { + "player": "" + }, + "label": { + "addArtistContentFilter": "", + "audioPlayer": "", + "clearQueue": "", + "expandQueue": "", + "loopingDisabled": "", + "loopingSingle": "", + "loopingWholeQueue": "", + "mute": "", + "nextTrack": "", + "pause": "", + "play": "", + "previousTrack": "", + "shuffleQueue": "", + "unmute": "" + }, + "meta": { + "position": "", + "unknownAlbum": "", + "unknownArtist": "" + } + }, + "PlayerControls": { + "labels": { + "next": "", + "pause": "", + "play": "", + "previous": "" + } + }, + "Search": { + "empty": { + "noAlbums": "", + "noArtists": "" + }, + "header": { + "albums": "", + "artists": "", + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "SearchBar": { + "empty": { + "noResults": "" + }, + "header": { + "noResults": "" + }, + "label": { + "album": "", + "artist": "", + "category": { + "federation": "", + "podcasts": "" + }, + "search": "", + "tag": "", + "track": "" + }, + "link": { + "fediverse": "", + "more": "", + "rss": "" + }, + "placeholder": { + "search": "" + } + }, + "VolumeControl": { + "button": { + "mute": "", + "unmute": "" + }, + "label": { + "slider": "" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "", + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + }, + "Table": { + "table": { + "header": { + "album": "", + "artist": "", + "title": "" + } + } + }, + "Widget": { + "button": { + "more": "" + }, + "empty": { + "noResults": "" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "" + }, + "header": { + "appDetails": "", + "appSecretWarning": "", + "editApp": "" + }, + "help": { + "appDetails": "" + }, + "label": { + "accessToken": "", + "appId": "", + "appSecret": "" + }, + "link": { + "settings": "" + }, + "message": { + "appSecretWarning": "" + }, + "title": "" + }, + "ApplicationForm": { + "button": { + "create": "", + "update": "" + }, + "header": { + "failure": "" + }, + "help": { + "redirectUri": "" + }, + "label": { + "name": "", + "redirectUri": "", + "scopes": { + "description": "", + "label": "", + "read": { + "description": "", + "label": "" + }, + "write": { + "description": "", + "label": "" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "" + }, + "title": "" + }, + "Authorize": { + "button": { + "authorize": "" + }, + "header": { + "access": "", + "allScopes": "", + "authorize": "", + "authorizeFailure": "", + "fetchFailure": "", + "readOnly": "", + "writeOnly": "" + }, + "help": { + "copyCode": "", + "pasteCode": "", + "redirect": "" + }, + "message": { + "unknownPermissions": "" + }, + "title": "" + }, + "LoginForm": { + "button": { + "login": "" + }, + "header": { + "loginFailure": "" + }, + "help": { + "approvalRequired": "", + "invalidCredentials": "" + }, + "label": { + "password": "", + "username": "" + }, + "link": { + "createAccount": "", + "resetPassword": "" + }, + "message": { + "redirect": "" + }, + "placeholder": { + "username": "" + } + }, + "Logout": { + "button": { + "logout": "" + }, + "header": { + "confirm": "", + "unauthenticated": "" + }, + "link": { + "login": "" + }, + "message": { + "loggedIn": "" + }, + "title": "" + }, + "Plugin": { + "button": { + "save": "", + "scan": "" + }, + "description": { + "library": "" + }, + "header": { + "failure": "" + }, + "label": { + "library": "", + "pluginEnabled": "" + }, + "link": { + "documentation": "" + } + }, + "Settings": { + "button": { + "delete": "", + "deleteAccount": "", + "deleteAccountConfirm": "", + "disableSubsonic": "", + "edit": "", + "password": "", + "refresh": "", + "remove": "", + "removeApp": "", + "revoke": "", + "revokeAccess": "", + "update": "", + "updateSettings": "" + }, + "description": { + "authorizedApps": "", + "changeEmail": "", + "changePassword": { + "paragraph1": "", + "paragraph2": "" + }, + "contentFilters": "", + "deleteAccount": "", + "plugins": "", + "yourApps": "" + }, + "header": { + "accountFailure": "", + "accountSettings": "", + "authorizedApps": "", + "avatar": "", + "avatarFailure": "", + "changeEmail": "", + "changePassword": "", + "contentFilters": "", + "deleteAccount": "", + "emailFailure": "", + "hiddenArtists": "", + "noApps": "", + "noPersonalApps": "", + "passwordFailure": "", + "plugins": "", + "settingsUpdated": "", + "updateFailure": "", + "yourApps": "" + }, + "help": { + "changePassword": "", + "noApps": "", + "noPersonalApps": "" + }, + "label": { + "avatar": "", + "currentPassword": "", + "newEmail": "", + "newPassword": "", + "password": "" + }, + "link": { + "managePlugins": "", + "newApp": "" + }, + "message": { + "confirmDelete": "", + "currentEmail": "" + }, + "modal": { + "changePassword": { + "content": { + "logout": "", + "subsonic": "", + "warning": "" + }, + "header": "" + }, + "deleteAccount": { + "content": { + "warning": "" + }, + "header": "" + }, + "deleteApp": { + "content": { + "warning": "" + }, + "header": "" + }, + "revokeApp": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "", + "name": "" + } + }, + "authorizedApps": { + "header": { + "application": "", + "permissions": "" + } + }, + "yourApps": { + "header": { + "application": "", + "creationDate": "", + "scopes": "" + } + } + }, + "title": "", + "warning": { + "deleteAccount": "" + } + }, + "SignupForm": { + "button": { + "create": "" + }, + "header": { + "login": "", + "signupFailure": "" + }, + "label": { + "email": "", + "invitation": "", + "password": "", + "username": "" + }, + "message": { + "accountCreated": "", + "awaitingReview": "", + "registrationClosed": "", + "requiresReview": "" + }, + "placeholder": { + "email": "", + "invitation": "", + "username": "" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "", + "confirmNewPassword": "", + "disable": "", + "newPassword": "" + }, + "description": { + "subsonic": { + "paragraph1": "", + "paragraph2": "", + "paragraph3": "" + } + }, + "header": { + "error": "", + "subsonic": "" + }, + "label": { + "subsonicField": "" + }, + "link": { + "apps": "" + }, + "message": { + "accessDisabled": "", + "passwordUpdated": "", + "unavailable": "" + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "" + }, + "header": "" + }, + "newPassword": { + "content": { + "warning": "" + }, + "header": "" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "" + }, + "label": { + "albumTitle": "" + } + }, + "AlbumModal": { + "button": { + "cancel": "", + "create": "" + }, + "header": { + "newAlbum": "", + "newSeries": "" + } + }, + "AlbumSelect": { + "label": { + "album": "", + "series": "" + }, + "meta": { + "tracks": "" + }, + "option": { + "none": "" + } + }, + "LicenseSelect": { + "label": { + "license": "" + }, + "link": { + "license": "" + }, + "option": { + "none": "" + } + }, + "SubscribeButton": { + "help": { + "auth": "" + }, + "title": { + "subscribe": "", + "unsubscribe": "" + } + }, + "UploadForm": { + "button": { + "edit": "", + "ignore": "", + "remove": "", + "resume": "", + "retry": "" + }, + "description": { + "extensions": "" + }, + "header": { + "error": "" + }, + "help": { + "license": "" + }, + "label": { + "channel": "", + "openBrowser": "" + }, + "message": { + "dragAndDrop": "", + "pending": "" + }, + "status": { + "errored": "", + "pending": "", + "uploading": "" + }, + "warning": { + "quota": "" + } + }, + "UploadMetadataForm": { + "label": { + "description": "", + "image": "", + "position": "", + "tags": "", + "title": "" + } + }, + "UploadModal": { + "button": { + "cancel": "", + "close": "", + "finishLater": "", + "next": "", + "previous": "", + "publish": "", + "update": "" + }, + "header": { + "processing": "", + "publish": "", + "uploadDetails": "", + "uploadFiles": "" + }, + "meta": { + "files": "", + "quota": "" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "", + "go": "", + "launch": "", + "refresh": "", + "select": "", + "selectAll": "", + "selectCurrentPage": "", + "selectElement": "", + "selected": "" + }, + "header": { + "error": "" + }, + "label": { + "actions": "", + "performAction": "" + }, + "message": { + "needsRefresh": "", + "success": "" + }, + "modal": { + "performAction": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "" + }, + "header": { + "failure": "" + }, + "help": { + "upload": "" + }, + "label": { + "upload": "" + }, + "loader": { + "uploading": "" + } + }, + "CollapseLink": { + "button": { + "collapse": "", + "expand": "" + } + }, + "ContentForm": { + "button": { + "preview": "", + "write": "" + }, + "empty": { + "noContent": "" + }, + "help": { + "markdown": "" + }, + "placeholder": { + "input": "" + } + }, + "CopyInput": { + "button": { + "copy": "" + }, + "message": { + "success": "" + } + }, + "DangerousButton": { + "button": { + "cancel": "", + "confirm": "" + }, + "header": { + "confirm": "" + } + }, + "Duration": { + "meta": { + "hours": "", + "minutes": "" + } + }, + "EmptyState": { + "button": { + "refresh": "" + }, + "header": { + "noResults": "" + } + }, + "ExpandableDiv": { + "button": { + "less": "", + "more": "" + } + }, + "InlineSearchBar": { + "button": { + "clear": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "LoginModal": { + "description": { + "noAccess": "" + }, + "header": { + "unauthenticated": "" + }, + "link": { + "login": "", + "signup": "" + } + }, + "RenderedDescription": { + "button": { + "cancel": "", + "edit": "", + "less": "", + "more": "", + "update": "" + }, + "empty": { + "noDescription": "" + }, + "header": { + "failure": "" + } + }, + "UserLink": { + "link": { + "username": "" + } + }, + "UserMenu": { + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + }, + "UserModal": { + "button": { + "switchInstance": "" + }, + "header": { + "options": "" + }, + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "" + }, + "header": { + "favorites": "" + }, + "link": { + "library": "" + }, + "loader": { + "loading": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "title": "" + }, + "TrackFavoriteIcon": { + "button": { + "add": "", + "remove": "" + }, + "label": { + "inFavorites": "" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "", + "reload": "" + }, + "description": { + "failure": "", + "pending": "", + "skipped": "", + "success": "" + }, + "header": { + "failure": "", + "pending": "", + "refresh": "", + "saveFailure": "", + "skipped": "", + "success": "" + }, + "loader": { + "awaitingResult": "", + "fetchRequest": "" + }, + "table": { + "error": { + "label": { + "detail": "", + "type": "" + }, + "value": { + "connectionError": "", + "httpError": "", + "httpStatus": "", + "invalidAttributesError": "", + "invalidJsonError": "", + "timeoutError": "", + "unknownError": "" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "" + }, + "empty": { + "noMatch": "" + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "" + }, + "message": { + "copy": "" + }, + "title": "" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "" + }, + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "AlbumDetail": { + "description": { + "libraries": "" + }, + "header": { + "episodes": "", + "libraries": "", + "tracks": "" + }, + "meta": { + "volume": "" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "", + "delete": "", + "edit": "", + "embed": "", + "more": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Albums": { + "button": { + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "link": { + "addMusic": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "ArtistBase": { + "button": { + "cancel": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "", + "wikipedia": "" + }, + "meta": { + "albums": "", + "tracks": "" + }, + "modal": { + "embed": { + "header": "" + } + }, + "title": "" + }, + "ArtistDetail": { + "button": { + "filter": "", + "more": "" + }, + "description": { + "library": "" + }, + "header": { + "album": "", + "library": "", + "track": "" + }, + "link": { + "filter": "" + }, + "message": { + "filter": "" + } + }, + "ArtistEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Artists": { + "button": { + "search": "", + "upload": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "excludeCompilation": "", + "search": "", + "tags": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "EditCard": { + "button": { + "approve": "", + "delete": "", + "reject": "" + }, + "header": { + "modification": "" + }, + "link": { + "track": "" + }, + "modal": { + "content": { + "warning": "" + }, + "delete": { + "header": "" + } + }, + "status": { + "applied": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "table": { + "update": { + "header": { + "field": "", + "newValue": "", + "oldValue": "" + }, + "notApplicable": "" + } + } + }, + "EditForm": { + "button": { + "cancel": "", + "clear": "", + "new": "", + "reset": "", + "showAll": "", + "showUnreviewed": "", + "submit": "", + "suggest": "" + }, + "empty": { + "suggestEdit": "" + }, + "header": { + "failure": "", + "recentEdits": "", + "success": "", + "unreviewed": "" + }, + "label": { + "summary": "" + }, + "message": { + "noPermission": "" + }, + "notApplicable": "", + "placeholder": { + "summary": "" + } + }, + "FileUpload": { + "button": { + "cancel": "", + "retry": "" + }, + "description": { + "import": "", + "previousImport": "" + }, + "empty": { + "noFiles": "" + }, + "header": { + "failure": "", + "local": "", + "server": "", + "status": "" + }, + "label": { + "extensions": "", + "remainingSpace": "", + "uploadWidget": "" + }, + "link": { + "picard": "", + "processing": "", + "uploading": "" + }, + "message": { + "listener": "", + "local": { + "copyright": "", + "format": "", + "message": "", + "tag": "" + } + }, + "table": { + "upload": { + "header": { + "actions": "", + "filename": "", + "size": "", + "status": "" + }, + "progress": "", + "status": { + "pending": "", + "uploaded": "", + "uploading": "" + } + } + }, + "tooltip": { + "denied": "", + "extension": "", + "network": "", + "retry": "", + "size": "", + "timeout": "" + } + }, + "FsBrowser": { + "button": { + "import": "" + } + }, + "FsLogs": { + "empty": { + "notStarted": "" + } + }, + "Home": { + "header": { + "newChannels": "", + "playlists": "", + "recentlyAdded": "", + "recentlyFavorited": "", + "recentlyListened": "" + }, + "title": "" + }, + "ImportStatusModal": { + "button": { + "close": "" + }, + "error": { + "importFailure": "", + "invalidMetadata": { + "label": "", + "message": "" + }, + "unknownError": { + "label": "", + "message": "" + } + }, + "header": { + "importDetail": "" + }, + "link": { + "documentation": "", + "support": "" + }, + "message": { + "importDetail": "", + "importSuccess": "" + }, + "table": { + "error": { + "debug": "", + "errorDetail": "", + "errorType": "", + "help": "" + } + }, + "warning": { + "importSkipped": "" + } + }, + "Podcasts": { + "button": { + "cancel": "", + "channel": "", + "feed": "", + "search": "", + "subscribe": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "Radios": { + "button": { + "add": "", + "create": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "instance": "", + "user": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "TagDetail": { + "header": { + "channels": "", + "tracks": "" + }, + "link": { + "albums": "", + "artists": "", + "moderation": "" + } + }, + "TagSelector": { + "placeholder": { + "search": "" + } + }, + "TrackBase": { + "button": { + "cancel": "", + "delete": "", + "download": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "wikipedia": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "subtitle": { + "with-uploader": "", + "without-uploader": "" + }, + "title": "" + }, + "TrackDetail": { + "description": { + "library": "" + }, + "header": { + "episode": "", + "library": "", + "playlists": "", + "release": "", + "track": "" + }, + "link": { + "musicbrainz": "" + }, + "notApplicable": "", + "table": { + "release": { + "album": "", + "artist": "", + "copyright": "", + "license": "", + "series": "", + "url": "", + "year": "" + }, + "track": { + "bitrate": { + "label": "", + "value": "" + }, + "codec": "", + "downloads": "", + "duration": "", + "size": "" + } + } + }, + "TrackEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "radios": { + "Builder": { + "button": { + "filter": "", + "save": "" + }, + "description": { + "builder": "" + }, + "header": { + "builder": "", + "created": "", + "matches": "", + "updated": "" + }, + "label": { + "description": "", + "filter": "", + "name": "", + "public": "" + }, + "option": { + "filter": "" + }, + "placeholder": { + "description": "", + "name": "" + }, + "table": { + "filter": { + "header": { + "actions": "", + "candidates": "", + "config": "", + "exclude": "", + "name": "" + } + } + }, + "title": "" + }, + "Filter": { + "cancelButton": "", + "excludeLabel": "", + "matchingTracks": "", + "matchingTracksModalHeader": "", + "removeButton": "" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "channel": { + "header": { + "account": "", + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "album": { + "header": { + "artist": "", + "creationDate": "", + "domain": "", + "name": "", + "releaseDate": "", + "tracks": "" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "artist": { + "header": { + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "", + "status": "" + }, + "option": { + "all": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "library": { + "header": { + "account": "", + "creationDate": "", + "domain": "", + "followers": "", + "name": "", + "uploads": "", + "visibility": "" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "tag": { + "header": { + "albums": "", + "artists": "", + "creationDate": "", + "name": "", + "tracks": "" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "track": { + "header": { + "album": "", + "artist": "", + "creationDate": "", + "domain": "", + "license": "", + "title": "" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "status": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "option": { + "all": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "upload": { + "header": { + "accessedDate": "", + "account": "", + "creationDate": "", + "domain": "", + "importStatus": "", + "library": "", + "name": "", + "size": "", + "visibility": "" + } + } + } + } + }, + "moderation": { + "AccountsTable": { + "action": { + "purge": { + "label": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "account": { + "header": { + "domain": "", + "firstSeen": "", + "lastSeen": "", + "moderationRule": "", + "name": "", + "uploads": "" + }, + "moderationRule": "" + } + } + }, + "DomainsTable": { + "action": { + "add": { + "label": "" + }, + "purge": { + "label": "" + }, + "remove": { + "label": "" + } + }, + "empty": { + "noPods": "" + }, + "label": { + "inList": "", + "search": "" + }, + "link": { + "list": "" + }, + "option": { + "all": "", + "no": "", + "yes": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "domain": { + "header": { + "firstSeen": "", + "moderationRule": "", + "name": "", + "receivedMessages": "", + "users": "" + }, + "moderationRule": "" + } + } + }, + "InstancePolicyCard": { + "button": { + "edit": "" + }, + "header": { + "rule": "" + }, + "label": { + "blockAll": "", + "muteActivity": "", + "muteNotifications": "", + "reason": "", + "rejectMedia": "" + }, + "status": { + "enabled": "", + "paused": "" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "", + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "header": { + "addRule": "", + "editRule": "", + "failure": "" + }, + "label": { + "blockAll": "", + "customizeRule": "", + "policyDisabled": "", + "policyEnabled": "", + "policyReason": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "blockAll": "", + "isActive": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "", + "summary": "" + } + }, + "InstancePolicyModal": { + "button": { + "close": "", + "show": "" + }, + "modal": { + "manage": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "NoteForm": { + "button": { + "add": "" + }, + "header": { + "failure": "" + }, + "placeholder": { + "summary": "" + } + }, + "NotesThread": { + "button": { + "delete": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "ReportCard": { + "button": { + "confirmDelete": "", + "delete": "", + "resolve": "", + "unresolve": "" + }, + "header": { + "actions": "", + "message": "", + "notes": "", + "reportedObject": "" + }, + "link": { + "moderation": "", + "publicPage": "", + "report": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "object": { + "account": "", + "domain": "", + "local": "", + "owner": "", + "type": "" + }, + "report": { + "category": "", + "creationDate": "", + "submittedBy": "" + }, + "status": { + "assignedTo": "", + "internalNotes": "", + "resolutionDate": "", + "resolved": "", + "status": "", + "unresolved": "" + } + }, + "warning": { + "objectDeleted": "" + } + }, + "UserRequestCard": { + "button": { + "approve": "", + "reject": "" + }, + "header": { + "actions": "", + "notes": "", + "signup": "" + }, + "link": { + "request": "" + }, + "message": { + "signup": "" + }, + "notApplicable": "", + "table": { + "request": { + "creationDate": "", + "submittedBy": "" + }, + "status": { + "approved": "", + "assignedTo": "", + "internalNotes": "", + "pending": "", + "refused": "", + "resolutionDate": "", + "status": "" + } + } + } + }, + "users": { + "InvitationForm": { + "button": { + "clear": "", + "new": "" + }, + "header": { + "failure": "" + }, + "label": { + "invite": "" + }, + "placeholder": { + "invitation": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "link": "" + } + } + } + }, + "InvitationsTable": { + "action": { + "delete": "" + }, + "label": { + "expired": "", + "search": "", + "status": "", + "unused": "", + "used": "" + }, + "option": { + "all": "", + "expired": "", + "open": "" + }, + "ordering": { + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "creationDate": "", + "expirationDate": "", + "owner": "", + "status": "", + "user": "" + } + } + } + }, + "UsersTable": { + "label": { + "search": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "permission": { + "library": "", + "moderation": "", + "settings": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "user": { + "accountStatus": { + "active": "", + "inactive": "" + }, + "header": { + "accountStatus": "", + "email": "", + "lastActivity": "", + "permissions": "", + "signup": "", + "status": "", + "username": "" + }, + "status": { + "admin": "", + "regular": "", + "staff": "" + } + } + } + } + } + }, + "moderation": { + "FilterModal": { + "button": { + "cancel": "", + "hide": "" + }, + "header": { + "failure": "", + "modal": "" + }, + "help": { + "createFilter": "" + }, + "message": { + "success": "" + }, + "warning": { + "createFilter": { + "listIntro": "", + "listItem1": "", + "listItem2": "", + "listItem3": "", + "listItem4": "" + } + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "" + }, + "option": { + "all": "" + } + }, + "ReportModal": { + "button": { + "cancel": "", + "submit": "" + }, + "description": { + "email": "", + "forwardToDomain": "", + "message": "", + "modal": "" + }, + "error": { + "nodeinfoFetch": "" + }, + "header": { + "disabled": "", + "modal": "", + "submissionFailure": "" + }, + "label": { + "email": "", + "forwardToDomain": "", + "message": "" + }, + "message": { + "submissionSuccess": "" + } + } + }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "", + "markRead": "", + "markUnread": "", + "reject": "" + }, + "message": { + "libraryAcceptFollow": "", + "libraryFollow": "", + "libraryPendingFollow": "", + "libraryReject": "" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Editor": { + "button": { + "addDuplicate": "", + "clear": "", + "copy": "", + "insertFromQueue": "" + }, + "error": { + "sync": "" + }, + "header": { + "editor": "" + }, + "help": { + "reorder": "" + }, + "loading": { + "sync": "" + }, + "message": { + "sync": "" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "warning": { + "duplicate": "" + } + }, + "Form": { + "button": { + "create": "", + "update": "" + }, + "header": { + "createFailure": "", + "createPlaylist": "", + "createSuccess": "", + "updateSuccess": "" + }, + "label": { + "name": "", + "visibility": "" + }, + "placeholder": { + "name": "" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "", + "addToPlaylist": "", + "addTrack": "", + "cancel": "", + "edit": "" + }, + "empty": { + "noPlaylists": "" + }, + "header": { + "addFailure": "", + "addToPlaylist": "", + "available": "", + "manage": "", + "noResults": "", + "track": "" + }, + "label": { + "filter": "" + }, + "placeholder": { + "filterPlaylist": "" + }, + "table": { + "edit": { + "header": { + "edit": "", + "lastModification": "", + "name": "", + "tracks": "" + } + } + }, + "warning": { + "duplicate": "" + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "" + } + }, + "Widget": { + "button": { + "create": "", + "more": "" + }, + "placeholder": { + "noPlaylists": "" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "", + "startPlaylistsRadio": "", + "startRadio": "", + "startTagsRadio": "", + "stopArtistsRadio": "", + "stopPlaylistsRadio": "", + "stopRadio": "", + "stopTagsRadio": "" + }, + "Card": { + "button": { + "edit": "" + } + } + }, + "tags": { + "List": { + "button": { + "more": "" + } + } + }, + "vui": { + "Pagination": { + "label": "", + "next": "", + "previous": "" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "", + "other": "", + "podcast": "" + }, + "label": "" + }, + "importStatus": { + "choices": { + "draft": { + "help": "", + "label": "" + }, + "errored": { + "help": "", + "label": "" + }, + "finished": { + "help": "", + "label": "" + }, + "pending": { + "help": "", + "label": "" + }, + "skipped": { + "help": "", + "label": "" + } + }, + "label": "" + }, + "privacyLevel": { + "choices": { + "instance": "", + "private": "", + "public": "" + }, + "help": "", + "label": "", + "shortChoices": { + "instance": "", + "private": "", + "public": "" + } + }, + "reportType": { + "choices": { + "illegalContent": "", + "invalidMetadata": "", + "offensiveContent": "", + "other": "", + "takedownRequest": "" + }, + "label": "" + }, + "summary": { + "label": "" + } + }, + "filters": { + "accessedDate": "", + "albumTitle": "", + "appliedDate": "", + "artistName": "", + "bitrate": "", + "creationDate": "", + "dateJoined": "", + "domain": "", + "duration": "", + "expirationDate": "", + "firstSeen": "", + "followers": "", + "handledDate": "", + "itemsCount": "", + "lastActivity": "", + "lastSeen": "", + "modificationDate": "", + "name": "", + "receivedMessages": "", + "releaseDate": "", + "size": "", + "trackTitle": "", + "uploads": "", + "username": "", + "users": "" + }, + "scopes": { + "edits": { + "description": "", + "label": "" + }, + "favorites": { + "description": "", + "label": "" + }, + "filters": { + "description": "", + "label": "" + }, + "follows": { + "description": "", + "label": "" + }, + "libraries": { + "description": "", + "label": "" + }, + "listenings": { + "description": "", + "label": "" + }, + "notifications": { + "description": "", + "label": "" + }, + "playlists": { + "description": "", + "label": "" + }, + "profile": { + "description": "", + "label": "" + }, + "radios": { + "description": "", + "label": "" + }, + "reports": { + "description": "", + "label": "" + }, + "security": { + "description": "", + "label": "" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "", + "title": "" + }, + "artist": { + "name": "" + }, + "cover": { + "label": "" + }, + "description": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "license": "", + "position": "", + "title": "" + } + }, + "useReport": { + "account": { + "label": "", + "typeLabel": "" + }, + "album": { + "label": "", + "typeLabel": "" + }, + "artist": { + "label": "", + "typeLabel": "", + "unknownLabel": "" + }, + "channel": { + "label": "", + "typeLabel": "" + }, + "library": { + "label": "", + "typeLabel": "" + }, + "playlist": { + "label": "", + "typeLabel": "" + }, + "track": { + "label": "", + "typeLabel": "" + } + }, + "useReportConfigs": { + "account": { + "label": "", + "summary": "" + }, + "album": { + "label": "", + "releaseDate": "", + "title": "" + }, + "artist": { + "label": "" + }, + "channel": { + "label": "" + }, + "creationDate": { + "label": "" + }, + "library": { + "description": "", + "label": "" + }, + "musicbrainzId": { + "label": "" + }, + "name": { + "label": "" + }, + "playlist": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "label": "", + "license": "", + "position": "", + "title": "" + }, + "visibility": { + "label": "" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "", + "errorReportTitle": "", + "leaveFeedback": "", + "unexpectedError": "" + }, + "useThemeList": { + "browserDefault": "", + "darkTheme": "", + "lightTheme": "" + } + }, + "init": { + "axios": { + "rateLimitDelay": "", + "rateLimitLater": "" + }, + "sentry": { + "allow": "", + "deny": "", + "funkwhaleInstance": "", + "message": "", + "title": "" + }, + "serviceWorker": { + "actions": { + "later": "", + "update": "" + }, + "newAppVersion": "" + } + }, + "views": { + "ChooseInstance": { + "button": { + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } + }, + "Notifications": { + "button": { + "read": "", + "submit": "" + }, + "empty": { + "notifications": "" + }, + "header": { + "funkwhaleSupport": "", + "instanceSupport": "", + "messages": "", + "notifications": "" + }, + "label": { + "reminder": "", + "showRead": "" + }, + "link": { + "donate": "", + "help": "" + }, + "loading": { + "notifications": "" + }, + "message": { + "funkwhaleSupport": "" + }, + "option": { + "delay": { + "30": "", + "60": "", + "90": "", + "never": "" + } + }, + "title": "" + }, + "Search": { + "button": { + "submit": "" + }, + "header": { + "remote": "", + "rss": "", + "search": "" + }, + "label": { + "albums": "", + "artists": "", + "playlists": "", + "podcasts": "", + "radios": "", + "series": "", + "tags": "", + "tracks": "" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "", + "openRemote": "", + "refresh": "" + }, + "header": { + "activity": "", + "audioContent": "", + "channelData": "" + }, + "label": { + "local": "" + }, + "link": { + "django": "", + "localProfile": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "edits": "", + "favorited": "", + "firstSeen": "", + "linkedReports": "", + "listenings": "", + "playlists": "" + }, + "audioContent": { + "albums": "", + "cachedSize": "", + "totalSize": "", + "tracks": "", + "uploads": "" + }, + "channelData": { + "account": "", + "category": "", + "description": "", + "domain": "", + "name": "", + "rss": "", + "url": "" + } + }, + "warning": { + "stats": "" + } + }, + "CommonList": { + "title": { + "accounts": "", + "albums": "", + "artists": "", + "channels": "", + "invitations": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "", + "users": "" + } + }, + "Settings": { + "header": { + "channels": "", + "federation": "", + "instanceInfo": "", + "moderation": "", + "music": "", + "playlists": "", + "sections": "", + "security": "", + "settings": "", + "signups": "", + "stats": "", + "subsonic": "", + "ui": "" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "albumData": "", + "audioContent": "", + "local": "" + }, + "link": { + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "album": { + "description": "", + "title": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "ArtistDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "artistData": "", + "audioContent": "", + "local": "" + }, + "link": { + "albums": "", + "category": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "artist": { + "description": "", + "name": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "albums": "", + "artists": "", + "channels": "", + "edits": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "EditsList": { + "header": { + "edits": "" + }, + "title": "" + }, + "LibraryDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "libraryData": "", + "local": "" + }, + "link": { + "account": "", + "albums": "", + "artists": "", + "django": "", + "domain": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "", + "followers": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "library": { + "description": "", + "name": "" + } + }, + "warning": { + "stats": "" + } + }, + "TagDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "tagData": "" + }, + "link": { + "albums": "", + "artists": "", + "django": "", + "localProfile": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "" + }, + "tag": { + "name": "" + } + } + }, + "TrackDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "local": "", + "trackData": "" + }, + "link": { + "album": "", + "albumArtist": "", + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "track": { + "copyright": "", + "description": "", + "discNumber": "", + "license": "", + "position": "", + "title": "" + }, + "trackData": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "UploadDetail": { + "button": { + "delete": "", + "download": "" + }, + "header": { + "activity": "", + "audioContent": "", + "local": "", + "uploadData": "" + }, + "link": { + "account": "", + "django": "", + "domain": "", + "importStatus": "", + "library": "", + "remoteProfile": "", + "type": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "activity": { + "accessedDate": "", + "firstSeen": "" + }, + "audioContent": { + "bitrate": { + "label": "", + "value": "" + }, + "cachedSize": "", + "duration": "", + "size": "", + "track": "" + }, + "upload": { + "name": "" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "" + }, + "description": { + "policy": "" + }, + "header": { + "accountData": "", + "activePolicy": "", + "activity": "", + "audioContent": "", + "localAccount": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "domain": "", + "libraries": "", + "linkedReports": "", + "openProfile": "", + "remoteProfile": "", + "requests": "", + "tracks": "", + "uploads": "" + }, + "notApplicable": "", + "option": { + "permission": { + "library": "", + "moderation": "", + "settings": "" + } + }, + "table": { + "accountData": { + "displayName": "", + "email": "", + "lastActivity": "", + "lastChecked": "", + "loginStatus": { + "disabled": "", + "enabled": "", + "label": "" + }, + "permissions": "", + "signupDate": "", + "userType": "", + "username": "" + }, + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "megabyte": "", + "totalSize": "", + "uploadQuota": "" + } + }, + "tooltip": { + "uploadQuota": "" + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "accounts": "", + "domains": "", + "reports": "", + "userRequests": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "DomainsDetail": { + "button": { + "addPolicy": "", + "addToAllowList": "", + "refreshNodeInfo": "", + "removeFromAllowList": "" + }, + "description": { + "policy": "" + }, + "header": { + "activePolicy": "", + "activity": "", + "audioContent": "", + "instanceData": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "knownAccounts": "", + "libraries": "", + "tracks": "", + "uploads": "", + "website": "" + }, + "notApplicable": "", + "table": { + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "instanceData": { + "domainName": "", + "inAllowList": { + "false": "", + "label": "", + "true": "" + }, + "lastChecked": "", + "nodeInfoStatus": { + "label": "", + "value": "" + }, + "software": { + "label": "", + "value": "" + }, + "totalUsers": "" + } + }, + "warning": { + "stats": "" + } + }, + "DomainsList": { + "button": { + "add": "" + }, + "header": { + "domains": "", + "failure": "" + }, + "label": { + "addDomain": "", + "addToAllowList": "" + }, + "title": "" + }, + "ReportsList": { + "header": { + "reports": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "resolved": "", + "unresolved": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "RequestsList": { + "header": { + "userRequests": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "approved": "", + "pending": "", + "refused": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "users": { + "Base": { + "link": { + "invitations": "", + "users": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "" + } + }, + "EmailConfirm": { + "header": { + "failure": "", + "success": "" + }, + "label": { + "confirmationCode": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "success": "" + }, + "title": "" + }, + "Login": { + "header": { + "login": "" + }, + "title": "" + }, + "PasswordReset": { + "button": { + "requestReset": "" + }, + "header": { + "failure": "", + "reset": "" + }, + "help": { + "form": "" + }, + "label": { + "email": "" + }, + "link": { + "back": "" + }, + "placeholder": { + "email": "" + }, + "title": "" + }, + "PasswordResetConfirm": { + "button": { + "update": "" + }, + "header": { + "failure": "", + "success": "" + }, + "label": { + "newPassword": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "requestSent": "", + "success": "" + }, + "title": "" + }, + "Plugins": { + "title": "" + }, + "ProfileActivity": { + "header": { + "playlists": "", + "recentlyFavorited": "", + "recentlyListened": "" + } + }, + "ProfileBase": { + "label": { + "self": "" + }, + "link": { + "activity": "", + "domainView": "", + "moderation": "", + "overview": "" + }, + "title": "" + }, + "ProfileOverview": { + "button": { + "cancel": "", + "createChannel": "", + "next": "", + "previous": "" + }, + "header": { + "channels": "", + "libraries": "", + "sharedLibraries": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "createChannel": { + "artist": { + "header": "" + }, + "header": "", + "podcast": { + "header": "" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "" + }, + "title": "" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "play": "", + "updateChannel": "", + "upload": "" + }, + "header": { + "artistChannel": "", + "podcastChannel": "" + }, + "link": { + "channelEpisodes": "", + "channelOverview": "", + "channelTracks": "", + "domainView": "", + "mirrored": "", + "moderation": "" + }, + "meta": { + "episodes": "", + "listenings": "", + "subscribers": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "" + }, + "header": "" + }, + "funkwhale": { + "header": "" + }, + "header": "", + "rss": { + "content": { + "help": "" + }, + "header": "" + } + } + }, + "title": "" + }, + "DetailOverview": { + "header": { + "albums": "", + "latestEpisodes": "", + "latestTracks": "", + "series": "", + "uploadsFailure": "", + "uploadsProcessing": "", + "uploadsSuccess": "" + }, + "link": { + "addAlbum": "", + "erroredUploads": "", + "skippedUploads": "" + }, + "message": { + "processing": "" + }, + "meta": { + "progress": "" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "", + "subscribe": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "content": { + "Base": { + "link": { + "libraries": "", + "tracks": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "Home": { + "button": { + "start": "" + }, + "description": { + "channel": { + "1": "", + "2": "" + }, + "follow": "", + "upload": "" + }, + "header": { + "channel": "", + "follow": "", + "upload": "" + }, + "help": { + "uploadQuota": "" + }, + "title": "" + }, + "libraries": { + "Card": { + "button": { + "upload": "" + }, + "label": { + "size": "" + }, + "link": { + "details": "" + }, + "meta": { + "tracks": "" + } + }, + "FilesTable": { + "action": { + "delete": "", + "restartImport": "" + }, + "button": { + "showStatus": "" + }, + "empty": { + "noTracks": "" + }, + "label": { + "importStatus": "", + "search": "" + }, + "notApplicable": "", + "option": { + "status": { + "all": "", + "draft": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "file": { + "header": { + "album": "", + "artist": "", + "duration": "", + "importStatus": "", + "size": "", + "title": "", + "uploadDate": "" + } + } + } + }, + "Form": { + "button": { + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "description": { + "library": "", + "visibility": "" + }, + "header": { + "failure": "" + }, + "label": { + "description": "", + "name": "", + "visibility": "" + }, + "message": { + "libraryCreated": "", + "libraryDeleted": "", + "libraryUpdated": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "placeholder": { + "description": "", + "name": "" + } + }, + "Home": { + "empty": { + "noLibrary": "" + }, + "header": { + "libraries": "" + }, + "link": { + "createLibrary": "" + }, + "loading": { + "libraries": "" + } + }, + "Quota": { + "button": { + "purge": "" + }, + "header": { + "currentUsage": "" + }, + "label": { + "currentUsage": "", + "errored": "", + "pending": "", + "percentUsed": "", + "skipped": "" + }, + "link": { + "viewFiles": "" + }, + "loading": { + "currentUsage": "" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "" + }, + "header": "" + }, + "purgePending": { + "content": { + "description": "" + }, + "header": "" + }, + "purgeSkipped": { + "content": { + "description": "" + }, + "header": "" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "", + "follow": "", + "pending": "", + "unfollow": "" + }, + "error": { + "follow": "", + "unfollow": "" + }, + "label": { + "scanFailure": "", + "scanPartialSuccess": "", + "scanPending": "", + "scanProgress": "", + "scanSuccess": "", + "sharingLink": "" + }, + "link": { + "scan": "", + "scanDetails": "" + }, + "message": { + "scanLaunched": "", + "scanSkipped": "" + }, + "meta": { + "failedTracks": "", + "lastUpdate": "", + "tracks": "" + }, + "modal": { + "unfollow": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "private": "", + "public": "" + } + }, + "Home": { + "button": { + "refresh": "" + }, + "description": { + "remoteLibraries": "" + }, + "header": { + "knownLibraries": "", + "remoteLibraries": "" + }, + "loading": { + "remoteLibraries": "" + } + }, + "ScanForm": { + "button": { + "submit": "" + }, + "header": { + "failure": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "url": "" + } + } + } + }, + "library": { + "DetailAlbums": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailOverview": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailTracks": { + "empty": { + "follow": "", + "upload": "" + } + }, + "Edit": { + "button": { + "accept": "", + "reject": "" + }, + "empty": { + "noFollowers": "" + }, + "header": { + "followers": "", + "libraryContents": "" + }, + "loading": { + "followers": "" + }, + "table": { + "action": { + "header": { + "action": "", + "date": "", + "status": "", + "user": "" + }, + "status": { + "accepted": "", + "pending": "", + "rejected": "" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "", + "upload": "" + }, + "description": { + "sharingLink": "" + }, + "label": { + "instance": "", + "private": "", + "public": "", + "sharingLink": "" + }, + "link": { + "albums": "", + "artists": "", + "domain": "", + "moderation": "", + "owner": "", + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "title": "", + "tooltip": { + "instance": "", + "private": "", + "public": "" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "playAll": "", + "stopEdit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "title": "" + }, + "List": { + "button": { + "create": "", + "manage": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "playlists": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "", + "delete": "", + "edit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "radio": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "title": "" + } + } + } +} diff --git a/front/src/locales/bn_BD.json b/front/src/locales/bn_BD.json new file mode 100644 index 000000000..6c535e015 --- /dev/null +++ b/front/src/locales/bn_BD.json @@ -0,0 +1,4615 @@ +{ + "App": { + "loading": "" + }, + "components": { + "About": { + "description": { + "findApp": "", + "funkwhale": "", + "publicContent": "", + "quota": "", + "signup": "" + }, + "header": { + "aboutPod": "", + "findApp": "", + "funkwhale": "", + "publicContent": "", + "signup": "" + }, + "help": { + "closedRegistrations": "" + }, + "link": { + "findOtherPod": "", + "learnMore": "" + }, + "message": { + "greeting": "", + "loggedIn": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "AboutPod": { + "feature": { + "allowList": "", + "anonymousAccess": "", + "federation": "", + "quota": "", + "registrations": "", + "status": { + "closed": "", + "disabled": "", + "enabled": "", + "open": "" + }, + "version": "" + }, + "header": { + "about": "", + "contact": "", + "features": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "link": { + "about": "", + "features": "", + "introduction": "", + "rules": "", + "statistics": "", + "terms": "" + }, + "message": { + "contact": "" + }, + "notApplicable": "", + "placeholder": { + "noDescription": "", + "noRules": "", + "noTerms": "" + }, + "stat": { + "activeUsers": "", + "albumsCount": "", + "artistsCount": "", + "hoursOfMusic": "", + "listeningsCount": "", + "tracksCount": "" + }, + "title": "" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "", + "paragraph2": "" + }, + "quota": "", + "signup": "" + }, + "header": { + "about": "", + "aboutFunkwhale": "", + "contact": "", + "links": "", + "login": "", + "newAlbums": "", + "newChannels": "", + "signup": "", + "statistics": "", + "welcome": "" + }, + "help": { + "registrationsClosed": "" + }, + "link": { + "findOtherPod": "", + "funkwhale": "", + "learnMore": "", + "mobileApps": { + "description": "", + "label": "" + }, + "publicContent": { + "description": "", + "label": "" + }, + "rules": "", + "userGuides": { + "description": "", + "label": "" + }, + "viewMore": "" + }, + "placeholder": { + "noDescription": "" + }, + "stat": { + "activeUsers": "", + "hoursOfMusic": "" + }, + "title": "" + }, + "PageNotFound": { + "header": { + "pageNotFound": "" + }, + "link": { + "home": "" + }, + "message": { + "pageNotFound": "" + }, + "title": "" + }, + "Queue": { + "button": { + "clear": "", + "close": "", + "stopRadio": "" + }, + "header": { + "failure": "", + "noSources": "", + "radio": "" + }, + "label": { + "addArtistContentFilter": "", + "duration": "", + "enterFullscreen": "", + "exitFullscreen": "", + "favorite": "", + "next": "", + "pause": "", + "play": "", + "populatingRadio": "", + "previous": "", + "queue": "", + "remove": "", + "restart": "", + "selectTrack": "", + "showCoverArt": "", + "showVisualizer": "" + }, + "message": { + "automaticPlay": "", + "radio": "", + "webglUnsupported": "" + }, + "meta": { + "end": "", + "queuePosition": "", + "startTime": "", + "unknownAlbum": "", + "unknownArtist": "" + }, + "warning": { + "connectivity": "" + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "", + "rss": "", + "search": "" + }, + "description": { + "fediverse": "", + "rss": "" + }, + "error": { + "fetchFailed": "" + }, + "header": { + "fetchFailed": "" + }, + "label": { + "fediverse": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + }, + "rss": { + "fieldLabel": "", + "fieldPlaceholder": "", + "title": "" + } + }, + "warning": { + "unsupported": "" + } + }, + "ShortcutsModal": { + "button": { + "close": "" + }, + "header": { + "modal": "" + }, + "shortcut": { + "audio": { + "clearQueue": "", + "decreaseVolume": "", + "expandQueue": "", + "increaseVolume": "", + "label": "", + "playNext": "", + "playPause": "", + "playPrevious": "", + "seekBack30": "", + "seekBack5": "", + "seekForward30": "", + "seekForward5": "", + "shuffleQueue": "", + "toggleFavorite": "", + "toggleLoop": "", + "toggleMute": "" + }, + "general": { + "focus": "", + "label": "", + "show": "", + "unfocus": "" + } + } + }, + "Sidebar": { + "header": { + "administration": "", + "explore": "", + "library": "", + "main": "", + "more": "" + }, + "label": { + "add": "", + "administration": "", + "edits": "", + "follows": "", + "language": "", + "main": "", + "play": "", + "reports": "", + "theme": "" + }, + "link": { + "about": "", + "albums": "", + "artists": "", + "browse": "", + "channels": "", + "createAccount": "", + "favorites": "", + "home": "", + "library": "", + "login": "", + "moderation": "", + "playlists": "", + "podcasts": "", + "radios": "", + "search": "", + "settings": "", + "switchInstance": "", + "users": "" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "" + }, + "header": { + "error": "", + "image": "" + }, + "message": { + "success": "" + } + }, + "SignupFormBuilder": { + "button": { + "add": "", + "edit": "", + "preview": "" + }, + "help": { + "additionalFields": "", + "helpText": "" + }, + "label": { + "additionalField": "", + "additionalFields": "", + "delete": "", + "helpText": "", + "moveDown": "", + "moveUp": "" + }, + "table": { + "additionalFields": { + "header": { + "actions": "", + "label": "", + "required": "", + "type": "" + }, + "required": { + "false": "", + "true": "" + }, + "type": { + "long": "", + "short": "" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "ChannelEntries": { + "help": { + "subscribe": "" + } + }, + "ChannelForm": { + "header": { + "error": "" + }, + "help": { + "discography": "", + "podcast": "", + "podcastFields": "", + "username": "" + }, + "label": { + "category": "", + "description": "", + "discography": "", + "email": "", + "image": "", + "language": "", + "name": "", + "owner": "", + "podcast": "", + "subcategory": "", + "tags": "", + "username": "" + }, + "legend": { + "purpose": "" + }, + "loader": { + "loading": "" + }, + "placeholder": { + "name": "", + "username": "" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "" + } + }, + "ChannelSeries": { + "button": { + "showMore": "" + }, + "help": { + "subscribe": "" + } + }, + "ChannelsWidget": { + "button": { + "showMore": "" + } + }, + "EmbedWizard": { + "button": { + "copy": "" + }, + "header": { + "preview": "" + }, + "help": { + "anonymous": "", + "embed": "", + "width": "" + }, + "label": { + "embed": "", + "height": "", + "width": "" + }, + "message": { + "copy": "" + }, + "warning": { + "anonymous": "" + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "", + "follow": "", + "unfollow": "" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "", + "addToQueue": "", + "discretePlay": "", + "episodeDetails": "", + "hideArtist": "", + "playAlbum": "", + "playArtist": "", + "playNext": "", + "playNow": "", + "playPlaylist": "", + "playTrack": "", + "playTracks": "", + "report": "", + "startRadio": "", + "trackDetails": "" + }, + "title": { + "more": "", + "unavailable": "" + } + }, + "Player": { + "header": { + "player": "" + }, + "label": { + "addArtistContentFilter": "", + "audioPlayer": "", + "clearQueue": "", + "expandQueue": "", + "loopingDisabled": "", + "loopingSingle": "", + "loopingWholeQueue": "", + "mute": "", + "nextTrack": "", + "pause": "", + "play": "", + "previousTrack": "", + "shuffleQueue": "", + "unmute": "" + }, + "meta": { + "position": "", + "unknownAlbum": "", + "unknownArtist": "" + } + }, + "PlayerControls": { + "labels": { + "next": "", + "pause": "", + "play": "", + "previous": "" + } + }, + "Search": { + "empty": { + "noAlbums": "", + "noArtists": "" + }, + "header": { + "albums": "", + "artists": "", + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "SearchBar": { + "empty": { + "noResults": "" + }, + "header": { + "noResults": "" + }, + "label": { + "album": "", + "artist": "", + "category": { + "federation": "", + "podcasts": "" + }, + "search": "", + "tag": "", + "track": "" + }, + "link": { + "fediverse": "", + "more": "", + "rss": "" + }, + "placeholder": { + "search": "" + } + }, + "VolumeControl": { + "button": { + "mute": "", + "unmute": "" + }, + "label": { + "slider": "" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "", + "tracks": "" + } + }, + "Widget": { + "button": { + "more": "" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "" + } + }, + "Modal": { + "button": { + "addToFavorites": "", + "addToPlaylist": "", + "addToQueue": "", + "albumDetails": "", + "artistDetails": "", + "channelDetails": "", + "episodeDetails": "", + "playNext": "", + "playNow": "", + "removeFromFavorites": "", + "seriesDetails": "", + "startRadio": "", + "trackDetails": "" + } + }, + "Table": { + "table": { + "header": { + "album": "", + "artist": "", + "title": "" + } + } + }, + "Widget": { + "button": { + "more": "" + }, + "empty": { + "noResults": "" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "" + }, + "header": { + "appDetails": "", + "appSecretWarning": "", + "editApp": "" + }, + "help": { + "appDetails": "" + }, + "label": { + "accessToken": "", + "appId": "", + "appSecret": "" + }, + "link": { + "settings": "" + }, + "message": { + "appSecretWarning": "" + }, + "title": "" + }, + "ApplicationForm": { + "button": { + "create": "", + "update": "" + }, + "header": { + "failure": "" + }, + "help": { + "redirectUri": "" + }, + "label": { + "name": "", + "redirectUri": "", + "scopes": { + "description": "", + "label": "", + "read": { + "description": "", + "label": "" + }, + "write": { + "description": "", + "label": "" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "" + }, + "title": "" + }, + "Authorize": { + "button": { + "authorize": "" + }, + "header": { + "access": "", + "allScopes": "", + "authorize": "", + "authorizeFailure": "", + "fetchFailure": "", + "readOnly": "", + "writeOnly": "" + }, + "help": { + "copyCode": "", + "pasteCode": "", + "redirect": "" + }, + "message": { + "unknownPermissions": "" + }, + "title": "" + }, + "LoginForm": { + "button": { + "login": "" + }, + "header": { + "loginFailure": "" + }, + "help": { + "approvalRequired": "", + "invalidCredentials": "" + }, + "label": { + "password": "", + "username": "" + }, + "link": { + "createAccount": "", + "resetPassword": "" + }, + "message": { + "redirect": "" + }, + "placeholder": { + "username": "" + } + }, + "Logout": { + "button": { + "logout": "" + }, + "header": { + "confirm": "", + "unauthenticated": "" + }, + "link": { + "login": "" + }, + "message": { + "loggedIn": "" + }, + "title": "" + }, + "Plugin": { + "button": { + "save": "", + "scan": "" + }, + "description": { + "library": "" + }, + "header": { + "failure": "" + }, + "label": { + "library": "", + "pluginEnabled": "" + }, + "link": { + "documentation": "" + } + }, + "Settings": { + "button": { + "delete": "", + "deleteAccount": "", + "deleteAccountConfirm": "", + "disableSubsonic": "", + "edit": "", + "password": "", + "refresh": "", + "remove": "", + "removeApp": "", + "revoke": "", + "revokeAccess": "", + "update": "", + "updateSettings": "" + }, + "description": { + "authorizedApps": "", + "changeEmail": "", + "changePassword": { + "paragraph1": "", + "paragraph2": "" + }, + "contentFilters": "", + "deleteAccount": "", + "plugins": "", + "yourApps": "" + }, + "header": { + "accountFailure": "", + "accountSettings": "", + "authorizedApps": "", + "avatar": "", + "avatarFailure": "", + "changeEmail": "", + "changePassword": "", + "contentFilters": "", + "deleteAccount": "", + "emailFailure": "", + "hiddenArtists": "", + "noApps": "", + "noPersonalApps": "", + "passwordFailure": "", + "plugins": "", + "settingsUpdated": "", + "updateFailure": "", + "yourApps": "" + }, + "help": { + "changePassword": "", + "noApps": "", + "noPersonalApps": "" + }, + "label": { + "avatar": "", + "currentPassword": "", + "newEmail": "", + "newPassword": "", + "password": "" + }, + "link": { + "managePlugins": "", + "newApp": "" + }, + "message": { + "confirmDelete": "", + "currentEmail": "" + }, + "modal": { + "changePassword": { + "content": { + "logout": "", + "subsonic": "", + "warning": "" + }, + "header": "" + }, + "deleteAccount": { + "content": { + "warning": "" + }, + "header": "" + }, + "deleteApp": { + "content": { + "warning": "" + }, + "header": "" + }, + "revokeApp": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "", + "name": "" + } + }, + "authorizedApps": { + "header": { + "application": "", + "permissions": "" + } + }, + "yourApps": { + "header": { + "application": "", + "creationDate": "", + "scopes": "" + } + } + }, + "title": "", + "warning": { + "deleteAccount": "" + } + }, + "SignupForm": { + "button": { + "create": "" + }, + "header": { + "login": "", + "signupFailure": "" + }, + "label": { + "email": "", + "invitation": "", + "password": "", + "username": "" + }, + "message": { + "accountCreated": "", + "awaitingReview": "", + "registrationClosed": "", + "requiresReview": "" + }, + "placeholder": { + "email": "", + "invitation": "", + "username": "" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "", + "confirmNewPassword": "", + "disable": "", + "newPassword": "" + }, + "description": { + "subsonic": { + "paragraph1": "", + "paragraph2": "", + "paragraph3": "" + } + }, + "header": { + "error": "", + "subsonic": "" + }, + "label": { + "subsonicField": "" + }, + "link": { + "apps": "" + }, + "message": { + "accessDisabled": "", + "passwordUpdated": "", + "unavailable": "" + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "" + }, + "header": "" + }, + "newPassword": { + "content": { + "warning": "" + }, + "header": "" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "" + }, + "label": { + "albumTitle": "" + } + }, + "AlbumModal": { + "button": { + "cancel": "", + "create": "" + }, + "header": { + "newAlbum": "", + "newSeries": "" + } + }, + "AlbumSelect": { + "label": { + "album": "", + "series": "" + }, + "meta": { + "tracks": "" + }, + "option": { + "none": "" + } + }, + "LicenseSelect": { + "label": { + "license": "" + }, + "link": { + "license": "" + }, + "option": { + "none": "" + } + }, + "SubscribeButton": { + "help": { + "auth": "" + }, + "title": { + "subscribe": "", + "unsubscribe": "" + } + }, + "UploadForm": { + "button": { + "edit": "", + "ignore": "", + "remove": "", + "resume": "", + "retry": "" + }, + "description": { + "extensions": "" + }, + "header": { + "error": "" + }, + "help": { + "license": "" + }, + "label": { + "channel": "", + "openBrowser": "" + }, + "message": { + "dragAndDrop": "", + "pending": "" + }, + "status": { + "errored": "", + "pending": "", + "uploading": "" + }, + "warning": { + "quota": "" + } + }, + "UploadMetadataForm": { + "label": { + "description": "", + "image": "", + "position": "", + "tags": "", + "title": "" + } + }, + "UploadModal": { + "button": { + "cancel": "", + "close": "", + "finishLater": "", + "next": "", + "previous": "", + "publish": "", + "update": "" + }, + "header": { + "processing": "", + "publish": "", + "uploadDetails": "", + "uploadFiles": "" + }, + "meta": { + "files": "", + "quota": "" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "", + "go": "", + "launch": "", + "refresh": "", + "select": "", + "selectAll": "", + "selectCurrentPage": "", + "selectElement": "", + "selected": "" + }, + "header": { + "error": "" + }, + "label": { + "actions": "", + "performAction": "" + }, + "message": { + "needsRefresh": "", + "success": "" + }, + "modal": { + "performAction": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "" + }, + "header": { + "failure": "" + }, + "help": { + "upload": "" + }, + "label": { + "upload": "" + }, + "loader": { + "uploading": "" + } + }, + "CollapseLink": { + "button": { + "collapse": "", + "expand": "" + } + }, + "ContentForm": { + "button": { + "preview": "", + "write": "" + }, + "empty": { + "noContent": "" + }, + "help": { + "markdown": "" + }, + "placeholder": { + "input": "" + } + }, + "CopyInput": { + "button": { + "copy": "" + }, + "message": { + "success": "" + } + }, + "DangerousButton": { + "button": { + "cancel": "", + "confirm": "" + }, + "header": { + "confirm": "" + } + }, + "Duration": { + "meta": { + "hours": "", + "minutes": "" + } + }, + "EmptyState": { + "button": { + "refresh": "" + }, + "header": { + "noResults": "" + } + }, + "ExpandableDiv": { + "button": { + "less": "", + "more": "" + } + }, + "InlineSearchBar": { + "button": { + "clear": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "search": "" + } + }, + "LoginModal": { + "description": { + "noAccess": "" + }, + "header": { + "unauthenticated": "" + }, + "link": { + "login": "", + "signup": "" + } + }, + "RenderedDescription": { + "button": { + "cancel": "", + "edit": "", + "less": "", + "more": "", + "update": "" + }, + "empty": { + "noDescription": "" + }, + "header": { + "failure": "" + } + }, + "UserLink": { + "link": { + "username": "" + } + }, + "UserMenu": { + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + }, + "UserModal": { + "button": { + "switchInstance": "" + }, + "header": { + "options": "" + }, + "label": { + "language": "", + "shortcuts": "", + "theme": "" + }, + "link": { + "about": "", + "chat": "", + "docs": "", + "forum": "", + "git": "", + "login": "", + "logout": "", + "notifications": "", + "profile": "", + "settings": "", + "signup": "", + "support": "" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "" + }, + "header": { + "favorites": "" + }, + "link": { + "library": "" + }, + "loader": { + "loading": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "title": "" + }, + "TrackFavoriteIcon": { + "button": { + "add": "", + "remove": "" + }, + "label": { + "inFavorites": "" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "", + "reload": "" + }, + "description": { + "failure": "", + "pending": "", + "skipped": "", + "success": "" + }, + "header": { + "failure": "", + "pending": "", + "refresh": "", + "saveFailure": "", + "skipped": "", + "success": "" + }, + "loader": { + "awaitingResult": "", + "fetchRequest": "" + }, + "table": { + "error": { + "label": { + "detail": "", + "type": "" + }, + "value": { + "connectionError": "", + "httpError": "", + "httpStatus": "", + "invalidAttributesError": "", + "invalidJsonError": "", + "timeoutError": "", + "unknownError": "" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "" + }, + "empty": { + "noMatch": "" + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "" + }, + "message": { + "copy": "" + }, + "title": "" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "" + }, + "meta": { + "episodes": "", + "tracks": "" + }, + "title": "" + }, + "AlbumDetail": { + "description": { + "libraries": "" + }, + "header": { + "episodes": "", + "libraries": "", + "tracks": "" + }, + "meta": { + "volume": "" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "", + "delete": "", + "edit": "", + "embed": "", + "more": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Albums": { + "button": { + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "link": { + "addMusic": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "ArtistBase": { + "button": { + "cancel": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "musicbrainz": "", + "wikipedia": "" + }, + "meta": { + "albums": "", + "tracks": "" + }, + "modal": { + "embed": { + "header": "" + } + }, + "title": "" + }, + "ArtistDetail": { + "button": { + "filter": "", + "more": "" + }, + "description": { + "library": "" + }, + "header": { + "album": "", + "library": "", + "track": "" + }, + "link": { + "filter": "" + }, + "message": { + "filter": "" + } + }, + "ArtistEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "Artists": { + "button": { + "search": "", + "upload": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "excludeCompilation": "", + "search": "", + "tags": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "EditCard": { + "button": { + "approve": "", + "delete": "", + "reject": "" + }, + "header": { + "modification": "" + }, + "link": { + "track": "" + }, + "modal": { + "content": { + "warning": "" + }, + "delete": { + "header": "" + } + }, + "status": { + "applied": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "table": { + "update": { + "header": { + "field": "", + "newValue": "", + "oldValue": "" + }, + "notApplicable": "" + } + } + }, + "EditForm": { + "button": { + "cancel": "", + "clear": "", + "new": "", + "reset": "", + "showAll": "", + "showUnreviewed": "", + "submit": "", + "suggest": "" + }, + "empty": { + "suggestEdit": "" + }, + "header": { + "failure": "", + "recentEdits": "", + "success": "", + "unreviewed": "" + }, + "label": { + "summary": "" + }, + "message": { + "noPermission": "" + }, + "notApplicable": "", + "placeholder": { + "summary": "" + } + }, + "FileUpload": { + "button": { + "cancel": "", + "retry": "" + }, + "description": { + "import": "", + "previousImport": "" + }, + "empty": { + "noFiles": "" + }, + "header": { + "failure": "", + "local": "", + "server": "", + "status": "" + }, + "label": { + "extensions": "", + "remainingSpace": "", + "uploadWidget": "" + }, + "link": { + "picard": "", + "processing": "", + "uploading": "" + }, + "message": { + "listener": "", + "local": { + "copyright": "", + "format": "", + "message": "", + "tag": "" + } + }, + "table": { + "upload": { + "header": { + "actions": "", + "filename": "", + "size": "", + "status": "" + }, + "progress": "", + "status": { + "pending": "", + "uploaded": "", + "uploading": "" + } + } + }, + "tooltip": { + "denied": "", + "extension": "", + "network": "", + "retry": "", + "size": "", + "timeout": "" + } + }, + "FsBrowser": { + "button": { + "import": "" + } + }, + "FsLogs": { + "empty": { + "notStarted": "" + } + }, + "Home": { + "header": { + "newChannels": "", + "playlists": "", + "recentlyAdded": "", + "recentlyFavorited": "", + "recentlyListened": "" + }, + "title": "" + }, + "ImportStatusModal": { + "button": { + "close": "" + }, + "error": { + "importFailure": "", + "invalidMetadata": { + "label": "", + "message": "" + }, + "unknownError": { + "label": "", + "message": "" + } + }, + "header": { + "importDetail": "" + }, + "link": { + "documentation": "", + "support": "" + }, + "message": { + "importDetail": "", + "importSuccess": "" + }, + "table": { + "error": { + "debug": "", + "errorDetail": "", + "errorType": "", + "help": "" + } + }, + "warning": { + "importSkipped": "" + } + }, + "Podcasts": { + "button": { + "cancel": "", + "channel": "", + "feed": "", + "search": "", + "subscribe": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "" + }, + "label": { + "search": "", + "tags": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "Radios": { + "button": { + "add": "", + "create": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "instance": "", + "user": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "TagDetail": { + "header": { + "channels": "", + "tracks": "" + }, + "link": { + "albums": "", + "artists": "", + "moderation": "" + } + }, + "TagSelector": { + "placeholder": { + "search": "" + } + }, + "TrackBase": { + "button": { + "cancel": "", + "delete": "", + "download": "", + "edit": "", + "embed": "", + "more": "", + "play": "" + }, + "link": { + "discogs": "", + "django": "", + "domain": "", + "moderation": "", + "wikipedia": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "subtitle": { + "with-uploader": "", + "without-uploader": "" + }, + "title": "" + }, + "TrackDetail": { + "description": { + "library": "" + }, + "header": { + "episode": "", + "library": "", + "playlists": "", + "release": "", + "track": "" + }, + "link": { + "musicbrainz": "" + }, + "notApplicable": "", + "table": { + "release": { + "album": "", + "artist": "", + "copyright": "", + "license": "", + "series": "", + "url": "", + "year": "" + }, + "track": { + "bitrate": { + "label": "", + "value": "" + }, + "codec": "", + "downloads": "", + "duration": "", + "size": "" + } + } + }, + "TrackEdit": { + "header": { + "edit": "", + "suggest": "" + }, + "message": { + "remote": "" + } + }, + "radios": { + "Builder": { + "button": { + "filter": "", + "save": "" + }, + "description": { + "builder": "" + }, + "header": { + "builder": "", + "created": "", + "matches": "", + "updated": "" + }, + "label": { + "description": "", + "filter": "", + "name": "", + "public": "" + }, + "option": { + "filter": "" + }, + "placeholder": { + "description": "", + "name": "" + }, + "table": { + "filter": { + "header": { + "actions": "", + "candidates": "", + "config": "", + "exclude": "", + "name": "" + } + } + }, + "title": "" + }, + "Filter": { + "cancelButton": "", + "excludeLabel": "", + "matchingTracks": "", + "matchingTracksModalHeader": "", + "removeButton": "" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "channel": { + "header": { + "account": "", + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "", + "moderation": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "album": { + "header": { + "artist": "", + "creationDate": "", + "domain": "", + "name": "", + "releaseDate": "", + "tracks": "" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "category": "", + "search": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "artist": { + "header": { + "albums": "", + "creationDate": "", + "domain": "", + "name": "", + "tracks": "" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "", + "status": "" + }, + "option": { + "all": "", + "approved": "", + "pending": "", + "rejected": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "option": { + "all": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "library": { + "header": { + "account": "", + "creationDate": "", + "domain": "", + "followers": "", + "name": "", + "uploads": "", + "visibility": "" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "tag": { + "header": { + "albums": "", + "artists": "", + "creationDate": "", + "name": "", + "tracks": "" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "track": { + "header": { + "album": "", + "artist": "", + "creationDate": "", + "domain": "", + "license": "", + "title": "" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "", + "warning": "" + } + }, + "label": { + "search": "", + "status": "", + "visibility": "" + }, + "link": { + "local": "" + }, + "notApplicable": "", + "option": { + "all": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "upload": { + "header": { + "accessedDate": "", + "account": "", + "creationDate": "", + "domain": "", + "importStatus": "", + "library": "", + "name": "", + "size": "", + "visibility": "" + } + } + } + } + }, + "moderation": { + "AccountsTable": { + "action": { + "purge": { + "label": "" + } + }, + "label": { + "search": "" + }, + "link": { + "local": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "account": { + "header": { + "domain": "", + "firstSeen": "", + "lastSeen": "", + "moderationRule": "", + "name": "", + "uploads": "" + }, + "moderationRule": "" + } + } + }, + "DomainsTable": { + "action": { + "add": { + "label": "" + }, + "purge": { + "label": "" + }, + "remove": { + "label": "" + } + }, + "empty": { + "noPods": "" + }, + "label": { + "inList": "", + "search": "" + }, + "link": { + "list": "" + }, + "option": { + "all": "", + "no": "", + "yes": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "domain": { + "header": { + "firstSeen": "", + "moderationRule": "", + "name": "", + "receivedMessages": "", + "users": "" + }, + "moderationRule": "" + } + } + }, + "InstancePolicyCard": { + "button": { + "edit": "" + }, + "header": { + "rule": "" + }, + "label": { + "blockAll": "", + "muteActivity": "", + "muteNotifications": "", + "reason": "", + "rejectMedia": "" + }, + "status": { + "enabled": "", + "paused": "" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "", + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "header": { + "addRule": "", + "editRule": "", + "failure": "" + }, + "label": { + "blockAll": "", + "customizeRule": "", + "policyDisabled": "", + "policyEnabled": "", + "policyReason": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "blockAll": "", + "isActive": "", + "rejectMedia": "", + "silenceActivity": "", + "silenceNotifications": "", + "summary": "" + } + }, + "InstancePolicyModal": { + "button": { + "close": "", + "show": "" + }, + "modal": { + "manage": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "NoteForm": { + "button": { + "add": "" + }, + "header": { + "failure": "" + }, + "placeholder": { + "summary": "" + } + }, + "NotesThread": { + "button": { + "delete": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + } + }, + "ReportCard": { + "button": { + "confirmDelete": "", + "delete": "", + "resolve": "", + "unresolve": "" + }, + "header": { + "actions": "", + "message": "", + "notes": "", + "reportedObject": "" + }, + "link": { + "moderation": "", + "publicPage": "", + "report": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "object": { + "account": "", + "domain": "", + "local": "", + "owner": "", + "type": "" + }, + "report": { + "category": "", + "creationDate": "", + "submittedBy": "" + }, + "status": { + "assignedTo": "", + "internalNotes": "", + "resolutionDate": "", + "resolved": "", + "status": "", + "unresolved": "" + } + }, + "warning": { + "objectDeleted": "" + } + }, + "UserRequestCard": { + "button": { + "approve": "", + "reject": "" + }, + "header": { + "actions": "", + "notes": "", + "signup": "" + }, + "link": { + "request": "" + }, + "message": { + "signup": "" + }, + "notApplicable": "", + "table": { + "request": { + "creationDate": "", + "submittedBy": "" + }, + "status": { + "approved": "", + "assignedTo": "", + "internalNotes": "", + "pending": "", + "refused": "", + "resolutionDate": "", + "status": "" + } + } + } + }, + "users": { + "InvitationForm": { + "button": { + "clear": "", + "new": "" + }, + "header": { + "failure": "" + }, + "label": { + "invite": "" + }, + "placeholder": { + "invitation": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "link": "" + } + } + } + }, + "InvitationsTable": { + "action": { + "delete": "" + }, + "label": { + "expired": "", + "search": "", + "status": "", + "unused": "", + "used": "" + }, + "option": { + "all": "", + "expired": "", + "open": "" + }, + "ordering": { + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "invitation": { + "header": { + "code": "", + "creationDate": "", + "expirationDate": "", + "owner": "", + "status": "", + "user": "" + } + } + } + }, + "UsersTable": { + "label": { + "search": "" + }, + "notApplicable": "", + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "permission": { + "library": "", + "moderation": "", + "settings": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "user": { + "accountStatus": { + "active": "", + "inactive": "" + }, + "header": { + "accountStatus": "", + "email": "", + "lastActivity": "", + "permissions": "", + "signup": "", + "status": "", + "username": "" + }, + "status": { + "admin": "", + "regular": "", + "staff": "" + } + } + } + } + } + }, + "moderation": { + "FilterModal": { + "button": { + "cancel": "", + "hide": "" + }, + "header": { + "failure": "", + "modal": "" + }, + "help": { + "createFilter": "" + }, + "message": { + "success": "" + }, + "warning": { + "createFilter": { + "listIntro": "", + "listItem1": "", + "listItem2": "", + "listItem3": "", + "listItem4": "" + } + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "" + }, + "option": { + "all": "" + } + }, + "ReportModal": { + "button": { + "cancel": "", + "submit": "" + }, + "description": { + "email": "", + "forwardToDomain": "", + "message": "", + "modal": "" + }, + "error": { + "nodeinfoFetch": "" + }, + "header": { + "disabled": "", + "modal": "", + "submissionFailure": "" + }, + "label": { + "email": "", + "forwardToDomain": "", + "message": "" + }, + "message": { + "submissionSuccess": "" + } + } + }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "", + "markRead": "", + "markUnread": "", + "reject": "" + }, + "message": { + "libraryAcceptFollow": "", + "libraryFollow": "", + "libraryPendingFollow": "", + "libraryReject": "" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "" + } + }, + "Editor": { + "button": { + "addDuplicate": "", + "clear": "", + "copy": "", + "insertFromQueue": "" + }, + "error": { + "sync": "" + }, + "header": { + "editor": "" + }, + "help": { + "reorder": "" + }, + "loading": { + "sync": "" + }, + "message": { + "sync": "" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "warning": { + "duplicate": "" + } + }, + "Form": { + "button": { + "create": "", + "update": "" + }, + "header": { + "createFailure": "", + "createPlaylist": "", + "createSuccess": "", + "updateSuccess": "" + }, + "label": { + "name": "", + "visibility": "" + }, + "placeholder": { + "name": "" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "", + "addToPlaylist": "", + "addTrack": "", + "cancel": "", + "edit": "" + }, + "empty": { + "noPlaylists": "" + }, + "header": { + "addFailure": "", + "addToPlaylist": "", + "available": "", + "manage": "", + "noResults": "", + "track": "" + }, + "label": { + "filter": "" + }, + "placeholder": { + "filterPlaylist": "" + }, + "table": { + "edit": { + "header": { + "edit": "", + "lastModification": "", + "name": "", + "tracks": "" + } + } + }, + "warning": { + "duplicate": "" + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "" + } + }, + "Widget": { + "button": { + "create": "", + "more": "" + }, + "placeholder": { + "noPlaylists": "" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "", + "startPlaylistsRadio": "", + "startRadio": "", + "startTagsRadio": "", + "stopArtistsRadio": "", + "stopPlaylistsRadio": "", + "stopRadio": "", + "stopTagsRadio": "" + }, + "Card": { + "button": { + "edit": "" + } + } + }, + "tags": { + "List": { + "button": { + "more": "" + } + } + }, + "vui": { + "Pagination": { + "label": "", + "next": "", + "previous": "" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "", + "other": "", + "podcast": "" + }, + "label": "" + }, + "importStatus": { + "choices": { + "draft": { + "help": "", + "label": "" + }, + "errored": { + "help": "", + "label": "" + }, + "finished": { + "help": "", + "label": "" + }, + "pending": { + "help": "", + "label": "" + }, + "skipped": { + "help": "", + "label": "" + } + }, + "label": "" + }, + "privacyLevel": { + "choices": { + "instance": "", + "private": "", + "public": "" + }, + "help": "", + "label": "", + "shortChoices": { + "instance": "", + "private": "", + "public": "" + } + }, + "reportType": { + "choices": { + "illegalContent": "", + "invalidMetadata": "", + "offensiveContent": "", + "other": "", + "takedownRequest": "" + }, + "label": "" + }, + "summary": { + "label": "" + } + }, + "filters": { + "accessedDate": "", + "albumTitle": "", + "appliedDate": "", + "artistName": "", + "bitrate": "", + "creationDate": "", + "dateJoined": "", + "domain": "", + "duration": "", + "expirationDate": "", + "firstSeen": "", + "followers": "", + "handledDate": "", + "itemsCount": "", + "lastActivity": "", + "lastSeen": "", + "modificationDate": "", + "name": "", + "receivedMessages": "", + "releaseDate": "", + "size": "", + "trackTitle": "", + "uploads": "", + "username": "", + "users": "" + }, + "scopes": { + "edits": { + "description": "", + "label": "" + }, + "favorites": { + "description": "", + "label": "" + }, + "filters": { + "description": "", + "label": "" + }, + "follows": { + "description": "", + "label": "" + }, + "libraries": { + "description": "", + "label": "" + }, + "listenings": { + "description": "", + "label": "" + }, + "notifications": { + "description": "", + "label": "" + }, + "playlists": { + "description": "", + "label": "" + }, + "profile": { + "description": "", + "label": "" + }, + "radios": { + "description": "", + "label": "" + }, + "reports": { + "description": "", + "label": "" + }, + "security": { + "description": "", + "label": "" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "", + "title": "" + }, + "artist": { + "name": "" + }, + "cover": { + "label": "" + }, + "description": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "license": "", + "position": "", + "title": "" + } + }, + "useReport": { + "account": { + "label": "", + "typeLabel": "" + }, + "album": { + "label": "", + "typeLabel": "" + }, + "artist": { + "label": "", + "typeLabel": "", + "unknownLabel": "" + }, + "channel": { + "label": "", + "typeLabel": "" + }, + "library": { + "label": "", + "typeLabel": "" + }, + "playlist": { + "label": "", + "typeLabel": "" + }, + "track": { + "label": "", + "typeLabel": "" + } + }, + "useReportConfigs": { + "account": { + "label": "", + "summary": "" + }, + "album": { + "label": "", + "releaseDate": "", + "title": "" + }, + "artist": { + "label": "" + }, + "channel": { + "label": "" + }, + "creationDate": { + "label": "" + }, + "library": { + "description": "", + "label": "" + }, + "musicbrainzId": { + "label": "" + }, + "name": { + "label": "" + }, + "playlist": { + "label": "" + }, + "tags": { + "label": "" + }, + "track": { + "copyright": "", + "label": "", + "license": "", + "position": "", + "title": "" + }, + "visibility": { + "label": "" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "", + "errorReportTitle": "", + "leaveFeedback": "", + "unexpectedError": "" + }, + "useThemeList": { + "browserDefault": "", + "darkTheme": "", + "lightTheme": "" + } + }, + "init": { + "axios": { + "rateLimitDelay": "", + "rateLimitLater": "" + }, + "sentry": { + "allow": "", + "deny": "", + "funkwhaleInstance": "", + "message": "", + "title": "" + }, + "serviceWorker": { + "actions": { + "later": "", + "update": "" + }, + "newAppVersion": "" + } + }, + "views": { + "Notifications": { + "button": { + "read": "", + "submit": "" + }, + "empty": { + "notifications": "" + }, + "header": { + "funkwhaleSupport": "", + "instanceSupport": "", + "messages": "", + "notifications": "" + }, + "label": { + "reminder": "", + "showRead": "" + }, + "link": { + "donate": "", + "help": "" + }, + "loading": { + "notifications": "" + }, + "message": { + "funkwhaleSupport": "" + }, + "option": { + "delay": { + "30": "", + "60": "", + "90": "", + "never": "" + } + }, + "title": "" + }, + "Search": { + "button": { + "submit": "" + }, + "header": { + "remote": "", + "rss": "", + "search": "" + }, + "label": { + "albums": "", + "artists": "", + "playlists": "", + "podcasts": "", + "radios": "", + "series": "", + "tags": "", + "tracks": "" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "", + "openRemote": "", + "refresh": "" + }, + "header": { + "activity": "", + "audioContent": "", + "channelData": "" + }, + "label": { + "local": "" + }, + "link": { + "django": "", + "localProfile": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "edits": "", + "favorited": "", + "firstSeen": "", + "linkedReports": "", + "listenings": "", + "playlists": "" + }, + "audioContent": { + "albums": "", + "cachedSize": "", + "totalSize": "", + "tracks": "", + "uploads": "" + }, + "channelData": { + "account": "", + "category": "", + "description": "", + "domain": "", + "name": "", + "rss": "", + "url": "" + } + }, + "warning": { + "stats": "" + } + }, + "CommonList": { + "title": { + "accounts": "", + "albums": "", + "artists": "", + "channels": "", + "invitations": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "", + "users": "" + } + }, + "Settings": { + "header": { + "channels": "", + "federation": "", + "instanceInfo": "", + "moderation": "", + "music": "", + "playlists": "", + "sections": "", + "security": "", + "settings": "", + "signups": "", + "stats": "", + "subsonic": "", + "ui": "" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "albumData": "", + "audioContent": "", + "local": "" + }, + "link": { + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "album": { + "description": "", + "title": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "ArtistDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "artistData": "", + "audioContent": "", + "local": "" + }, + "link": { + "albums": "", + "category": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "artist": { + "description": "", + "name": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "albums": "", + "artists": "", + "channels": "", + "edits": "", + "libraries": "", + "tags": "", + "tracks": "", + "uploads": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "EditsList": { + "header": { + "edits": "" + }, + "title": "" + }, + "LibraryDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "libraryData": "", + "local": "" + }, + "link": { + "account": "", + "albums": "", + "artists": "", + "django": "", + "domain": "", + "remoteProfile": "", + "reports": "", + "tracks": "", + "uploads": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "", + "followers": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "library": { + "description": "", + "name": "" + } + }, + "warning": { + "stats": "" + } + }, + "TagDetail": { + "button": { + "delete": "" + }, + "header": { + "activity": "", + "audioContent": "", + "tagData": "" + }, + "link": { + "albums": "", + "artists": "", + "django": "", + "localProfile": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "firstSeen": "" + }, + "tag": { + "name": "" + } + } + }, + "TrackDetail": { + "button": { + "delete": "", + "edit": "", + "remoteRefresh": "" + }, + "header": { + "activity": "", + "local": "", + "trackData": "" + }, + "link": { + "album": "", + "albumArtist": "", + "artist": "", + "django": "", + "domain": "", + "edits": "", + "libraries": "", + "localProfile": "", + "musicbrainz": "", + "remoteProfile": "", + "reports": "", + "uploads": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "table": { + "activity": { + "favorited": "", + "firstSeen": "", + "listenings": "", + "playlists": "" + }, + "track": { + "copyright": "", + "description": "", + "discNumber": "", + "license": "", + "position": "", + "title": "" + }, + "trackData": { + "cachedSize": "", + "totalSize": "" + } + }, + "warning": { + "stats": "" + } + }, + "UploadDetail": { + "button": { + "delete": "", + "download": "" + }, + "header": { + "activity": "", + "audioContent": "", + "local": "", + "uploadData": "" + }, + "link": { + "account": "", + "django": "", + "domain": "", + "importStatus": "", + "library": "", + "remoteProfile": "", + "type": "", + "visibility": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "notApplicable": "", + "table": { + "activity": { + "accessedDate": "", + "firstSeen": "" + }, + "audioContent": { + "bitrate": { + "label": "", + "value": "" + }, + "cachedSize": "", + "duration": "", + "size": "", + "track": "" + }, + "upload": { + "name": "" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "" + }, + "description": { + "policy": "" + }, + "header": { + "accountData": "", + "activePolicy": "", + "activity": "", + "audioContent": "", + "localAccount": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "domain": "", + "libraries": "", + "linkedReports": "", + "openProfile": "", + "remoteProfile": "", + "requests": "", + "tracks": "", + "uploads": "" + }, + "notApplicable": "", + "option": { + "permission": { + "library": "", + "moderation": "", + "settings": "" + } + }, + "table": { + "accountData": { + "displayName": "", + "email": "", + "lastActivity": "", + "lastChecked": "", + "loginStatus": { + "disabled": "", + "enabled": "", + "label": "" + }, + "permissions": "", + "signupDate": "", + "userType": "", + "username": "" + }, + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "megabyte": "", + "totalSize": "", + "uploadQuota": "" + } + }, + "tooltip": { + "uploadQuota": "" + }, + "warning": { + "stats": "" + } + }, + "Base": { + "link": { + "accounts": "", + "domains": "", + "reports": "", + "userRequests": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "DomainsDetail": { + "button": { + "addPolicy": "", + "addToAllowList": "", + "refreshNodeInfo": "", + "removeFromAllowList": "" + }, + "description": { + "policy": "" + }, + "header": { + "activePolicy": "", + "activity": "", + "audioContent": "", + "instanceData": "", + "noPolicy": "" + }, + "link": { + "albums": "", + "artists": "", + "channels": "", + "django": "", + "knownAccounts": "", + "libraries": "", + "tracks": "", + "uploads": "", + "website": "" + }, + "notApplicable": "", + "table": { + "activity": { + "emittedFollows": "", + "emittedMessages": "", + "firstSeen": "", + "receivedFollows": "" + }, + "audioContent": { + "cachedSize": "", + "totalSize": "" + }, + "instanceData": { + "domainName": "", + "inAllowList": { + "false": "", + "label": "", + "true": "" + }, + "lastChecked": "", + "nodeInfoStatus": { + "label": "", + "value": "" + }, + "software": { + "label": "", + "value": "" + }, + "totalUsers": "" + } + }, + "warning": { + "stats": "" + } + }, + "DomainsList": { + "button": { + "add": "" + }, + "header": { + "domains": "", + "failure": "" + }, + "label": { + "addDomain": "", + "addToAllowList": "" + }, + "title": "" + }, + "ReportsList": { + "header": { + "reports": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "resolved": "", + "unresolved": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + }, + "RequestsList": { + "header": { + "userRequests": "" + }, + "label": { + "search": "", + "status": "" + }, + "option": { + "status": { + "all": "", + "approved": "", + "pending": "", + "refused": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "users": { + "Base": { + "link": { + "invitations": "", + "users": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "" + } + }, + "EmailConfirm": { + "header": { + "failure": "", + "success": "" + }, + "label": { + "confirmationCode": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "success": "" + }, + "title": "" + }, + "Login": { + "header": { + "login": "" + }, + "title": "" + }, + "PasswordReset": { + "button": { + "requestReset": "" + }, + "header": { + "failure": "", + "reset": "" + }, + "help": { + "form": "" + }, + "label": { + "email": "" + }, + "link": { + "back": "" + }, + "placeholder": { + "email": "" + }, + "title": "" + }, + "PasswordResetConfirm": { + "button": { + "update": "" + }, + "header": { + "failure": "", + "success": "" + }, + "label": { + "newPassword": "" + }, + "link": { + "back": "", + "login": "" + }, + "message": { + "requestSent": "", + "success": "" + }, + "title": "" + }, + "Plugins": { + "title": "" + }, + "ProfileActivity": { + "header": { + "playlists": "", + "recentlyFavorited": "", + "recentlyListened": "" + } + }, + "ProfileBase": { + "label": { + "self": "" + }, + "link": { + "activity": "", + "domainView": "", + "moderation": "", + "overview": "" + }, + "title": "" + }, + "ProfileOverview": { + "button": { + "cancel": "", + "createChannel": "", + "next": "", + "previous": "" + }, + "header": { + "channels": "", + "libraries": "", + "sharedLibraries": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "createChannel": { + "artist": { + "header": "" + }, + "header": "", + "podcast": { + "header": "" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "" + }, + "title": "" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "play": "", + "updateChannel": "", + "upload": "" + }, + "header": { + "artistChannel": "", + "podcastChannel": "" + }, + "link": { + "channelEpisodes": "", + "channelOverview": "", + "channelTracks": "", + "domainView": "", + "mirrored": "", + "moderation": "" + }, + "meta": { + "episodes": "", + "listenings": "", + "subscribers": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "" + }, + "header": "" + }, + "funkwhale": { + "header": "" + }, + "header": "", + "rss": { + "content": { + "help": "" + }, + "header": "" + } + } + }, + "title": "" + }, + "DetailOverview": { + "header": { + "albums": "", + "latestEpisodes": "", + "latestTracks": "", + "series": "", + "uploadsFailure": "", + "uploadsProcessing": "", + "uploadsSuccess": "" + }, + "link": { + "addAlbum": "", + "erroredUploads": "", + "skippedUploads": "" + }, + "message": { + "processing": "" + }, + "meta": { + "progress": "" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "", + "subscribe": "" + }, + "link": { + "addNew": "" + }, + "modal": { + "subscription": { + "header": "" + } + }, + "placeholder": { + "search": "" + }, + "title": "" + } + }, + "content": { + "Base": { + "link": { + "libraries": "", + "tracks": "" + }, + "menu": { + "secondary": "" + }, + "title": "" + }, + "Home": { + "button": { + "start": "" + }, + "description": { + "channel": { + "1": "", + "2": "" + }, + "follow": "", + "upload": "" + }, + "header": { + "channel": "", + "follow": "", + "upload": "" + }, + "help": { + "uploadQuota": "" + }, + "title": "" + }, + "libraries": { + "Card": { + "button": { + "upload": "" + }, + "label": { + "size": "" + }, + "link": { + "details": "" + }, + "meta": { + "tracks": "" + } + }, + "FilesTable": { + "action": { + "delete": "", + "restartImport": "" + }, + "button": { + "showStatus": "" + }, + "empty": { + "noTracks": "" + }, + "label": { + "importStatus": "", + "search": "" + }, + "notApplicable": "", + "option": { + "status": { + "all": "", + "draft": "", + "failed": "", + "finished": "", + "pending": "", + "skipped": "" + } + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + }, + "table": { + "file": { + "header": { + "album": "", + "artist": "", + "duration": "", + "importStatus": "", + "size": "", + "title": "", + "uploadDate": "" + } + } + } + }, + "Form": { + "button": { + "confirm": "", + "create": "", + "delete": "", + "update": "" + }, + "description": { + "library": "", + "visibility": "" + }, + "header": { + "failure": "" + }, + "label": { + "description": "", + "name": "", + "visibility": "" + }, + "message": { + "libraryCreated": "", + "libraryDeleted": "", + "libraryUpdated": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "placeholder": { + "description": "", + "name": "" + } + }, + "Home": { + "empty": { + "noLibrary": "" + }, + "header": { + "libraries": "" + }, + "link": { + "createLibrary": "" + }, + "loading": { + "libraries": "" + } + }, + "Quota": { + "button": { + "purge": "" + }, + "header": { + "currentUsage": "" + }, + "label": { + "currentUsage": "", + "errored": "", + "pending": "", + "percentUsed": "", + "skipped": "" + }, + "link": { + "viewFiles": "" + }, + "loading": { + "currentUsage": "" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "" + }, + "header": "" + }, + "purgePending": { + "content": { + "description": "" + }, + "header": "" + }, + "purgeSkipped": { + "content": { + "description": "" + }, + "header": "" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "", + "follow": "", + "pending": "", + "unfollow": "" + }, + "error": { + "follow": "", + "unfollow": "" + }, + "label": { + "scanFailure": "", + "scanPartialSuccess": "", + "scanPending": "", + "scanProgress": "", + "scanSuccess": "", + "sharingLink": "" + }, + "link": { + "scan": "", + "scanDetails": "" + }, + "message": { + "scanLaunched": "", + "scanSkipped": "" + }, + "meta": { + "failedTracks": "", + "lastUpdate": "", + "tracks": "" + }, + "modal": { + "unfollow": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "tooltip": { + "private": "", + "public": "" + } + }, + "Home": { + "button": { + "refresh": "" + }, + "description": { + "remoteLibraries": "" + }, + "header": { + "knownLibraries": "", + "remoteLibraries": "" + }, + "loading": { + "remoteLibraries": "" + } + }, + "ScanForm": { + "button": { + "submit": "" + }, + "header": { + "failure": "" + }, + "label": { + "search": "" + }, + "placeholder": { + "url": "" + } + } + } + }, + "library": { + "DetailAlbums": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailOverview": { + "empty": { + "follow": "", + "upload": "" + } + }, + "DetailTracks": { + "empty": { + "follow": "", + "upload": "" + } + }, + "Edit": { + "button": { + "accept": "", + "reject": "" + }, + "empty": { + "noFollowers": "" + }, + "header": { + "followers": "", + "libraryContents": "" + }, + "loading": { + "followers": "" + }, + "table": { + "action": { + "header": { + "action": "", + "date": "", + "status": "", + "user": "" + }, + "status": { + "accepted": "", + "pending": "", + "rejected": "" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "", + "upload": "" + }, + "description": { + "sharingLink": "" + }, + "label": { + "instance": "", + "private": "", + "public": "", + "sharingLink": "" + }, + "link": { + "albums": "", + "artists": "", + "domain": "", + "moderation": "", + "owner": "", + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "title": "", + "tooltip": { + "instance": "", + "private": "", + "public": "" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "", + "confirm": "", + "delete": "", + "edit": "", + "embed": "", + "playAll": "", + "stopEdit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "tracks": "" + }, + "meta": { + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + }, + "embed": { + "header": "" + } + }, + "title": "" + }, + "List": { + "button": { + "create": "", + "manage": "", + "search": "" + }, + "empty": { + "noResults": "" + }, + "header": { + "browse": "", + "playlists": "" + }, + "label": { + "search": "" + }, + "ordering": { + "direction": { + "ascending": "", + "descending": "", + "label": "" + }, + "label": "" + }, + "pagination": { + "results": "" + }, + "placeholder": { + "search": "" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "", + "delete": "", + "edit": "" + }, + "empty": { + "noTracks": "" + }, + "header": { + "radio": "", + "tracks": "" + }, + "modal": { + "delete": { + "content": { + "warning": "" + }, + "header": "" + } + }, + "title": "" + } + }, + "ChooseInstance": { + "button": { + "submit": "" + }, + "header": { + "chooseInstance": "", + "failure": "", + "suggestions": "" + }, + "help": { + "notFunkwhaleServer": "", + "selectPod": "", + "serverDown": "" + }, + "label": { + "url": "" + }, + "message": { + "currentConnection": "", + "newUrl": "" + } + } + } +} diff --git a/front/src/locales/ca.json b/front/src/locales/ca.json index a49a0f6ba..b99244224 100644 --- a/front/src/locales/ca.json +++ b/front/src/locales/ca.json @@ -1,13 +1,13 @@ { "App": { - "loading": "Carregant..." + "loading": "Carregant…" }, "components": { "About": { "description": { - "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions", + "findApp": "Utilitzeu Funkwhale en d'altres terminals amb les nostres aplicacions.", "funkwhale": "Aquest pod funciona amb Funkwhale, un projecte impulsat per la comunitat que us permet escoltar i compartir música i àudio en una xarxa oberta descentralitzada.", - "publicContent": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod", + "publicContent": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod.", "quota": "Els usuaris d’aquest pod també aconsegueixen % {quota} d’emmagatzematge gratuït per penjar el seu propi contingut!", "signup": "Registra't ara per fer un seguiment dels teus favorits, crear llistes de reproducció, descobrir contingut nou i molt més!" }, @@ -18,6 +18,9 @@ "publicContent": "Explorar el contingut públic", "signup": "Inscripció" }, + "help": { + "closedRegistrations": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjançant l'enllaç següent." + }, "link": { "findOtherPod": "Trobar una altra instàncies", "learnMore": "Aprèn més" @@ -27,7 +30,7 @@ "loggedIn": "Ja t'has registrat!" }, "placeholder": { - "noDescription": "Descripció no disponible." + "noDescription": "Descripció no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -71,9 +74,9 @@ }, "notApplicable": "No disponible", "placeholder": { - "noDescription": "Descripció no disponible.", - "noRules": "Sense regles disponibles.", - "noTerms": "No hi ha termes disponibles." + "noDescription": "Descripció no disponible", + "noRules": "Sense regles disponibles", + "noTerms": "No hi ha termes disponibles" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -106,6 +109,9 @@ "statistics": "Estadístiques", "welcome": "Benvinguts a { podName }!" }, + "help": { + "registrationsClosed": "Les inscripcions estan tancades en aquest pod. Podeu registrar-vos en un altre pod mitjançant l'enllaç següent." + }, "link": { "findOtherPod": "Trobar una altra instàncies", "funkwhale": "Visitar funkwhale.audio", @@ -115,7 +121,7 @@ "label": "Aplicacions mòbils" }, "publicContent": { - "description": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod", + "description": "Escolteu els àlbums públics i les llistes de reproducció compartides en aquest pod.", "label": "Explorar el contingut públic" }, "rules": "Regles del servidor", @@ -126,7 +132,7 @@ "viewMore": "Veure més …" }, "placeholder": { - "noDescription": "Descripció no disponible." + "noDescription": "Descripció no disponible" }, "stat": { "activeUsers": "{ n } usuari actiu | { n } usuaris actius", @@ -154,6 +160,7 @@ }, "header": { "failure": "La pista no s'ha pogut carregar", + "noSources": "La pista no té fonts disponibles.", "radio": "Estàs escoltant la ràdio" }, "label": { @@ -165,17 +172,22 @@ "next": "Pista següent", "pause": "Pausa", "play": "Reproduir", + "populatingRadio": "S'està recuperant la pista de ràdio…", "previous": "Pista anterior", "queue": "Cua de reproducció", "remove": "Retirar", "restart": "Pista següent", - "selectTrack": "Selecciona una pista" + "selectTrack": "Selecciona una pista", + "showCoverArt": "Mostra la portada", + "showVisualizer": "Mostra el visualitzador MoonDrop" }, "message": { "automaticPlay": "La següent pista serà reproduïda automàticament en pocs segons …", - "radio": "Les noves pistes s'afegiran automàticament aquí." + "radio": "Les noves pistes s'afegiran automàticament aquí.", + "webglUnsupported": "Sembla que el vostre navegador no suporta WebGL2." }, "meta": { + "end": "Fi", "queuePosition": "Pista { index } de { length }", "startTime": "00:00", "unknownAlbum": "Àlbum desconegut", @@ -192,7 +204,8 @@ "search": "Buscar" }, "description": { - "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse." + "fediverse": "Utilitzeu aquest formulari per recuperar un objecte allotjat en algun altre lloc en la fediverse.", + "rss": "Utilitzeu aquest formulari per subscriure's a un canal RSS des del seu URL." }, "error": { "fetchFailed": "No es pot recuperar aquest objecte" @@ -216,28 +229,6 @@ "unsupported": "Aquest tipus d'objecte encara no és compatible" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Envia" - }, - "header": { - "chooseInstance": "Escull la teva instància", - "failure": "No és possible conectar-se a la URL assenyalada", - "suggestions": "Opcions suggerides" - }, - "help": { - "notFunkwhaleServer": "L’adreça indicada no és un servidor Funkwhale", - "selectPod": "Per continuar, si us plau selecciona la instància de Funkwahale on et vols conectar. Introdueix directamente l'adreça o selecciona una de les suggerides.", - "serverDown": "El servidor pot estar inactiu" - }, - "label": { - "url": "Adreça de la instància" - }, - "message": { - "newUrl": "Ara utilitzeu la instància de Funkwhale a { url }" - } - }, "ShortcutsModal": { "button": { "close": "Tancar" @@ -288,6 +279,7 @@ "language": "Idioma", "main": "Menú principal", "play": "Reprodueix aquesta pista", + "reports": "Informes pendents de revisió", "theme": "Tema" }, "link": { @@ -317,7 +309,7 @@ "save": "Guardar" }, "header": { - "error": "Error guardant els canvis", + "error": "Error guardant els canvis.", "image": "Imatge actual" }, "message": { @@ -377,11 +369,12 @@ }, "ChannelForm": { "header": { - "error": "Error guardant el canal" + "error": "Error desant el canal." }, "help": { "discography": "Publiqueu música que feu com ara una bonica discografia d'àlbums o senzills.", "podcast": "Allotja els teus episodis i mantén la teva comunitat actualitzada.", + "podcastFields": "S'utilitza per als camps itunes:email i itunes:name requerits per certes plataformes com Spotify o iTunes.", "username": "S'utilitza en URLs i per seguir aquest canal a la federació. No es pot canviar més tard." }, "label": { @@ -395,7 +388,8 @@ "owner": "Propietari", "podcast": "Podcasts", "subcategory": "Subcategoria", - "tags": "Etiquetes" + "tags": "Etiquetes", + "username": "Identificador al Fedivers" }, "legend": { "purpose": "Per a què s'utilitzarà aquest canal?" @@ -459,7 +453,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció actual", "discretePlay": "Reproduir", "episodeDetails": "Detalls de l'episodi", @@ -510,7 +504,7 @@ "labels": { "next": "Següent pista", "pause": "Pausa", - "play": "Play", + "play": "Reproducció", "previous": "Pista anterior" } }, @@ -598,7 +592,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció", "albumDetails": "Nou àlbum", "artistDetails": "Artistes ocults", @@ -622,7 +616,7 @@ "Modal": { "button": { "addToFavorites": "Afegir a favorits", - "addToPlaylist": "Afegir a la llista de reproducció …", + "addToPlaylist": "Afegir a la llista de reproducció", "addToQueue": "Afegir a la cua de reproducció", "albumDetails": "Nou àlbum", "artistDetails": "Artistes ocults", @@ -657,8 +651,12 @@ }, "auth": { "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerar testimoni" + }, "header": { "appDetails": "Detalls de l'aplicació", + "appSecretWarning": "Guardeu una còpia d'aquest testimoni en un lloc segur.", "editApp": "Editar l'aplicació" }, "help": { @@ -693,6 +691,7 @@ "redirectUri": "URI de redirecció", "scopes": { "description": "Comprovar els àmbits pare “Llegir” o “Escriure” implica l’accés a tots els àmbits fill que en deriven.", + "label": "Àmbits", "read": { "description": "Accés a llegir només les dades d'utilització", "label": "Llegir" @@ -724,7 +723,7 @@ "writeOnly": "Només d'escriptura" }, "help": { - "copyCode": "Se us mostrarà un codi per copiar i enganxar a l’aplicació.", + "copyCode": "Se us mostrarà un codi per copiar i enganxar a l’aplicació", "pasteCode": "Copia i enganxa el codi de seguiment a la vostra aplicació:", "redirect": "Es redirigirà a { 0 }" }, @@ -768,7 +767,7 @@ "unauthenticated": "Actualment esteu connectat com a { username }" }, "link": { - "login": "Iniciar sessió" + "login": "Iniciar sessió!" }, "message": { "loggedIn": "Actualment esteu connectat com a { username }" @@ -819,6 +818,7 @@ }, "contentFilters": "Els filtres de contingut us ajuden a amagar el contingut que no voleu veure al servei.", "deleteAccount": "Podeu suprimir de manera permanent i irreversible el vostre compte i totes les dades associades mitjançant el formulari següent. Se us demanarà confirmació.", + "plugins": "Utilitzeu connectors per ampliar Funkwhale i obtenir funcions addicionals.", "yourApps": "Aquesta és la llista d'aplicacions que has creat." }, "header": { @@ -866,7 +866,7 @@ "content": { "logout": "Es tancarà la sessió d’aquest compte i hauràs d’iniciar sessió amb la nou", "subsonic": "La vostra contrasenya Subsonic es canviarà a una altra nova i aleatòria, i us iniciarà la sessió des dels dispositius que utilitzen la contrasenya antiga de Subsonic", - "warning": "Canviar la teva contrasenya tindrà les següents conseqüències:" + "warning": "Canviar la teva contrasenya tindrà les següents conseqüències" }, "header": "Canviar la teva contrasenya?" }, @@ -1030,7 +1030,7 @@ }, "SubscribeButton": { "help": { - "auth": "És possible que hagueu de subscriure-vos aquesta biblioteca per veure'n el contingut." + "auth": "És possible que hagueu de subscriure-vos a aquesta biblioteca per veure'n el contingut" }, "title": { "subscribe": "Subscriu-te", @@ -1098,7 +1098,7 @@ }, "meta": { "files": "{ n } fitxer | { n } fitxers", - "quota": "Espai d’emmagatzematge restant:" + "quota": "Espai d’emmagatzematge restant: {space}" } } }, @@ -1124,7 +1124,7 @@ }, "message": { "needsRefresh": "S'ha actualitzat el contingut, refresca per veure el contingut actualitzat", - "success": "L'acció { action } està en marxa en { n } element | L'acció { action } està en marxa en { n } elements" + "success": "L'acció { action } està en marxa en { n } element | L'acció { action } està en marxa en { n } elements" }, "modal": { "performAction": { @@ -1164,10 +1164,10 @@ "write": "Escriu" }, "empty": { - "noContent": "No hi ha res a previsualitzar." + "noContent": "No hi ha res a previsualitzar" }, "help": { - "markdown": "Es pot utilitzar la sintaxi Markdown." + "markdown": "Es pot utilitzar la sintaxi Markdown" }, "placeholder": { "input": "Escriu alguna cosa aquí…" @@ -1250,12 +1250,12 @@ }, "UserLink": { "link": { - "username": "{'@'}{usuari}" + "username": "{'@'}{username}" } }, "UserMenu": { "label": { - "language": "Idioma", + "language": "Llengua", "shortcuts": "Dreceres de teclat", "theme": "Canviar tema" }, @@ -1428,7 +1428,7 @@ "AlbumDropdown": { "button": { "cancel": "Cancelar", - "delete": "Suprimir …", + "delete": "Suprimir", "edit": "Editar", "embed": "Incrustar", "more": "Més …" @@ -1631,7 +1631,7 @@ "suggest": "Enviar suggerències" }, "empty": { - "suggestEdit": "Suggereix un canvi mitjançant el formulari següent." + "suggestEdit": "Suggereix un canvi mitjançant el formulari següent" }, "header": { "failure": "Error trametent les modificaions", @@ -1664,6 +1664,7 @@ }, "header": { "failure": "Error al enviar l'informe", + "local": "Penja música des de '~/el teu emmagatzematge local", "server": "Estat de la importació", "status": "Estat de la importació" }, @@ -1681,7 +1682,7 @@ "listener": "Aquesta pàgina et demana que confirmis que vols sortir - és possible que no es guardin les dades que has introduït.", "local": { "copyright": "No pengis contingut amb drets d'autor en una biblioteca pública, en cas contrari, podries infringir la llei", - "format": "L'arxiu de música que has carregat està ben etiquetat.", + "format": "L'arxiu de música que heu carregat està en format OGG, Flac, MP3 or AIFF", "message": "Estàs apunt de carregar música a la teva biblioteca. Abans de començar, assegurat de:", "tag": "L'arxiu de música que has carregat està ben etiquetat." } @@ -1694,6 +1695,7 @@ "size": "Mida", "status": "Estat" }, + "progress": "{percent}%", "status": { "pending": "Pendent", "uploaded": "Carregat", @@ -1859,7 +1861,7 @@ "TrackBase": { "button": { "cancel": "Cancelar", - "delete": "Suprimir …", + "delete": "Suprimir", "download": "Descarregar", "edit": "Editar", "embed": "Incrustar", @@ -1884,6 +1886,10 @@ "header": "Incrusta aquesta pista a la teva pàgina web" } }, + "subtitle": { + "with-uploader": "Penjat per {0} el {1}", + "without-uploader": "Penjat a {0}" + }, "title": "Pista" }, "TrackDetail": { @@ -1913,7 +1919,8 @@ }, "track": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "codec": "Codec", "downloads": "Descarregar", @@ -1975,6 +1982,7 @@ "Filter": { "cancelButton": "Cancelar", "excludeLabel": "Excloure", + "matchingTracks": "0 pistes que coincideixen amb el filtre | {n} filtre de coincidència de pistes | {n} pistes que coincideixen amb el filtre", "matchingTracksModalHeader": "Pistes coincidents amb el filtre", "removeButton": "Retirar" } @@ -2448,7 +2456,7 @@ "modal": { "delete": { "content": { - "warning": "Aquesta acció és irreversible." + "warning": "Aquesta acció és irreversible" }, "header": "Suprimir la regla de moderació?" } @@ -2459,7 +2467,7 @@ "rejectMedia": "No descarregueu cap fitxer multimèdia (àudio, portada, avatar del compte, …) des d'aquest compte o domini. Això també eliminarà el contingut existent.", "silenceActivity": "Amagar el contingut del compte o domini, excepte pels seguidors.", "silenceNotifications": "Eviteu que el compte o el domini desencadenin notificacions, llevat dels seguidors.", - "summary": "Explica perquè apliques aquesta regla. En funció de la configuració de la vostra instància, això us ajudarà a recordar per què heu actuat així en aquest compte o aquest domini i que es pot mostrar públicament per ajudar als usuaris a entendre quines són les normes de moderació." + "summary": "Explica perquè apliques aquesta regla. En funció de la configuració de la vostra instància, això us ajudarà a recordar per què heu actuat així en aquest compte o aquest domini i que es pot mostrar públicament per ajudar als usuaris a entendre quines són les normes de moderació." } }, "InstancePolicyModal": { @@ -2581,6 +2589,7 @@ "internalNotes": "Notes internes", "pending": "Pendent", "refused": "Rebutjat", + "resolutionDate": "Data de resolució", "status": "Estat" } } @@ -2630,7 +2639,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat … | Esperant el resultat …" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "placeholder": { "search": "Cercar per nom d'usuari, correu electrònic, codi, …" @@ -2662,7 +2671,7 @@ "label": "Ordenar" }, "pagination": { - "results": "Esperant el resultat … | Esperant el resultat …" + "results": "Es mostren zero resultats | Es mostra un resultat | Es mostren els resultats del {start} al {end} del {total}" }, "permission": { "library": "Biblioteca", @@ -2740,7 +2749,10 @@ "email": "Utilitzarem aquesta adreça de correu electrònic per si hem de contactar amb vosaltres sobre aquest informe.", "forwardToDomain": "Reenvia una copa anònima del teu informe al servidor que allotja aquest element.", "message": "Utilitzeu aquest camp per proporcionar un context addicional al moderador que gestionarà l'informe.", - "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderació." + "modal": "Utilitzeu aquest formulari per enviar un informe al nostre equip de moderació" + }, + "error": { + "nodeinfoFetch": "No es pot obtenir la informació del node: {error}" }, "header": { "disabled": "Els informes anònims estan deshabilitats, si us plau inicia sessió per a enviar l'informe.", @@ -2888,8 +2900,14 @@ }, "radios": { "Button": { + "startArtistsRadio": "Inicia les artistes de ràdio", + "startPlaylistsRadio": "Inicia les llistes de reproducció de ràdio", "startRadio": "Reprodueix la pista", - "stopRadio": "Parar la ràdio" + "startTagsRadio": "Inicia les etiquetes de ràdio", + "stopArtistsRadio": "Atura les artistes de ràdio", + "stopPlaylistsRadio": "Atura les llistes de reproducció de ràdio", + "stopRadio": "Parar la ràdio", + "stopTagsRadio": "Atura les etiquetes de ràdio" }, "Card": { "button": { @@ -2979,12 +2997,13 @@ "label": "Categoria" }, "summary": { - "label": "Bio" + "label": "Biografia" } }, "filters": { "accessedDate": "Data d'accés", "albumTitle": "Nom de l'àlbum", + "appliedDate": "Data aplicada", "artistName": "Nom de l'artista", "bitrate": "Taxa de bits", "creationDate": "Data de creació", @@ -2994,6 +3013,7 @@ "expirationDate": "Data de caducitat", "firstSeen": "Data de descoberta", "followers": "Seguidors", + "handledDate": "Data tractada", "itemsCount": "Elements", "lastActivity": "Última activitat", "lastSeen": "Data de la darrera visita", @@ -3013,6 +3033,7 @@ "label": "Modificacions" }, "favorites": { + "description": "Accés als preferits", "label": "Preferides" }, "filters": { @@ -3052,6 +3073,7 @@ "label": "Informes" }, "security": { + "description": "Accés a la configuració de seguretat, com ara contrasenya i autorització", "label": "Seguretat" } } @@ -3116,7 +3138,7 @@ "useReportConfigs": { "account": { "label": "Compte", - "summary": "Bio" + "summary": "Biografia" }, "album": { "label": "Àlbum", @@ -3161,10 +3183,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Per ajudar-nos a entendre per què va passar, adjunteu una descripció detallada del que vau fer que va provocar l'error.", "errorReportTitle": "S'ha produit un error inesperat.", + "leaveFeedback": "Deixa un comentari", "unexpectedError": "S'ha produit un error inesperat." }, "useThemeList": { + "browserDefault": "Navegador predeterminat", "darkTheme": "Fosc", "lightTheme": "Clar" } @@ -3176,7 +3201,10 @@ }, "sentry": { "allow": "Permetre", - "deny": "Denegar" + "deny": "Denegar", + "funkwhaleInstance": "La instància oficial de Glitchtip de Funkwhale", + "message": "Les traces de la pila es compartiran amb { 0 } per ajudar-nos a entendre com i quan es produeixen els errors.", + "title": "Per millorar la qualitat dels nostres serveis, ens agradaria recopilar informació sobre errors durant la sessió." }, "serviceWorker": { "actions": { @@ -3193,7 +3221,7 @@ "submit": "Entesos!" }, "empty": { - "notifications": "No hi ha notificacions." + "notifications": "No hi ha notificacions per mostrar" }, "header": { "funkwhaleSupport": "T'agrada Funkwhale?", @@ -3638,7 +3666,8 @@ }, "audioContent": { "bitrate": { - "label": "Taxa de bits" + "label": "Taxa de bits", + "value": "{bitrate}/s" }, "cachedSize": "Mida de la memòria cau", "duration": "Durada", @@ -3657,7 +3686,7 @@ "addPolicy": "Afegir una nova política de moderació" }, "description": { - "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat." + "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat" }, "header": { "accountData": "Dades del compte", @@ -3745,7 +3774,7 @@ "removeFromAllowList": "Eliminar de la llista d'autoritzacions" }, "description": { - "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat." + "policy": "Les regles de moderació t'ajudaran a controlar com la vostra instància interactua amb un domini o un compte determinat" }, "header": { "activePolicy": "Aquest domini està subjecta a normes de moderació específiques", @@ -3790,7 +3819,8 @@ "value": "Error obtenint informació del node" }, "software": { - "label": "Programari" + "label": "Programari", + "value": "{name} ({version})" }, "totalUsers": "Usuaris totals" } @@ -3866,7 +3896,7 @@ "label": "Ordenar" }, "placeholder": { - "search": "Cercar per nom d'usuari…" + "search": "Cercar per nom d'usuari" }, "title": "Peticions de l'usuari" } @@ -3887,7 +3917,7 @@ "auth": { "Callback": { "header": { - "loggingIn": "Carregant les biblioteques …" + "loggingIn": "Iniciant sessió…" } }, "EmailConfirm": { @@ -3903,7 +3933,7 @@ "login": "Iniciar la sessió" }, "message": { - "success": "Ara podeu utilitzar el servei sense limitacions." + "success": "Ara podeu utilitzar el servei sense limitacions" }, "title": "Confirma el teu correu electrònic" }, @@ -3988,7 +4018,7 @@ "header": { "channels": "Canals", "libraries": "Biblioteques de l'usuari", - "sharedLibraries": "Aquest usuari ha compartit les biblioteques que segueix." + "sharedLibraries": "Aquest usuari ha compartit les següents biblioteques" }, "link": { "addNew": "Afegeix nou" @@ -4092,7 +4122,7 @@ "processing": "Funkwhale està processant les pujades i es publicaran ben aviat." }, "meta": { - "progress": "Càrregues processades:" + "progress": "Càrregues processades: {finished}/{total}" } }, "SubscriptionsList": { @@ -4224,7 +4254,7 @@ "update": "Actualitzar la biblioteca" }, "description": { - "library": "Les biblioteques t'ajuden a organitzar i compartir la teva col·lecció de música. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", + "library": "Les biblioteques t'ajuden a organitzar i compartir la teva col·lecció de música. Pots pujar-la a Funkwahale i compartir-la amb els teus amics i familiars.", "visibility": "Pots compartir la teva biblioteca amb altres persones, independentment de la seva visibilitat." }, "header": { @@ -4278,6 +4308,7 @@ "currentUsage": "{ current } usats del { max } permesos", "errored": "Arxius erronis", "pending": "Fitxers pendents", + "percentUsed": "{progress}%", "skipped": "Arxius ignorats" }, "link": { @@ -4326,10 +4357,10 @@ "scanPending": "Anàlisi pendent", "scanProgress": "Analitzant … ({ progress }%)", "scanSuccess": "Anàlisis realitzat", - "sharingLink": "Compartir enllaç" + "sharingLink": "Compartint enllaç" }, "link": { - "scan": "Analitzar ara", + "scan": "Analitzar ara · ", "scanDetails": "Detalls" }, "message": { @@ -4337,8 +4368,8 @@ "scanSkipped": "L’anàlisi s’ha omès (l’anàlisi anterior és massa recent)" }, "meta": { - "failedTracks": "Pistes fallides:", - "lastUpdate": "Última actualització:", + "failedTracks": "Pistes fallides: {tracks}", + "lastUpdate": "Última actualització: · ", "tracks": "{ n } pista | { n } pistes" }, "modal": { @@ -4447,7 +4478,7 @@ "instance": "Restringit", "private": "Privat", "public": "Públic", - "sharingLink": "Compartir enllaç" + "sharingLink": "Compartint enllaç" }, "link": { "albums": "Àlbums", @@ -4544,6 +4575,7 @@ "noTracks": "Encara no s'ha afegit cap pista a aquesta ràdio" }, "header": { + "radio": "Ràdio que conté {tracks} cançons, per ", "tracks": "Pistes" }, "modal": { @@ -4556,6 +4588,28 @@ }, "title": "Ràdio" } + }, + "ChooseInstance": { + "button": { + "submit": "Envia" + }, + "header": { + "chooseInstance": "Escull la teva instància", + "failure": "No és possible conectar-se a la URL assenyalada", + "suggestions": "Opcions suggerides" + }, + "help": { + "notFunkwhaleServer": "L’adreça indicada no és un servidor Funkwhale", + "selectPod": "Per continuar, si us plau selecciona la instància de Funkwahale on et vols conectar. Introdueix directamente l'adreça o selecciona una de les suggerides.", + "serverDown": "El servidor pot estar inactiu" + }, + "label": { + "url": "Adreça de la instància" + }, + "message": { + "currentConnection": "Actualment esteu connectat a {0}. Si continueu, se us desconnectarà de la vostra instància actual i se suprimiran totes les vostres dades locals.", + "newUrl": "Ara utilitzeu la instància de Funkwhale a { url }" + } } } } diff --git a/front/src/locales/cs.json b/front/src/locales/cs.json index cf647dbf4..be5b47c7d 100644 --- a/front/src/locales/cs.json +++ b/front/src/locales/cs.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Načítání..." + "loading": "Načítání…" }, "components": { "About": { @@ -22,7 +22,7 @@ "closedRegistrations": "Registrace na tomto podu jsou uzavřené. Můžete se zaregistrovat na jiném skrz odkaz níže." }, "link": { - "findOtherPod": "Hledat další pod", + "findOtherPod": "Najít jiný pod", "learnMore": "Dozvědět se více" }, "message": { @@ -113,7 +113,7 @@ "registrationsClosed": "Registrace na tomto podu jsou uzavřené. Můžete se zaregistrovat na jiném skrz odkaz níže." }, "link": { - "findOtherPod": "Hledat další pody", + "findOtherPod": "Najít jiný pod", "funkwhale": "Navštívit funkwhale.audio", "learnMore": "Dozvědět se více", "mobileApps": { @@ -172,7 +172,7 @@ "next": "Další skladba", "pause": "Pozastavit", "play": "Hrát", - "populatingRadio": "Načítání skladby rádia...", + "populatingRadio": "Načítání skladby rádia…", "previous": "Předchozí skladba", "queue": "Fronta", "remove": "Odstranit", @@ -229,29 +229,6 @@ "unsupported": "Tento druh objektu není prozatím podporován" } }, - "SetInstanceModal": { - "button": { - "cancel": "Zrušit", - "submit": "Odeslat" - }, - "header": { - "chooseInstance": "Zvolte si instanci", - "failure": "Na zadanou adresu URL se nelze připojit", - "suggestions": "Navržené volby" - }, - "help": { - "notFunkwhaleServer": "Na zadané adrese neběží žádný Funkwhale server", - "selectPod": "Pro pokračování prosím zvolte Funkwhale instanci, ke které se chcete připojit. Zadejte adresu přímo, nebo vyberte jednu z nabízených možností.", - "serverDown": "Server je možná nedostupný" - }, - "label": { - "url": "URL instance" - }, - "message": { - "currentConnection": "Aktuálně jste připojeni k { 0 }. Když budete pokračovat, budete odpojeni od vaší aktuální instance a vaše lokální data budou vymazána.", - "newUrl": "Právě používáte Funkwhale instanci na adrese { url }" - } - }, "ShortcutsModal": { "button": { "close": "Zavřít" @@ -1958,7 +1935,7 @@ "suggest": "Navrhnout úpravu této skladby" }, "message": { - "remote": " Tento objekt je spravován jiným serverem, nemůžete ho upravovat." + "remote": "Tento objekt je spravován jiným serverem, nemůžete ho upravovat." } }, "radios": { @@ -4611,6 +4588,28 @@ }, "title": "Rádio" } + }, + "ChooseInstance": { + "button": { + "submit": "Odeslat" + }, + "header": { + "chooseInstance": "Zvolte si instanci", + "failure": "Na zadanou adresu URL se nelze připojit", + "suggestions": "Navržené volby" + }, + "help": { + "notFunkwhaleServer": "Na zadané adrese neběží žádný Funkwhale server", + "selectPod": "Pro pokračování prosím zvolte Funkwhale instanci, ke které se chcete připojit. Zadejte adresu přímo, nebo vyberte jednu z nabízených možností.", + "serverDown": "Server je možná nedostupný" + }, + "label": { + "url": "URL instance" + }, + "message": { + "currentConnection": "Aktuálně jste připojeni k { 0 }. Když budete pokračovat, budete odpojeni od vaší aktuální instance a vaše lokální data budou vymazána.", + "newUrl": "Právě používáte Funkwhale instanci na adrese { url }" + } } } } diff --git a/front/src/locales/de.json b/front/src/locales/de.json index 119fff877..d3bd85a13 100644 --- a/front/src/locales/de.json +++ b/front/src/locales/de.json @@ -30,7 +30,7 @@ "loggedIn": "Du bist bereits eingeloggt!" }, "placeholder": { - "noDescription": "Keine Beschreibung verfügbar." + "noDescription": "Keine Beschreibung verfügbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -74,9 +74,9 @@ }, "notApplicable": "k. A.", "placeholder": { - "noDescription": "Keine Beschreibung verfügbar.", - "noRules": "Keine Regeln verfügbar.", - "noTerms": "Keine Bedingungen verfügbar." + "noDescription": "Keine Beschreibung verfügbar", + "noRules": "Keine Regeln verfügbar", + "noTerms": "Keine Bedingungen verfügbar" }, "stat": { "activeUsers": "Eine aktive Person | { n } aktive Personen", @@ -121,7 +121,7 @@ "label": "Mobile Apps" }, "publicContent": { - "description": "Höre öffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden", + "description": "Höre öffentliche Alben und Wiedergabelisten an, die auf diesem Pod freigegeben werden.", "label": "Öffentliche Inhalte durchsuchen" }, "rules": "Serverregeln", @@ -132,7 +132,7 @@ "viewMore": "Mehr anzeigen…" }, "placeholder": { - "noDescription": "Keine Beschreibung verfügbar." + "noDescription": "Keine Beschreibung verfügbar" }, "stat": { "activeUsers": "{ n } aktive Person | { n } aktive Personen", @@ -229,29 +229,6 @@ "unsupported": "Diese Art von Objekt wird noch nicht unterstützt" } }, - "SetInstanceModal": { - "button": { - "cancel": "Abbrechen", - "submit": "Abschicken" - }, - "header": { - "chooseInstance": "Wähle deine Instanz aus", - "failure": "Es lässt sich keine Verbindung zur angegebenen Adresse herstellen", - "suggestions": "Empfehlungen" - }, - "help": { - "notFunkwhaleServer": "Die angegebene Adresse ist kein Funkwhale-Server", - "selectPod": "Wähle bitte nun den Funkhwhale-Pod aus, zu dem du dich verbinden möchtest. Gib die Adresse direkt an, oder wähle einen der Vorschläge aus.", - "serverDown": "Der Server läuft wahrscheinlich nicht" - }, - "label": { - "url": "Pod-Adresse" - }, - "message": { - "currentConnection": "Du bist aktuell mit { 0 } verbunden. Wenn du fortfährst, wird die Verbindung unterbrochen und alle lokalen Daten werden gelöscht.", - "newUrl": "Du verwendest jetzt den Funkwhale-Pod unter { url }" - } - }, "ShortcutsModal": { "button": { "close": "Schließen" @@ -332,7 +309,7 @@ "save": "Speichern" }, "header": { - "error": "Fehler beim Speichern der Einstellungen", + "error": "Fehler beim Speichern der Einstellungen.", "image": "Aktuelles Bild" }, "message": { @@ -392,7 +369,7 @@ }, "ChannelForm": { "header": { - "error": "Fehler beim Speichern des Kanals" + "error": "Fehler beim Speichern des Kanals." }, "help": { "discography": "Veröffentliche die Musik, die du machst, als schöne Diskographie von Alben und Singles.", @@ -476,7 +453,7 @@ }, "PlayButton": { "button": { - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "discretePlay": "Abspielen", "episodeDetails": "Details zu dieser Folge", @@ -615,7 +592,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufügen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "albumDetails": "Album ansehen", "artistDetails": "Künstler·innen ansehen", @@ -639,7 +616,7 @@ "Modal": { "button": { "addToFavorites": "Zu den Favoriten hinzufügen", - "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen…", + "addToPlaylist": "Zu einer Wiedergabeliste hinzufügen", "addToQueue": "Zur Warteschlange hinzufügen", "albumDetails": "Album ansehen", "artistDetails": "Künstler·innen ansehen", @@ -746,7 +723,7 @@ "writeOnly": "Nur schreiben" }, "help": { - "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfügen musst.", + "copyCode": "Dir wird ein Code angezeigt, der du in die Anwendung einfügen musst", "pasteCode": "Kopiere den folgenden Code in die Anwendung:", "redirect": "Du wirst zu { 0 } weitergeleitet" }, @@ -771,7 +748,7 @@ "username": "Benutzername oder E-Mail-Adresse" }, "link": { - "createAccount": "Konto erstellen", + "createAccount": "Erstelle ein Konto", "resetPassword": "Kennwort zurücksetzen" }, "message": { @@ -856,7 +833,7 @@ "deleteAccount": "Mein Konto löschen", "emailFailure": "Deine E-Mail-Adresse kann nicht geändert werden", "hiddenArtists": "Verborgene Künstler·innen", - "noApps": "Du hast keine aktiven Moderationsregeln für dieses Konto.", + "noApps": "Aktuell ist keine Anwendung mit deinem Konto verbunden.", "noPersonalApps": "Du hast bisher keine Anwendung registriert.", "passwordFailure": "Dein Kennwort kann nicht geändert werden", "plugins": "Plugins", @@ -882,14 +859,14 @@ }, "message": { "confirmDelete": "Dein Löschungsantrag wurde eingereicht. Dein Konto und deine Inhalte werden in Kürze gelöscht", - "currentEmail": "Deine aktuelle E-Mail-Adresse lautet { email }." + "currentEmail": "Deine aktuelle E-Mail-Adresse lautet {email}" }, "modal": { "changePassword": { "content": { "logout": "Du wirst von dieser Sitzung abgemeldet und du musst dich mit deinem neuen Kennwort anmelden", "subsonic": "Dein Subsonic-Kennwort wird mit einem neuen zufälligen Kennwort ersetzt. Du wirst auf allen aktuell verbundenen Geräten abgemeldet, die noch das alte Kennwort nutzen", - "warning": "Wenn du dein Kennwort änderst, hat dies folgende Auswirkungen:" + "warning": "Wenn du dein Kennwort änderst, hat dies folgende Auswirkungen" }, "header": "Möchtest du dein Kennwort ändern?" }, @@ -1098,7 +1075,7 @@ "label": { "description": "Beschreibung", "image": "Titelbild", - "position": "Seitennummerierung", + "position": "Position", "tags": "Schlagwörter", "title": "Titel" } @@ -1121,7 +1098,7 @@ }, "meta": { "files": "{ n } Datei | { n } Dateien", - "quota": "Verbleibender Speicherplatz:" + "quota": "Verbleibender Speicherplatz: {space}" } } }, @@ -1129,7 +1106,7 @@ "ActionTable": { "button": { "allSelected": "Einziges Element ausgewählt | Alle { count } Elemente ausgewählt", - "go": "Los!", + "go": "Los", "launch": "Starten", "refresh": "Tabelleninhalt aktualisieren", "select": "Auswählen", @@ -1187,10 +1164,10 @@ "write": "Schreiben" }, "empty": { - "noContent": "Es gibt nichts zum vorzeigen." + "noContent": "Es ist keine Vorschau verfügbar" }, "help": { - "markdown": "Markdown-Syntax wird unterstützt." + "markdown": "Markdown-Syntax wird unterstützt" }, "placeholder": { "input": "Schreibe hier ein paar Worte…" @@ -1246,7 +1223,7 @@ }, "LoginModal": { "description": { - "noAccess": "Du bist nicht zugriffsberechtigt!" + "noAccess": "Du hast keinen Zugriff" }, "header": { "unauthenticated": "Unauthorisiert" @@ -1451,7 +1428,7 @@ "AlbumDropdown": { "button": { "cancel": "Abbrechen", - "delete": "Löschen…", + "delete": "Löschen", "edit": "Bearbeiten", "embed": "Einbetten", "more": "Mehr…" @@ -1535,7 +1512,7 @@ }, "meta": { "albums": "{ n } Alben | { n } Alben", - "tracks": "{ n } Titel in | { n } Titel in " + "tracks": "0 Titel in | {count} Titel in | {count} Titel in" }, "modal": { "embed": { @@ -1654,7 +1631,7 @@ "suggest": "Empfehlung abschicken" }, "empty": { - "suggestEdit": "Schlage eine Änderung mit dem untenstehenden Formular vor." + "suggestEdit": "Schlage eine Änderung mit dem untenstehenden Formular vor" }, "header": { "failure": "Fehler beim Speichern der Änderungen", @@ -1679,7 +1656,7 @@ "retry": "Fehlgeschlagene Uploads wiederholen" }, "description": { - "import": "Import-Ergebnisse:", + "import": "Import Status", "previousImport": "Ergebnisse des letzten Imports:" }, "empty": { @@ -1884,7 +1861,7 @@ "TrackBase": { "button": { "cancel": "Abbrechen", - "delete": "Löschen…", + "delete": "Löschen", "download": "Herunterladen", "edit": "Bearbeiten", "embed": "Einbetten", @@ -2479,7 +2456,7 @@ "modal": { "delete": { "content": { - "warning": "Dieser Vorgang ist unwiderruflich." + "warning": "Diese Aktion kann nicht rückgängig gemacht werden" }, "header": "Diese Moderationsregel löschen?" } @@ -2772,7 +2749,7 @@ "email": "Wir werden diese E-Mail-Adresse verwenden, wenn wir Dich bezüglich Deines Berichts kontaktieren müssen.", "forwardToDomain": "Leite eine anonymisierte Kopie deines Berichts an den Server weiter, auf dem sich dieses Element befindet.", "message": "Verwende dieses Feld, um dem Moderationsteam zusätzlichen Kontext bereitzustellen.", - "modal": "Mithilfe dieses Formulars kannst du einen Bericht an unser Moderationsteam senden." + "modal": "Nutze dieses Formular für eine Meldung an das Moderationsteam" }, "error": { "nodeinfoFetch": "Informationen über diese Instanz können nicht abgerufen werden: {error}" @@ -3026,6 +3003,7 @@ "filters": { "accessedDate": "Zugriffsdatum", "albumTitle": "Albumname", + "appliedDate": "Änderungsdatum", "artistName": "Name der Künstler·in", "bitrate": "Bitrate", "creationDate": "Erstellungsdatum", @@ -3034,7 +3012,8 @@ "duration": "Dauer", "expirationDate": "Ablaufdatum", "firstSeen": "Erstmals gesehen", - "followers": "Abonnenten", + "followers": "Abonnent·innen", + "handledDate": "Bearbeitungsdatum", "itemsCount": "Elemente", "lastActivity": "Letzte Aktivität", "lastSeen": "Zuletzt gesehen am", @@ -3054,6 +3033,7 @@ "label": "Bearbeitungen" }, "favorites": { + "description": "Zugang zu den Favoriten", "label": "Favoriten" }, "filters": { @@ -3120,12 +3100,13 @@ "track": { "copyright": "Urheberrecht", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" } }, "useReport": { "account": { + "label": "Melde {'@'}{username}", "typeLabel": "Konto" }, "album": { @@ -3134,7 +3115,8 @@ }, "artist": { "label": "Diese kunstschaffende Person melden…", - "typeLabel": "Künstler·in" + "typeLabel": "Künstler·in", + "unknownLabel": "Unbekannte*r Künstler*in" }, "channel": { "label": "Diesen Kanal melden…", @@ -3192,7 +3174,7 @@ "copyright": "Urheberrecht", "label": "Titel", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "visibility": { @@ -3201,9 +3183,13 @@ } }, "useErrorHandler": { + "errorReportMessage": "Damit wir die Ursache des Fehlers besser verstehen können, füge bitte eine detaillierte Beschreibung des Vorgangs bei, der den Fehler ausgelöst hat.", + "errorReportTitle": "Ein unerwarteter Fehler ist aufgetreten.", + "leaveFeedback": "Feedback hinterlassen", "unexpectedError": "Ein unerwarteter Fehler ist aufgetreten." }, "useThemeList": { + "browserDefault": "Browser-Standard", "darkTheme": "Dunkel", "lightTheme": "Hell" } @@ -3213,6 +3199,13 @@ "rateLimitDelay": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschränkt. Bitte versuche es in { delay } noch einmal", "rateLimitLater": "Du hast zu viele Anfragen gesendet und bist derzeit eingeschränkt. Bitte versuche es später noch einmal" }, + "sentry": { + "allow": "Erlauben", + "deny": "Verweigern", + "funkwhaleInstance": "Funkwhale's offizieller Glitchtip-Server", + "message": "Die Fehlerberichte werden an { 0 } weitergegeben, damit wir besser verstehen, wie und wann die Fehler auftreten.", + "title": "Um die Qualität unseres Service zu verbessern, würden wir gerne Informationen über Abstürze während deiner Sitzung sammeln." + }, "serviceWorker": { "actions": { "later": "Später", @@ -3228,7 +3221,7 @@ "submit": "Verstanden!" }, "empty": { - "notifications": "Keine Benachrichtigungen zum Anzeigen." + "notifications": "Es gibt keine neuen Benachrichtigungen" }, "header": { "funkwhaleSupport": "Magst du Funkwhale?", @@ -3624,7 +3617,7 @@ "description": "Beschreibung", "discNumber": "CD-Nummer", "license": "Lizenz", - "position": "Seitennummerierung", + "position": "Position", "title": "Titel" }, "trackData": { @@ -3673,7 +3666,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{Bitrate}/s" }, "cachedSize": "Cache-Größe", "duration": "Dauer", @@ -3692,7 +3686,7 @@ "addPolicy": "Moderationsregel hinzufügen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "accountData": "Kontoübersicht", @@ -3780,7 +3774,7 @@ "removeFromAllowList": "Aus der Zulassungsliste entfernen" }, "description": { - "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert." + "policy": "Mit Moderationsregeln legst du fest, wie deine Instanz mit einer bestimmten Domain oder einem bestimmten Konto interagiert" }, "header": { "activePolicy": "Für diese Domain gelten besondere Moderationsregeln", @@ -3825,7 +3819,8 @@ "value": "Fehler beim Abrufen der Knoten-Information" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Gesamtanzahl der Nutzenden" } @@ -3901,7 +3896,7 @@ "label": "Sortieren nach" }, "placeholder": { - "search": "Nach Nutzername suchen…" + "search": "Nach Benutzernamen suchen" }, "title": "Nutzeranfragen" } @@ -3938,7 +3933,7 @@ "login": "Weiter zum Anmelden" }, "message": { - "success": "Du kannst jetzt den Service unbegrenzt nutzen." + "success": "Du kannst jetzt den Service unbegrenzt nutzen" }, "title": "E-Mail-Adresse bestätigen" }, @@ -4127,7 +4122,7 @@ "processing": "Deine Uploads werden von Funkwhale verarbeitet und sehr bald abrufbar sein." }, "meta": { - "progress": "Verarbeitete Uploads:" + "progress": "Verarbeitete Uploads: {finished}/{total}" } }, "SubscriptionsList": { @@ -4313,6 +4308,7 @@ "currentUsage": "{ current } von { max } belegt", "errored": "Fehlgeschlagene Dateien", "pending": "Ausstehende Dateien", + "percentUsed": "{progress}%", "skipped": "Übersprungene Dateien" }, "link": { @@ -4351,6 +4347,10 @@ "pending": "Ausstehende Abonnements-Anfrage", "unfollow": "Abonnement beenden" }, + "error": { + "follow": "Kann entfernter Bibliothek nicht folgen: {error}", + "unfollow": "Entfernte Bibliothek kann nicht entfolgt werden: {error}" + }, "label": { "scanFailure": "Fehler beim Durchsuchen", "scanPartialSuccess": "Scan mit Fehlern abgeschlossen", @@ -4368,20 +4368,20 @@ "scanSkipped": "Scan ausgelassen (der letzte Scan fand kurz zuvor statt)" }, "meta": { - "failedTracks": "Fehlgeschlagene Titel:", + "failedTracks": "Fehlgeschlagene Titel: {tracks}", "lastUpdate": "Letzte Aktualisierung:", - "tracks": "{ n } Titel | { n } Titel" + "tracks": "Keine Titel | { n } Titel | { n } Titel" }, "modal": { "unfollow": { "content": { "warning": "Wenn du diese Mediathek nicht mehr folgst, verlierst du den Zugriff auf alle ihre Inhalte." }, - "header": "Das Abonnement an dieser Mediathek beenden?" + "header": "Möchtest du das Abonnement dieser Mediathek beenden?" } }, "tooltip": { - "private": "Diese Mediathek ist privat. Der Zugriff bedarf der Genehmigung des Eigentümers / der Eigentümerin", + "private": "Diese Mediathek ist privat. Der Zugriff bedarf der Genehmigung der Eigentümer*in", "public": "Diese Mediathek ist öffentlich. Du kannst auf den Inhalt ohne Einschränkung zugreifen" } }, @@ -4568,12 +4568,14 @@ "Detail": { "button": { "confirm": "Radio löschen", + "delete": "Löschen", "edit": "Bearbeiten…" }, "empty": { "noTracks": "Diesem Radio wurden noch keine Titel hinzugefügt" }, "header": { + "radio": "Radio mit {tracks} Titeln, von ", "tracks": "Titel" }, "modal": { @@ -4586,6 +4588,28 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "submit": "Abschicken" + }, + "header": { + "chooseInstance": "Wähle deine Instanz aus", + "failure": "Es lässt sich keine Verbindung zur angegebenen Adresse herstellen", + "suggestions": "Empfehlungen" + }, + "help": { + "notFunkwhaleServer": "Die angegebene Adresse ist kein Funkwhale-Server", + "selectPod": "Wähle bitte nun den Funkhwhale-Pod aus, zu dem du dich verbinden möchtest. Gib die Adresse direkt an, oder wähle einen der Vorschläge aus.", + "serverDown": "Der Server läuft wahrscheinlich nicht" + }, + "label": { + "url": "Pod-Adresse" + }, + "message": { + "currentConnection": "Du bist aktuell mit { 0 } verbunden. Wenn du fortfährst, wird die Verbindung unterbrochen und alle lokalen Daten werden gelöscht.", + "newUrl": "Du verwendest jetzt den Funkwhale-Pod unter { url }" + } } } } diff --git a/front/src/locales/el.json b/front/src/locales/el.json index 1c4d5f320..2de23aa99 100644 --- a/front/src/locales/el.json +++ b/front/src/locales/el.json @@ -1,343 +1,318 @@ { + "App": { + "loading": "Φορτώνει..." + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Το { app } ζητάει πρόσβαση στον Funkwhale λογαριασμό σας", - "authorize": "Εξουσιοδότηση εφαρμογής τρίτου", - "allScopes": "Πλήρης πρόσβαση" - }, - "title": "επιτρέψτε την εφαρμογή", - "button": { - "authorize": "Εξουσιοδότηση { app }" - }, - "help": { - "pasteCode": "Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στην εφαρμογή:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Απενεργοποιημένη πρόσβαση" - }, - "button": { - "confirmDisable": "Απενεργοποίηση πρόσβασης", - "disable": "Απενεργοποίηση πρόσβασης στο Subsonic" - }, - "modal": { - "disableSubsonic": { - "header": "Απενεργοποίηση πρόσβασης στο Subsonic API;" - } - }, - "link": { - "apps": "Ανακαλύψτε πως μπορείτε να χρησιμοποιήσετε το Funkwhale από άλλες εφαρμογές" - }, - "header": { - "error": "Σφάλμα" - }, - "description": { - "subsonic": { - "paragraph1": "Το Funkwhale είναι συμβατό με άλλα προγράμματα αναπαραγωγής μουσικής που υποστηρίζουν το Subsonic API.", - "paragraph3": "Ωστόσο, η πρόσβαση στο Funkwhale από αυτούς τους clients απαιτεί έναν ξεχωριστό κωδικό τον οποίο μπορείτε να ορίσετε παρακάτω." - } - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Αναγνωριστικό Εφαρμογής", - "appSecret": "Μυστικό εφαρμογής" - }, - "header": { - "appDetails": "Λεπτομέρειες εφαρμογής", - "editApp": "Επεξεργασία εφαρμογής" - }, - "help": { - "appDetails": "Το αναγνωριστικό εφαρμογής και το μυστικό είναι ευαίσθητες πληροφορίες και πρέπει να τα αντιμετωπίζεται σαν κωδικούς. Μην τα μοιραστείτε με κανέναν." - }, - "link": { - "settings": "Πίσω στις ρυθμίσεις" - }, - "title": "Επεξεργασία εφαρμογής" - }, - "Settings": { - "title": "Ρυθμίσεις Λογαριασμού", - "header": { - "accountSettings": "Ρυθμίσεις λογαριασμού", - "authorizedApps": "Εξουσιοδοτημένες εφαρμογές", - "avatar": "Avatar", - "changeEmail": "Αλλαγή της διεύθυνσης e-mail μου", - "changePassword": "Αλλαγή του κωδικού μου", - "contentFilters": "Φίλτρα περιεχομένου", - "deleteAccount": "Διαγραφή του λογαριασμού μου", - "avatarFailure": "Το avatar σας δε μπορεί να αποθηκευτεί" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Εφαρμογή" - } - }, - "yourApps": { - "header": { - "application": "Εφαρμογή", - "creationDate": "Ημερομηνία δημιουργίας" - } - }, - "artists": { - "header": { - "creationDate": "Ημερομηνία δημιουργίας" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Τρέχων κωδικός" - }, - "button": { - "password": "Αλλαγή κωδικού", - "delete": "Διαγραφή", - "deleteAccountConfirm": "Διαγραφή του λογαριασμού μου", - "deleteAccount": "Διαγραφή του λογαριασμού μου…", - "disableSubsonic": "Απενεργοποίηση πρόσβασης", - "edit": "Επεξεργασία" - }, - "description": { - "changeEmail": "Αλλαγή της διεύθυνσης e-mail του λογαριασμού σας. Θα σας σταλθεί e-mail επιβεβαίωσης στην καινούρια διεύθυνση.", - "changePassword": { - "paragraph1": "Εάν αλλάξετε τον κωδικό σας θα αλλάξει και ο κωδικός του Subsonic API αν έχετε έναν." - }, - "contentFilters": "Τα φίλτρα περιεχομένου βοηθάνε στο να κρύβουν το περιεχόμενο το οποίο δεν θέλετε να βλέπετε στην υπηρεσία." - }, - "modal": { - "changePassword": { - "header": "Αλλαγή κωδικού;", - "content": { - "warning": "Η αλλαγή του κωδικού σας θα έχει τις εξής συνέπειες:" - } - }, - "deleteAccount": { - "header": "Θέλετε να διαγράψετε τον λογαριασμό σας;" - } - }, - "help": { - "noApps": "Εάν εξουσιοδοτήσετε τρίτες εφαρμογές να έχουν πρόσβαση στα δεδομένα σας, αυτές οι εφαρμογές θα είναι καταγεγραμμένες εδώ." - }, - "message": { - "currentEmail": "Η τρέχουσα διεύθυνση e-mail σας είναι { email }.", - "confirmDelete": "Το αίτημα διαγραφής σας υποβλήθηκε, ο λογαριαμός σας και το περιεχόμενό του θα διαγραφούν σύντομα." - } - }, - "Logout": { - "header": { - "confirm": "Είστε σίγουρος πως θέλετε να αποσυνδεθείτε;" - } - }, - "ApplicationNew": { - "link": { - "settings": "Πίσω στις ρυθμίσεις" - }, - "title": "Δημιουργία νέας εφαρμογής" - }, - "LoginForm": { - "link": { - "createAccount": "Δημιουργία λογαριασμού" - }, - "placeholder": { - "username": "Εισάγετε το όνομα χρήστη ή τη διεύθυνση e-mail σας" - }, - "help": { - "approvalRequired": "Εάν γραφτήκατε πρόσφατα, μπορεί να χρειαστεί να περιμένετε μέχρι οι διαχειριστές να ελέγξουν το λογαριασμό σας, ή να επαληθεύσουν τη διεύθυνση e-mail σας." - } - }, - "ApplicationForm": { - "button": { - "create": "Δημιουργία εφαρμογής" - } - }, - "SignupForm": { - "button": { - "create": "Δημιουργία του λογαριασμού σας" - }, - "label": { - "email": "Διεύθυνση e-mail" - }, - "placeholder": { - "username": "Εισάγετε το όνομα χρήστη σας" - } - }, - "Plugin": { - "link": { - "documentation": "Τεχνικά Έγγραφα" - }, - "label": { - "pluginEnabled": "Ενεργό" - }, - "header": { - "failure": "Σφάλμα κατά την αποθήκευση πρόσθετου" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", - "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" - }, - "title": "Σχετικά με", "header": { "aboutPod": "Σχετικά με αυτό το pod", + "findApp": "Βρείτε άλλο pod", + "funkwhale": "Μια κοινωνική πλατφόρμα για να απολαμβάνετε και να μοιράζεστε μουσική", "publicContent": "Περιήγηση δημόσιων δεδομένων", - "findApp": "Βρείτε άλλο pod" + "signup": "Εγγραφή" + }, + "help": { + "closedRegistrations": "Οι εγγραφές έχουν κλείσει σε αυτό το pod. Μπορείτε να εγγραφείτε σε άλλο pod χρησιμοποιώντας τον παρακάτω σύνδεσμο." }, "link": { - "findOtherPod": "Βρείτε άλλο pod" - } + "findOtherPod": "Βρείτε άλλο pod", + "learnMore": "Μάθετε περισσότερα" + }, + "message": { + "greeting": "Γειά χαρά {username}", + "loggedIn": "Έχεις ήδη συνδεθεί!" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή" + }, + "stat": { + "activeUsers": "Κανένας ενεργός χρήστης | { n } ενεργός χρήστης | { n } ενεργοί χρήστες", + "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" + }, + "title": "Σχετικά" + }, + "AboutPod": { + "feature": { + "allowList": "Λίστα Επιτρεπομένων", + "anonymousAccess": "Ανώνυμη πρόσβαση", + "quota": "Όριο ανεβάσματος", + "registrations": "Εγγραφές", + "status": { + "closed": "Κλειστό", + "disabled": "Ανενεργό", + "enabled": "Ενεργό", + "open": "Ανοικτό" + }, + "version": "Έκδοση Funkwhale" + }, + "header": { + "about": "Σχετικά με αυτό το pod", + "contact": "Επικοινωνία", + "features": "Δυνατότητες", + "rules": "Κανόνες", + "statistics": "Στατιστικά", + "terms": "Όροι και πολιτική απορρήτου" + }, + "link": { + "about": "Σχετικά με αυτό το pod", + "features": "Δυνατότητες", + "introduction": "Εισαγωγή", + "rules": "Κανόνες", + "statistics": "Στατιστικά", + "terms": "Όροι και πολιτική απορρήτου" + }, + "message": { + "contact": "Στείλτε μας ένα email: { contactEmail }" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή", + "noRules": "Δεν υπάρχουν διαθέσιμοι κανόνες", + "noTerms": "Δεν υπάρχουν διαθέσιμοι όροι" + }, + "stat": { + "activeUsers": "Κανένας ενεργός χρήστης | { n } ενεργός χρήστης | { n } ενεργοί χρήστες", + "albumsCount": "0 άλμπουμ | {n} άλμπουμ | {n} άλμπουμ", + "artistsCount": "0 καλλιτέχνες | {n} καλλιτέχνης | {n} καλλιτέχνες", + "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής", + "listeningsCount": "{ n } ακρόαση | { n } ακροάσεις", + "tracksCount": "0 κομμάτια | {n} κομμάτι | {n} κομμάτια" + }, + "title": "Σχετικά" }, "Home": { + "description": { + "funkwhale": { + "paragraph1": "Αυτό το pod εκτελεί το Funkwhale, ένα έργο βασισμένο στην κοινότητα που σας επιτρέπει να ακούτε και να μοιράζεστε μουσική και ήχο σε ένα αποκεντρωμένο, ανοιχτό δίκτυο.", + "paragraph2": "Το Funkwhale είναι δωρεάν και αναπτύσσεται από μια φιλική κοινότητα από εθελοντές." + }, + "quota": "Οι χρήστες σε αυτό το pod λαμβάνουν επίσης {quota} δωρεάν αποθηκευτικού χώρου για να ανεβάσουν το δικό τους περιεχόμενο!", + "signup": "Εγγραφείτε τώρα για να παρακολουθείτε την αγαπημένη σας μουσική, να δημιουργήσετε λίστες αναπαραγωγής, να ανακαλύψετε νέο περιεχόμενο και πολλά άλλα!" + }, + "header": { + "about": "Σχετικά με αυτό το Funkwhale pod", + "aboutFunkwhale": "Σχετικά με το Funkwhale", + "contact": "Επικοινωνία", + "links": "Χρήσιμοι σύνδεσμοι", + "login": "Σύνδεση", + "newChannels": "Νέα κανάλια", + "signup": "Εγγραφή", + "statistics": "Στατιστικά", + "welcome": "Καλώς ήρθατε στο {podName}!" + }, + "help": { + "registrationsClosed": "Οι εγγραφές έχουν κλείσει σε αυτό το pod. Μπορείτε να εγγραφείτε σε άλλο pod χρησιμοποιώντας τον παρακάτω σύνδεσμο." + }, + "link": { + "findOtherPod": "Βρείτε άλλο pod", + "funkwhale": "Επισκεφθείτε το funkwhale.audio", + "learnMore": "Μάθετε περισσότερα", + "mobileApps": { + "description": "Χρησιμοποιήστε το Funkwhale σε άλλες συσκευές με τις εφαρμογές μας", + "label": "Εφαρμογές για κινητά" + }, + "publicContent": { + "description": "Ακούστε δημόσια άλμπουμ και λίστες αναπαραγωγής που διαμοιράζονται σε αυτό το pod.", + "label": "Περιήγηση δημόσιων δεδομένων" + }, + "rules": "Κανόνες του σέρβερ", + "userGuides": { + "description": "Ανακαλύψτε ότι χρειάζεται να γνωρίζετε για το Funkwhale και τις δυνατότητες του", + "label": "Οδηγοί χρήσης" + }, + "viewMore": "Δείτε περισσότερα…" + }, + "placeholder": { + "noDescription": "Δεν υπάρχει διαθέσιμη περιγραφή" + }, "stat": { "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής" }, - "header": { - "aboutFunkwhale": "Σχετικά με το Funkwhale", - "about": "Σχετικά με αυτό το Funkwhale pod", - "contact": "Επικοινωνία" - }, - "link": { - "publicContent": { - "label": "Περιήγηση δημόσιων δεδομένων" - }, - "userGuides": { - "description": "Ανακαλύψτε ότι χρειάζεται να γνωρίζετε για το Funkwhale και τις δυνατότητες του" - }, - "findOtherPod": "Βρείτε άλλο pod" - }, - "description": { - "funkwhale": { - "paragraph2": "Το Funkwhale είναι δωρεάν και αναπτύσσεται από μια φιλική κοινότητα από εθελοντές." - } - }, "title": "Αρχική" }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια", - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } + "PageNotFound": { + "header": { + "pageNotFound": "Η σελίδα δεν βρέθηκε!" + }, + "link": { + "home": "Πηγαίνετε στην αρχική σελίδα" + }, + "message": { + "pageNotFound": "Λυπούμαστε, η σελίδα που ζητήσατε δεν υπάρχει:" + }, + "title": "Η σελίδα δεν βρέθηκε" + }, + "Queue": { + "button": { + "clear": "Καθάρισμα", + "close": "Κλείσιμο" + }, + "header": { + "failure": "Το κομμάτι δεν μπορεί να φορτώσει" + }, + "label": { + "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…", + "duration": "Διάρκεια", + "enterFullscreen": "Πλήρης οθόνη", + "exitFullscreen": "Κλείσιμο πλήρους οθόνης", + "favorite": "Αγαπημένο κομμάτι", + "next": "Επόμενο κομμάτι", + "pause": "Παύση", + "play": "Έναρξη", + "previous": "Προηγούμενο κομμάτι", + "remove": "Αφαίρεση", + "selectTrack": "Επιλογή κομματιού", + "showCoverArt": "Προβολή Εξωφύλλου" + }, + "message": { + "automaticPlay": "Το επόμενο κομμάτι θα ξεκινήσει σε μερικά δευτερόλεπτα…", + "radio": "Τα νέα κομμάτια θα προστίθενται εδώ αυτόματα.", + "webglUnsupported": "Το πρόγραμμα περιήγησής σας δεν φαίνεται να υποστηρίζει το WebGL2." + }, + "meta": { + "end": "Τέλος", + "queuePosition": "Κομμάτι {index} από {length}", + "startTime": "00:00", + "unknownAlbum": "Άγνωστο άλμπουμ", + "unknownArtist": "Άγνωστος καλλιτέχνης" + }, + "warning": { + "connectivity": "Μπορεί να έχετε πρόβλημα συνδεσιμότητας." + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Αναζήτηση" + }, + "label": { + "rss": { + "fieldPlaceholder": "https://website.example.com/rss.xml" + } + } + }, + "ShortcutsModal": { + "button": { + "close": "Κλείσιμο" + }, + "header": { + "modal": "Συντομεύσεις πληκτρολογίου" + }, + "shortcut": { + "audio": { + "clearQueue": "Καθάρισμα ουράς", + "decreaseVolume": "Μείωση έντασης", + "label": "Συντομεύσεις αναπαραγωγής", + "playPrevious": "Προηγούμενο κομμάτι", + "shuffleQueue": "Τυχαία αναπαραγωγή", + "toggleMute": "Σίγαση" + }, + "general": { + "label": "Γενικές συντομεύσεις", + "show": "Εμφάνιση διαθέσιμων συντομεύσεων πληκτρολογίου" + } + } + }, + "Sidebar": { + "header": { + "administration": "Διαχείριση", + "explore": "Ανακάλυψε", + "library": "Βιβλιοθήκη", + "more": "Επιπλέον" + }, + "label": { + "add": "Προσθήκη περιεχομένου", + "administration": "Διαχείριση", + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με αυτό το pod", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "browse": "Περιήγηση", + "channels": "Κανάλια", + "createAccount": "Δημιουργία λογαριασμού", + "favorites": "Αγαπημένα", + "home": "Αρχική", + "library": "Βιβλιοθήκη", + "login": "Σύνδεση", + "podcasts": "Podcasts", + "radios": "Ράδιο", + "search": "Αναζήτηση", + "settings": "Ρυθμίσεις", + "switchInstance": "Αλλαγή pod", + "users": "Χρήστες" + } + }, + "admin": { + "SettingsGroup": { + "header": { + "error": "Σφάλμα κατά την αποθήκευση ρυθμίσεων", + "image": "Τρέχων εικόνα" } }, + "SignupFormBuilder": { + "button": { + "add": "Προσθήκη πεδίου", + "edit": "Επεξεργασία φόρμας" + }, + "help": { + "additionalFields": "Επιπλέον πεδία που θα εμφανιστούν στην φόρμα. Εμφανίζονται μόνο αν είναι ενεργοποιημένη η χειροκίνητη αποδοχή εγγραφών.", + "helpText": "Προαιρετικό κείμενο που θα εμφανίζεται στην αρχή της φόρμας εγγραφής." + }, + "label": { + "additionalField": "Επιπλέον πεδίο", + "additionalFields": "Επιπλέον πεδία", + "delete": "Διαγραφή" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ενέργειες", + "type": "Τύπος πεδίου" + }, + "required": { + "false": "Λάθος" + } + } + } + } + }, + "audio": { "ChannelCard": { "meta": { "episodes": "{ n } επεισόδιο | { n } επεισόδια", "tracks": "{ n } κομμάτι | { n } κομμάτια" } }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - } - }, - "Player": { - "meta": { - "position": "{ index } απο { length }" - }, - "header": { - "player": "Αναπαραγωγή ήχου και χειρισμός" - }, - "label": { - "clearQueue": "Καθάρισμα της ουράς σας", - "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Προσθήκη στην τρέχουσα ουρά", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "episodeDetails": "Επεισόδια", - "hideArtist": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Προσθήκη στα αγαπημένα", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "addToQueue": "Προσθήκη στην ουρά", - "episodeDetails": "Επεισόδια", - "startRadio": "Διαγραφή ράδιο", - "artistDetails": "Καλλιτέχνης Άλμπουμ", - "channelDetails": "Κανάλι καλλιτέχνη" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Προσθήκη στα αγαπημένα", - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", - "addToQueue": "Προσθήκη στην ουρά", - "episodeDetails": "Επεισόδια", - "startRadio": "Διαγραφή ράδιο", - "artistDetails": "Καλλιτέχνης Άλμπουμ", - "channelDetails": "Κανάλι καλλιτέχνη" - } - }, - "Table": { - "table": { - "header": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης" - } - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ρύθμιση έντασης" - } - }, - "SearchBar": { - "label": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης" - } - }, - "Search": { - "header": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "placeholder": { - "search": "Καλλιτέχνης, άλμπουμ, κομμάτι…" + "ChannelEntries": { + "help": { + "subscribe": "Εγγραφείτε σε αυτό το κανάλι για να δείτε το περιεχόμενό του." } }, "ChannelForm": { + "header": { + "error": "Σφάλμα κατά την αποθήκευση του καναλιού" + }, "label": { - "discography": "Δισκογραφία καλλιτέχνη", "category": "Κατηγορία", + "description": "Περιγραφή", + "discography": "Δισκογραφία καλλιτέχνη", "image": "Φωτογραφία Καναλιού", - "description": "Περιγραφή" + "language": "Γλώσσα", + "name": "Όνομα", + "podcast": "Podcasts", + "subcategory": "Υποκατηγορία" }, "placeholder": { "name": "φοβερό όνομα καναλιού", "username": "φοβεροονομακαναλιου" - }, - "header": { - "error": "Σφάλμα κατά την αποθήκευση του καναλιού" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Ακύρωση αιτήματος ακόλουθου", - "follow": "Ακολούθησε" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια" } }, "EmbedWizard": { @@ -350,234 +325,509 @@ "label": { "embed": "Ενσωμάτωση κώδικα" } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Ακύρωση αιτήματος ακόλουθου", + "follow": "Ακολούθησε" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην τρέχουσα ουρά", + "discretePlay": "Έναρξη", + "episodeDetails": "Επεισόδια", + "hideArtist": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη", + "report": "Αναφορά…", + "trackDetails": "Λεπτομέρειες κομματιού" + } + }, + "Player": { + "header": { + "player": "Αναπαραγωγή ήχου και χειρισμός" + }, + "label": { + "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…", + "clearQueue": "Καθάρισμα της ουράς σας", + "mute": "Σίγαση", + "pause": "Παύση", + "unmute": "Αναίρεση σίγασης" + }, + "meta": { + "position": "{ index } απο { length }", + "unknownAlbum": "Άγνωστο άλμπουμ", + "unknownArtist": "Άγνωστος καλλιτέχνης" + } + }, + "Search": { + "header": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "search": "Αναζήτηση μουσικής" + }, + "placeholder": { + "search": "Καλλιτέχνης, άλμπουμ, κομμάτι…" + } + }, + "SearchBar": { + "label": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "category": { + "podcasts": "Podcasts" + }, + "track": "Κομμάτι" + }, + "link": { + "fediverse": "Αναζήτηση στο fediverse", + "more": "Περισσότερα αποτελέσματα 🡒" + } + }, + "VolumeControl": { + "button": { + "mute": "Σίγαση", + "unmute": "Αναίρεση σίγασης" + }, + "label": { + "slider": "Ρύθμιση έντασης" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "podcast": { + "Modal": { + "button": { + "addToFavorites": "Προσθήκη στα αγαπημένα", + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην ουρά", + "artistDetails": "Καλλιτέχνης Άλμπουμ", + "channelDetails": "Κανάλι καλλιτέχνη", + "episodeDetails": "Επεισόδια", + "startRadio": "Διαγραφή ράδιο" + } + } + }, + "track": { + "Modal": { + "button": { + "addToFavorites": "Προσθήκη στα αγαπημένα", + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής…", + "addToQueue": "Προσθήκη στην ουρά", + "artistDetails": "Καλλιτέχνης Άλμπουμ", + "channelDetails": "Κανάλι καλλιτέχνη", + "episodeDetails": "Επεισόδια", + "startRadio": "Διαγραφή ράδιο" + } + }, + "Table": { + "table": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης" + } + } + } + } + }, + "auth": { + "ApplicationEdit": { + "header": { + "appDetails": "Λεπτομέρειες εφαρμογής", + "editApp": "Επεξεργασία εφαρμογής" + }, + "help": { + "appDetails": "Το αναγνωριστικό εφαρμογής και το μυστικό είναι ευαίσθητες πληροφορίες και πρέπει να τα αντιμετωπίζεται σαν κωδικούς. Μην τα μοιραστείτε με κανέναν." + }, + "label": { + "accessToken": "Access token", + "appId": "Αναγνωριστικό Εφαρμογής", + "appSecret": "Μυστικό εφαρμογής" + }, + "link": { + "settings": "Πίσω στις ρυθμίσεις" + }, + "title": "Επεξεργασία εφαρμογής" + }, + "ApplicationForm": { + "button": { + "create": "Δημιουργία εφαρμογής" + } + }, + "ApplicationNew": { + "link": { + "settings": "Πίσω στις ρυθμίσεις" + }, + "title": "Δημιουργία νέας εφαρμογής" + }, + "Authorize": { + "button": { + "authorize": "Εξουσιοδότηση { app }" + }, + "header": { + "access": "Το { app } ζητάει πρόσβαση στον Funkwhale λογαριασμό σας", + "allScopes": "Πλήρης πρόσβαση", + "authorize": "Εξουσιοδότηση εφαρμογής τρίτου" + }, + "help": { + "pasteCode": "Αντιγράψτε και επικολλήστε τον ακόλουθο κώδικα στην εφαρμογή:" + }, + "title": "επιτρέψτε την εφαρμογή" + }, + "LoginForm": { + "help": { + "approvalRequired": "Εάν γραφτήκατε πρόσφατα, μπορεί να χρειαστεί να περιμένετε μέχρι οι διαχειριστές να ελέγξουν το λογαριασμό σας, ή να επαληθεύσουν τη διεύθυνση e-mail σας." + }, + "link": { + "createAccount": "Δημιουργία λογαριασμού" + }, + "placeholder": { + "username": "Εισάγετε το όνομα χρήστη ή τη διεύθυνση e-mail σας" + } + }, + "Logout": { + "header": { + "confirm": "Είστε σίγουρος πως θέλετε να αποσυνδεθείτε;" + } + }, + "Plugin": { + "header": { + "failure": "Σφάλμα κατά την αποθήκευση πρόσθετου" + }, + "label": { + "pluginEnabled": "Ενεργό" + }, + "link": { + "documentation": "Τεχνικά Έγγραφα" + } + }, + "Settings": { + "button": { + "delete": "Διαγραφή", + "deleteAccount": "Διαγραφή του λογαριασμού μου…", + "deleteAccountConfirm": "Διαγραφή του λογαριασμού μου", + "disableSubsonic": "Απενεργοποίηση πρόσβασης", + "edit": "Επεξεργασία", + "password": "Αλλαγή κωδικού" + }, + "description": { + "changeEmail": "Αλλαγή της διεύθυνσης e-mail του λογαριασμού σας. Θα σας σταλθεί e-mail επιβεβαίωσης στην καινούρια διεύθυνση.", + "changePassword": { + "paragraph1": "Εάν αλλάξετε τον κωδικό σας θα αλλάξει και ο κωδικός του Subsonic API αν έχετε έναν." + }, + "contentFilters": "Τα φίλτρα περιεχομένου βοηθάνε στο να κρύβουν το περιεχόμενο το οποίο δεν θέλετε να βλέπετε στην υπηρεσία." + }, + "header": { + "accountSettings": "Ρυθμίσεις λογαριασμού", + "authorizedApps": "Εξουσιοδοτημένες εφαρμογές", + "avatar": "Avatar", + "avatarFailure": "Το avatar σας δε μπορεί να αποθηκευτεί", + "changeEmail": "Αλλαγή της διεύθυνσης e-mail μου", + "changePassword": "Αλλαγή του κωδικού μου", + "contentFilters": "Φίλτρα περιεχομένου", + "deleteAccount": "Διαγραφή του λογαριασμού μου" + }, + "help": { + "noApps": "Εάν εξουσιοδοτήσετε τρίτες εφαρμογές να έχουν πρόσβαση στα δεδομένα σας, αυτές οι εφαρμογές θα είναι καταγεγραμμένες εδώ." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Τρέχων κωδικός" + }, + "message": { + "confirmDelete": "Το αίτημα διαγραφής σας υποβλήθηκε, ο λογαριαμός σας και το περιεχόμενό του θα διαγραφούν σύντομα.", + "currentEmail": "Η τρέχουσα διεύθυνση e-mail σας είναι { email }." + }, + "modal": { + "changePassword": { + "content": { + "warning": "Η αλλαγή του κωδικού σας θα έχει τις εξής συνέπειες:" + }, + "header": "Αλλαγή κωδικού;" + }, + "deleteAccount": { + "header": "Θέλετε να διαγράψετε τον λογαριασμό σας;" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Ημερομηνία δημιουργίας" + } + }, + "authorizedApps": { + "header": { + "application": "Εφαρμογή" + } + }, + "yourApps": { + "header": { + "application": "Εφαρμογή", + "creationDate": "Ημερομηνία δημιουργίας" + } + } + }, + "title": "Ρυθμίσεις Λογαριασμού" + }, + "SignupForm": { + "button": { + "create": "Δημιουργία του λογαριασμού σας" + }, + "label": { + "email": "Διεύθυνση e-mail" + }, + "placeholder": { + "username": "Εισάγετε το όνομα χρήστη σας" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Απενεργοποίηση πρόσβασης", + "disable": "Απενεργοποίηση πρόσβασης στο Subsonic" + }, + "description": { + "subsonic": { + "paragraph1": "Το Funkwhale είναι συμβατό με άλλα προγράμματα αναπαραγωγής μουσικής που υποστηρίζουν το Subsonic API.", + "paragraph3": "Ωστόσο, η πρόσβαση στο Funkwhale από αυτούς τους clients απαιτεί έναν ξεχωριστό κωδικό τον οποίο μπορείτε να ορίσετε παρακάτω." + } + }, + "header": { + "error": "Σφάλμα" + }, + "link": { + "apps": "Ανακαλύψτε πως μπορείτε να χρησιμοποιήσετε το Funkwhale από άλλες εφαρμογές" + }, + "message": { + "accessDisabled": "Απενεργοποιημένη πρόσβαση" + }, + "modal": { + "disableSubsonic": { + "header": "Απενεργοποίηση πρόσβασης στο Subsonic API;" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Σφάλμα κατά τη δημιουργία" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ακύρωση", + "create": "Δημιουργία" + } + }, + "AlbumSelect": { + "label": { + "album": "Άλμπουμ" + }, + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "LicenseSelect": { + "link": { + "license": "Σχετικά με αυτήν την άδεια" + } + }, + "UploadForm": { + "button": { + "edit": "Επεξεργασία" + }, + "header": { + "error": "Σφάλμα κατά τη δημοσίευση" + }, + "help": { + "license": "Προσθέστε μια άδεια σε αυτό που ανεβάσατε για να εξασφαλίσετε μερικές ελευθερίες στο κοινό σας." + }, + "label": { + "channel": "Κανάλι", + "openBrowser": "Περιήγηση…" + }, + "message": { + "dragAndDrop": "Κάντε drag and drop τα αρχεία σας εδώ ή ανοίχτε τον περιηγητή για να ανεβάσετε τα αρχεία σας" + } + }, + "UploadMetadataForm": { + "label": { + "description": "Περιγραφή" + } + }, + "UploadModal": { + "button": { + "cancel": "Ακύρωση", + "close": "Κλείσιμο" + }, + "header": { + "uploadFiles": "Αρχεία προς ανέβασμα" + }, + "meta": { + "files": "{ n } αρχείο | { n } αρχεία" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } στοιχείο επιλεγμένο | { n } στοιχεία επιλεγμένα", + "go": "Ξεκινήστε", + "selected": "{ n } απο τα { total } επιλεγμένο | { n } απο τα { total } επιλεγμένα" + }, + "label": { + "actions": "Ενέργειες" + }, + "message": { + "needsRefresh": "Το περιεχόμενο έχει ανανεωθεί, κάντε ανανέωση για να δείτε το ενημερωμένο περιεχόμενο", + "success": "Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχείο | Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχεία" + }, + "modal": { + "performAction": { + "header": "Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχεία; | Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχείο;" + } + } + }, + "CopyInput": { + "button": { + "copy": "Αντιγραφή" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Επιβεβαίωση" + }, + "header": { + "confirm": "Επιβεβαίωση δράσης;" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } ώρες { minutes } λεπτά", + "minutes": "{ minutes } λεπτά" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Καθάρισμα" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ακύρωση", + "edit": "Επεξεργασία" + }, + "header": { + "failure": "Σφάλμα κατά την ενημέρωση της περιγραφής" + } + }, + "UserMenu": { + "label": { + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με", + "chat": "Δωμάτιο συνομιλιών", + "docs": "Τεχνικά Έγγραφα" + } + }, + "UserModal": { + "button": { + "switchInstance": "Επιλέξτε το instance σας" + }, + "header": { + "options": "Ενέργειες" + }, + "label": { + "language": "Αλλαγή γλώσσας" + }, + "link": { + "about": "Σχετικά με", + "chat": "Δωμάτιο συνομιλιών" + } + } + }, + "favorites": { + "List": { + "header": { + "favorites": "{ n } αγαπημένο | { n } αγαπημένα" + }, + "link": { + "library": "Περιήγηση στην βιβλιοθήκη" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "TrackFavoriteIcon": { + "button": { + "add": "Προσθήκη στα αγαπημένα" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Κλείσιμο", + "reload": "Κλείσιμο και ανανέωση σελίδας" + }, + "description": { + "failure": "Σφάλμα κατά την ανανέωση των στοιχείων:", + "success": "Τα δεδομένα από τον απομακρυσμένο server ανανεώθηκαν επιτυχώς." + }, + "header": { + "saveFailure": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" + }, + "table": { + "error": { + "label": { + "type": "Τύπος σφάλματος" + }, + "value": { + "httpError": "Ένα σφάλμα HTTP συνέβη κατά την επικοινωνία με τον απομακρυσμένο εξυπηρετητή", + "invalidAttributesError": "Τα δεδομένα που πάρθηκαν από τον απομακρυσμένο server είχαν μη έγκυρα ή ελλιπής χαρακτηριστικά" + } + } + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Αντιγραφή" + } } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Προσθήκη περιγραφής…" + }, "meta": { "episodes": "{ n } επεισόδιο | { n } επεισόδια", "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "addDescription": "Προσθήκη περιγραφής…" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } κομμάτι σε | { n } κομμάτια σε", - "albums": "{ n } άλμπουμ | { n } άλμπουμ" - }, - "title": "Καλλιτέχνης", - "button": { - "cancel": "Ακύρωση", - "edit": "Επεξεργασία", - "embed": "Ενσωμάτωση" - }, - "modal": { - "embed": { - "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" - } - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } κομμάτι που ταιριάζει στα συνδυασμένα φίλτρα | { n } κομμάτια που ταιριάζουν στα συνδυασμένα φίλτρα", - "builder": "Κατασκευαστής" - }, - "table": { - "filter": { - "header": { - "actions": "Ενέργειες", - "candidates": "Υποψήφιοι", - "config": "Ρυθμίσεις", - "name": "Όνομα φίλτρου" - } - } - }, - "button": { - "filter": "Προσθήκη φίλτρου" - }, - "label": { - "filter": "Προσθέστε φίλτρα για να προσαρμόσετε το ράδιο σας", - "description": "Περιγραφή", - "public": "Εμφάνιση δημοσίως" - } - }, - "Filter": { - "cancelButton": "Ακύρωση" - } - }, - "FileUpload": { - "tooltip": { - "network": "Σφάλμα δικτύου κατά το ανέβασμα του αρχείου", - "size": "Δεν είναι δυνατή η μεταφόρτωση του αρχείου, σιγουρευτείτε ότι δεν είναι πολύ μεγάλο" - }, - "table": { - "upload": { - "header": { - "actions": "Ενέργειες", - "filename": "Όνομα αρχείου" - } - } - }, - "button": { - "cancel": "Ακύρωση" - }, - "label": { - "uploadWidget": "Κάντε κλικ για να επιλέξετε αρχεία για μεταφόρτωση ή κάντε drag and drop αρχεία ή φακέλους" - } - }, - "EditForm": { - "placeholder": { - "summary": "Μια περίληψη των αλλαγών σας." - }, - "button": { - "cancel": "Ακύρωση", - "clear": "Καθάρισμα" - }, + "AlbumDetail": { "header": { - "failure": "Σφάλμα κατά την υποβολή αλλαγών" - } - }, - "Albums": { - "link": { - "addMusic": "Προσθέστε μουσική" - }, - "title": "Άλμπουμ", - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση Άλμπουμ" - }, - "placeholder": { - "search": "Εισάγετε τίτλο άλμπουμ…" - } - }, - "Artists": { - "button": { - "upload": "Προσθέστε μουσική" - }, - "label": { - "search": "Όνομα καλλιτέχνη" - }, - "title": "Καλλιτέχνες", - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στους καλλιτέχνες" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης", - "copyright": "Πνευματικά Δικαιώματα" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Λήψεις", - "duration": "Διάρκεια" - } - } - }, - "TagDetail": { - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "header": { - "channels": "Κανάλια" - } - }, - "ArtistDetail": { - "header": { - "album": "Άλμπουμ από τον καλλιτέχνη", - "track": "Άλμπουμ από τον καλλιτέχνη" - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Σφάλμα κατά την επεξεργασία της μεταφόρτωσης. Θα βρείτε επιπλέον πληροφορίες παρακάτω.", - "unknownError": { - "message": "Συνέβη κάποιο άγνωστο σφάλμα" - } - }, - "button": { - "close": "Κλείσιμο" - }, - "table": { - "error": { - "debug": "Πληροφορίες εντοπισμού σφαλμάτων", - "errorType": "Τύπος σφάλματος" - } - } - }, - "EditCard": { - "button": { - "approve": "Αποδοχή", - "delete": "Διαγραφή" - }, - "status": { - "approved": "Eγκρίθηκε", - "applied": "Εγκρίθηκε και εφαρμόστηκε" - }, - "modal": { - "delete": { - "header": "Διαγραφή της υπόδειξης;" - } - }, - "table": { - "update": { - "header": { - "field": "Πεδίο" - } - } - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στα podcast" - }, - "button": { - "cancel": "Ακύρωση", - "channel": "Δημιουργία Καναλιού" - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στα ράδιο" - }, - "button": { - "add": "Δημιουργία ράδιο", - "create": "Δημιουργία δικού σας ράδιο" - }, - "placeholder": { - "search": "Εισάγετε όνομα ράδιο…" + "episodes": "Επεισόδια" } }, "AlbumDropdown": { @@ -596,6 +846,188 @@ } } }, + "AlbumEdit": { + "header": { + "edit": "Επεξεργασία άλμπουμ" + } + }, + "Albums": { + "header": { + "browse": "Περιήγηση Άλμπουμ" + }, + "link": { + "addMusic": "Προσθέστε μουσική" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε τίτλο άλμπουμ…" + }, + "title": "Άλμπουμ" + }, + "ArtistBase": { + "button": { + "cancel": "Ακύρωση", + "edit": "Επεξεργασία", + "embed": "Ενσωμάτωση" + }, + "meta": { + "albums": "{ n } άλμπουμ | { n } άλμπουμ", + "tracks": "{ n } κομμάτι σε | { n } κομμάτια σε" + }, + "modal": { + "embed": { + "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" + } + }, + "title": "Καλλιτέχνης" + }, + "ArtistDetail": { + "header": { + "album": "Άλμπουμ από τον καλλιτέχνη", + "track": "Άλμπουμ από τον καλλιτέχνη" + } + }, + "ArtistEdit": { + "header": { + "edit": "Επεξεργασία καλλιτέχνη" + } + }, + "Artists": { + "button": { + "upload": "Προσθέστε μουσική" + }, + "header": { + "browse": "Περιήγηση στους καλλιτέχνες" + }, + "label": { + "search": "Όνομα καλλιτέχνη" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "title": "Καλλιτέχνες" + }, + "EditCard": { + "button": { + "approve": "Αποδοχή", + "delete": "Διαγραφή" + }, + "modal": { + "delete": { + "header": "Διαγραφή της υπόδειξης;" + } + }, + "status": { + "applied": "Εγκρίθηκε και εφαρμόστηκε", + "approved": "Eγκρίθηκε" + }, + "table": { + "update": { + "header": { + "field": "Πεδίο" + } + } + } + }, + "EditForm": { + "button": { + "cancel": "Ακύρωση", + "clear": "Καθάρισμα" + }, + "header": { + "failure": "Σφάλμα κατά την υποβολή αλλαγών" + }, + "placeholder": { + "summary": "Μια περίληψη των αλλαγών σας." + } + }, + "FileUpload": { + "button": { + "cancel": "Ακύρωση" + }, + "label": { + "uploadWidget": "Κάντε κλικ για να επιλέξετε αρχεία για μεταφόρτωση ή κάντε drag and drop αρχεία ή φακέλους" + }, + "table": { + "upload": { + "header": { + "actions": "Ενέργειες", + "filename": "Όνομα αρχείου" + } + } + }, + "tooltip": { + "network": "Σφάλμα δικτύου κατά το ανέβασμα του αρχείου", + "size": "Δεν είναι δυνατή η μεταφόρτωση του αρχείου, σιγουρευτείτε ότι δεν είναι πολύ μεγάλο" + } + }, + "ImportStatusModal": { + "button": { + "close": "Κλείσιμο" + }, + "error": { + "importFailure": "Σφάλμα κατά την επεξεργασία της μεταφόρτωσης. Θα βρείτε επιπλέον πληροφορίες παρακάτω.", + "unknownError": { + "message": "Συνέβη κάποιο άγνωστο σφάλμα" + } + }, + "table": { + "error": { + "debug": "Πληροφορίες εντοπισμού σφαλμάτων", + "errorType": "Τύπος σφάλματος" + } + } + }, + "Podcasts": { + "button": { + "cancel": "Ακύρωση", + "channel": "Δημιουργία Καναλιού" + }, + "header": { + "browse": "Περιήγηση στα podcast" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "Radios": { + "button": { + "add": "Δημιουργία ράδιο", + "create": "Δημιουργία δικού σας ράδιο" + }, + "header": { + "browse": "Περιήγηση στα ράδιο" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε όνομα ράδιο…" + } + }, + "TagDetail": { + "header": { + "channels": "Κανάλια" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + } + }, "TrackBase": { "button": { "cancel": "Ακύρωση", @@ -613,14 +1045,21 @@ } } }, - "AlbumEdit": { - "header": { - "edit": "Επεξεργασία άλμπουμ" - } - }, - "ArtistEdit": { - "header": { - "edit": "Επεξεργασία καλλιτέχνη" + "TrackDetail": { + "table": { + "release": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "copyright": "Πνευματικά Δικαιώματα" + }, + "track": { + "bitrate": { + "label": "Bitrate" + }, + "codec": "Codec", + "downloads": "Λήψεις", + "duration": "Διάρκεια" + } } }, "TrackEdit": { @@ -628,16 +1067,43 @@ "edit": "Επεξεργασία κομματιού" } }, - "AlbumDetail": { - "header": { - "episodes": "Επεισόδια" + "radios": { + "Builder": { + "button": { + "filter": "Προσθήκη φίλτρου" + }, + "header": { + "builder": "Κατασκευαστής", + "matches": "{ n } κομμάτι που ταιριάζει στα συνδυασμένα φίλτρα | { n } κομμάτια που ταιριάζουν στα συνδυασμένα φίλτρα" + }, + "label": { + "description": "Περιγραφή", + "filter": "Προσθέστε φίλτρα για να προσαρμόσετε το ράδιο σας", + "public": "Εμφάνιση δημοσίως" + }, + "table": { + "filter": { + "header": { + "actions": "Ενέργειες", + "candidates": "Υποψήφιοι", + "config": "Ρυθμίσεις", + "name": "Όνομα φίλτρου" + } + } + } + }, + "Filter": { + "cancelButton": "Ακύρωση" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } αγαπημένο | { n } αγαπημένα" + "manage": { + "ChannelsTable": { + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" }, "ordering": { "direction": { @@ -645,357 +1111,51 @@ "descending": "Φθίνουσα" } }, - "link": { - "library": "Περιήγηση στην βιβλιοθήκη" - } - }, - "TrackFavoriteIcon": { - "button": { - "add": "Προσθήκη στα αγαπημένα" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } αρχείο | { n } αρχεία" - }, - "button": { - "cancel": "Ακύρωση", - "close": "Κλείσιμο" - }, - "header": { - "uploadFiles": "Αρχεία προς ανέβασμα" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "label": { - "album": "Άλμπουμ" - } - }, - "LicenseSelect": { - "link": { - "license": "Σχετικά με αυτήν την άδεια" - } - }, - "UploadForm": { - "help": { - "license": "Προσθέστε μια άδεια σε αυτό που ανεβάσατε για να εξασφαλίσετε μερικές ελευθερίες στο κοινό σας." - }, - "label": { - "openBrowser": "Περιήγηση…", - "channel": "Κανάλι" - }, - "message": { - "dragAndDrop": "Κάντε drag and drop τα αρχεία σας εδώ ή ανοίχτε τον περιηγητή για να ανεβάσετε τα αρχεία σας" - }, - "button": { - "edit": "Επεξεργασία" - }, - "header": { - "error": "Σφάλμα κατά τη δημοσίευση" - } - }, - "AlbumModal": { - "button": { - "cancel": "Ακύρωση", - "create": "Δημιουργία" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Περιγραφή" - } - }, - "AlbumForm": { - "header": { - "error": "Σφάλμα κατά τη δημιουργία" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ώρα μουσικής | { n } ώρες μουσικής", - "activeUsers": "{ n } ενεργός χρήστης | { n } ενεργοί χρήστες", - "albumsCount": "Άλμπουμ | Άλμπουμ", - "artistsCount": "Καλλιτέχνης | Καλλιτέχνης", - "listeningsCount": "{ n } ακρόαση | { n } ακροάσεις", - "tracksCount": "Προσθήκη κομματιού | Προσθήκη κομματιού" - }, - "title": "Σχετικά με", - "link": { - "about": "Σχετικά με αυτό το pod" - }, - "header": { - "about": "Σχετικά με αυτό το pod", - "contact": "Επικοινωνία" - }, - "feature": { - "allowList": "Λίστα Επιτρεπομένων", - "anonymousAccess": "Ανώνυμη πρόσβαση", - "status": { - "closed": "Κλειστό", - "disabled": "Απενεργοποιημένο", - "enabled": "Ενεργό" - }, - "version": "Έκδοση Funkwhale" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } απο τα { total } επιλεγμένο | { n } απο τα { total } επιλεγμένα", - "allSelected": "{ n } στοιχείο επιλεγμένο | { n } στοιχεία επιλεγμένα", - "go": "Ξεκινήστε" - }, - "message": { - "success": "Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχείο | Η ενέργεια { action } πραγματοποιήθηκε επιτυχώς σε { n } στοιχεία", - "needsRefresh": "Το περιεχόμενο έχει ανανεωθεί, κάντε ανανέωση για να δείτε το ενημερωμένο περιεχόμενο" - }, - "label": { - "actions": "Ενέργειες" - }, - "modal": { - "performAction": { - "header": "Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχεία; | Θέλετε να εκκινήσετε την δράση { action } σε { n } στοιχείο;" - } - } - }, - "Duration": { - "meta": { - "hours": "{ hours } ώρες { minutes } λεπτά", - "minutes": "{ minutes } λεπτά" - } - }, - "UserMenu": { - "link": { - "about": "Σχετικά με", - "chat": "Δωμάτιο συνομιλιών", - "docs": "Τεχνικά Έγγραφα" - }, - "label": { - "language": "Αλλαγή γλώσσας" - } - }, - "UserModal": { - "link": { - "about": "Σχετικά με", - "chat": "Δωμάτιο συνομιλιών" - }, - "label": { - "language": "Αλλαγή γλώσσας" - }, - "header": { - "options": "Ενέργειες" - }, - "button": { - "switchInstance": "Επιλέξτε το instance σας" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ακύρωση", - "confirm": "Επιβεβαίωση" - }, - "header": { - "confirm": "Επιβεβαίωση δράσης;" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ακύρωση", - "edit": "Επεξεργασία" - }, - "header": { - "failure": "Σφάλμα κατά την ενημέρωση της περιγραφής" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Καθάρισμα" - } - }, - "CopyInput": { - "button": { - "copy": "Αντιγραφή" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "Το { 0 } είναι ήδη στην λίστα { 1 }." - }, - "button": { - "addDuplicate": "Προσθήκη ούτως ή άλλως", - "addToPlaylist": "Προσθήκη σε αυτήν την λίστα αναπαραγωγής", - "addTrack": "Προσθήκη κομματιού", - "cancel": "Ακύρωση", - "edit": "Επεξεργασία" - }, - "header": { - "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής", - "available": "Διαθέσιμες λίστες αναπαραγωγής" - }, "table": { - "edit": { + "channel": { "header": { - "edit": "Επεξεργασία" + "account": "Λογαριασμός", + "albums": "Άλμπουμ", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" } } - }, - "placeholder": { - "filterPlaylist": "Εισάγετε όνομα λίστας αναπαραγωγής" - }, - "label": { - "filter": "Φίλτρο" } }, - "Editor": { - "button": { - "addDuplicate": "Προσθήκη ούτως ή άλλως", - "clear": "Καθάρισμα λίστας αναπαραγωγής", - "copy": "Αντιγραφή της τρέχουσας ουράς σε αυτήν την λίστα αναπαραγωγής" - }, - "error": { - "sync": "Σφάλμα κατά την αποθήκευση των αλλαγών σας" - }, - "message": { - "sync": "Οι αλλαγές συγχρονίστηκαν με τον διακομιστή" - }, - "modal": { - "clearPlaylist": { - "header": "Θέλετε να εκκαθαρίσετε την λίστα αναπαραγωγής \"{ playlist }\";" - } - }, - "help": { - "reorder": "Κάντε drag and drop σειρές για να αναδιάταξη των κομματιών στην λίστα αναπαραγωγής" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Προσθήκη στην λίστα αναπαραγωγής…" - } - }, - "Form": { - "header": { - "createPlaylist": "Δημιουργία νέας λίστας αναπαραγωγής" - }, - "button": { - "create": "Δημιουργία λίστας αναπαραγωγής" - } - }, - "Widget": { - "button": { - "create": "Δημιουργία Λίστας Αναπαραγωγής" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } αποδέχθηκε την ακολούθηση της βιβλιοθήκης \"{ library }\"", - "libraryFollow": "{ username } ακολούθησε την βιβλιοθήκη σας \"{ library }\"", - "libraryPendingFollow": "{ username } θέλει να ακολουθήσει την βιβλιοθήκη σας \"{ library }\"" - }, - "button": { - "approve": "Αποδοχή" - } - } - }, - "Sidebar": { - "link": { - "about": "Σχετικά με αυτό το pod", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "browse": "Περιήγηση", - "channels": "Κανάλια", - "createAccount": "Δημιουργία λογαριασμού", - "favorites": "Αγαπημένα", - "home": "Αρχική" - }, - "label": { - "add": "Προσθήκη περιεχομένου", - "administration": "Διαχείριση", - "language": "Αλλαγή γλώσσας" - }, - "header": { - "administration": "Διαχείριση", - "explore": "Ανακάλυψε" - } - }, - "manage": { "library": { - "UploadsTable": { - "table": { - "upload": { - "header": { - "accessedDate": "Ημερομηνία πρόσβασης", - "account": "Λογαριασμός", - "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση" - } + "AlbumsTable": { + "action": { + "delete": { + "label": "Διαγραφή" } }, - "option": { - "all": "Όλα" - }, "ordering": { "direction": { "ascending": "Αύξουσα", "descending": "Φθίνουσα" } }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "LibrariesTable": { "table": { - "library": { + "album": { "header": { - "account": "Λογαριασμός", - "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση", - "followers": "Ακόλουθοι" - } - } - }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Άλμπουμ", "artist": "Καλλιτέχνης", "creationDate": "Ημερομηνία δημιουργίας", "domain": "Διεύθυνση" } } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" }, "ordering": { "direction": { @@ -1003,13 +1163,6 @@ "descending": "Φθίνουσα" } }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "ArtistsTable": { "table": { "artist": { "header": { @@ -1018,45 +1171,6 @@ "domain": "Διεύθυνση" } } - }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "label": { - "category": "Κατηγορία" - }, - "action": { - "delete": { - "label": "Διαγραφή" - } - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "creationDate": "Ημερομηνία δημιουργίας" - } - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": { - "label": "Διαγραφή" - } } }, "EditsCardList": { @@ -1071,15 +1185,37 @@ } } }, - "AlbumsTable": { + "LibrariesTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "option": { + "all": "Όλα" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, "table": { - "album": { + "library": { "header": { - "artist": "Καλλιτέχνης", + "account": "Λογαριασμός", "creationDate": "Ημερομηνία δημιουργίας", - "domain": "Διεύθυνση" + "domain": "Διεύθυνση", + "followers": "Ακόλουθοι" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } }, "ordering": { "direction": { @@ -1087,96 +1223,82 @@ "descending": "Φθίνουσα" } }, + "table": { + "tag": { + "header": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "creationDate": "Ημερομηνία δημιουργίας" + } + } + } + }, + "TracksTable": { "action": { "delete": { "label": "Διαγραφή" } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "track": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Διαγραφή" + } + }, + "option": { + "all": "Όλα" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "upload": { + "header": { + "accessedDate": "Ημερομηνία πρόσβασης", + "account": "Λογαριασμός", + "creationDate": "Ημερομηνία δημιουργίας", + "domain": "Διεύθυνση" + } + } } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Λογαριασμός", - "domain": "Διεύθυνση" - }, - "status": { - "assignedTo": "Ανατεθεί σε" - }, - "report": { - "category": "Κατηγορία", - "creationDate": "Ημερομηνία δημιουργίας" + "AccountsTable": { + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" } }, - "header": { - "actions": "Ενέργειες" - }, - "button": { - "confirmDelete": "Διαγραφή", - "delete": "Διαγραφή στοιχείου αναφοράς" - }, - "modal": { - "delete": { - "header": "Διαγραφή στοιχείου αναφοράς;" - } - } - }, - "UserRequestCard": { - "header": { - "actions": "Ενέργειες" - }, - "button": { - "approve": "Αποδοχή" - }, "table": { - "status": { - "approved": "Eγκρίθηκε", - "assignedTo": "Ανατεθεί σε" - }, - "request": { - "creationDate": "Ημερομηνία δημιουργίας" + "account": { + "header": { + "domain": "Διεύθυνση" + } } } }, - "InstancePolicyForm": { - "header": { - "addRule": "Προσθήκη κανόνα συντονισμού", - "editRule": "Επεξεργασία κανόνα συντονισμού", - "failure": "Σφάλμα κατά τη δημιουργία κανόνα" - }, - "label": { - "blockAll": "Μπλοκάρισμα όλων", - "policyDisabled": "Απενεργοποιημένο", - "policyEnabled": "Ενεργό" - }, - "tooltip": { - "blockAll": "Μπλοκάρισμα όλων απ' τον συγκεκριμένο λογαριασμό ή διεύθυνση. Αυτό θα αποτρέψει οποιαδήποτε αλληλεπίδραση με την οντότητα, και θα καθαρίσει όλα τα σχετικό περιεχόμενο (Μεταφορτώσεις, βιβλιοθήκες, ακολούθους, κτλ.)", - "rejectMedia": "Αποτροπή κατεβάσματος αρχείων πολυμέσων (αρχεία ήχου, εξώφυλλο άλμπουμ, avatar λογαριασμού...) από αυτόν τον λογαριασμό ή διεύθυνση. Θα διαγραφεί και το ήδη υπάρχον περιεχόμενο." - }, - "button": { - "cancel": "Ακύρωση", - "create": "Δημιουργία", - "delete": "Διαγραφή", - "confirm": "Διαγραφή κανόνα συντονισμού" - }, - "modal": { - "delete": { - "header": "Διαγραφή του κανόνα συντονισμού;" - } - } - }, - "NoteForm": { - "button": { - "add": "Προσθήκη σημείωσης" - }, - "placeholder": { - "summary": "Περιγράψτε τις ενέργειες σας, ή άλλες σχετικές ενημερώσεις…" - }, - "header": { - "failure": "Σφάλμα κατά την υποβολή σημείωσης" - } - }, "DomainsTable": { "action": { "add": { @@ -1193,37 +1315,60 @@ } } }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "table": { - "account": { - "header": { - "domain": "Διεύθυνση" - } - } - } - }, "InstancePolicyCard": { - "label": { - "blockAll": "Μπλοκάρισμα όλων" - }, "button": { "edit": "Επεξεργασία" }, + "label": { + "blockAll": "Μπλοκάρισμα όλων" + }, "status": { "enabled": "Ενεργό" } }, + "InstancePolicyForm": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή κανόνα συντονισμού", + "create": "Δημιουργία", + "delete": "Διαγραφή" + }, + "header": { + "addRule": "Προσθήκη κανόνα συντονισμού", + "editRule": "Επεξεργασία κανόνα συντονισμού", + "failure": "Σφάλμα κατά τη δημιουργία κανόνα" + }, + "label": { + "blockAll": "Μπλοκάρισμα όλων", + "policyDisabled": "Απενεργοποιημένο", + "policyEnabled": "Ενεργό" + }, + "modal": { + "delete": { + "header": "Διαγραφή του κανόνα συντονισμού;" + } + }, + "tooltip": { + "blockAll": "Μπλοκάρισμα όλων απ' τον συγκεκριμένο λογαριασμό ή διεύθυνση. Αυτό θα αποτρέψει οποιαδήποτε αλληλεπίδραση με την οντότητα, και θα καθαρίσει όλα τα σχετικό περιεχόμενο (Μεταφορτώσεις, βιβλιοθήκες, ακολούθους, κτλ.)", + "rejectMedia": "Αποτροπή κατεβάσματος αρχείων πολυμέσων (αρχεία ήχου, εξώφυλλο άλμπουμ, avatar λογαριασμού...) από αυτόν τον λογαριασμό ή διεύθυνση. Θα διαγραφεί και το ήδη υπάρχον περιεχόμενο." + } + }, "InstancePolicyModal": { "button": { "close": "Κλείσιμο" } }, + "NoteForm": { + "button": { + "add": "Προσθήκη σημείωσης" + }, + "header": { + "failure": "Σφάλμα κατά την υποβολή σημείωσης" + }, + "placeholder": { + "summary": "Περιγράψτε τις ενέργειες σας, ή άλλες σχετικές ενημερώσεις…" + } + }, "NotesThread": { "button": { "delete": "Διαγραφή" @@ -1233,56 +1378,73 @@ "header": "Διαγραφή της σημείωσης;" } } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { + }, + "ReportCard": { + "button": { + "confirmDelete": "Διαγραφή", + "delete": "Διαγραφή στοιχείου αναφοράς" + }, + "header": { + "actions": "Ενέργειες" + }, + "modal": { + "delete": { + "header": "Διαγραφή στοιχείου αναφοράς;" + } + }, + "table": { + "object": { "account": "Λογαριασμός", - "albums": "Άλμπουμ", - "creationDate": "Ημερομηνία δημιουργίας", "domain": "Διεύθυνση" + }, + "report": { + "category": "Κατηγορία", + "creationDate": "Ημερομηνία δημιουργίας" + }, + "status": { + "assignedTo": "Ανατεθεί σε" } } }, - "option": { - "all": "Όλα" - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" + "UserRequestCard": { + "button": { + "approve": "Αποδοχή" + }, + "header": { + "actions": "Ενέργειες" + }, + "table": { + "request": { + "creationDate": "Ημερομηνία δημιουργίας" + }, + "status": { + "approved": "Eγκρίθηκε", + "assignedTo": "Ανατεθεί σε" + } } - }, - "label": { - "category": "Κατηγορία" } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Κατάσταση λογαριασμού", - "email": "Email" - }, - "accountStatus": { - "active": "Ενεργός" - }, - "status": { - "admin": "Διαχειριστής" - } - } + "InvitationForm": { + "button": { + "clear": "Καθάρισμα", + "new": "Αποκτήστε μια νέα πρόσκληση" }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" + "header": { + "failure": "Σφάλμα κατά τη δημιουργία πρόσκλησης" + }, + "table": { + "invitation": { + "header": { + "code": "Κώδικας" + } } } }, "InvitationsTable": { + "action": { + "delete": "Διαγραφή" + }, "option": { "all": "Όλα", "expired": "Ληγμένο/χρησιμοποιημένο" @@ -1295,163 +1457,156 @@ "expirationDate": "Ημερομηνία λήξης" } } - }, - "action": { - "delete": "Διαγραφή" } }, - "InvitationForm": { - "button": { - "clear": "Καθάρισμα", - "new": "Αποκτήστε μια νέα πρόσκληση" + "UsersTable": { + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } }, "table": { - "invitation": { + "user": { + "accountStatus": { + "active": "Ενεργός" + }, "header": { - "code": "Κώδικας" + "accountStatus": "Κατάσταση λογαριασμού", + "email": "Email" + }, + "status": { + "admin": "Διαχειριστής" } } - }, - "header": { - "failure": "Σφάλμα κατά τη δημιουργία πρόσκλησης" } } } }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ενέργειες", - "type": "Τύπος πεδίου" - } - } - }, - "button": { - "add": "Προσθήκη πεδίου", - "edit": "Επεξεργασία φόρμας" - }, - "label": { - "additionalField": "Επιπλέον πεδίο", - "additionalFields": "Επιπλέον πεδία", - "delete": "Διαγραφή" - }, - "help": { - "additionalFields": "Επιπλέον πεδία που θα εμφανιστούν στην φόρμα. Εμφανίζονται μόνο αν είναι ενεργοποιημένη η χειροκίνητη αποδοχή εγγραφών.", - "helpText": "Προαιρετικό κείμενο που θα εμφανίζεται στην αρχή της φόρμας εγγραφής." - } - }, - "SettingsGroup": { - "header": { - "image": "Τρέχων εικόνα", - "error": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" - } - } - }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Όλα" - }, - "label": { - "category": "Κατηγορία" - } - }, - "ReportModal": { - "header": { - "disabled": "Οι ανώνυμες αναφορές είναι απενεργοποιημένες, παρακαλώ συνδεθείτε για να υποβάλλεται αναφορά.", - "modal": "Θέλετε να αναφέρεται αυτό το στοιχείο;", - "submissionFailure": "Σφάλμα κατά την υποβολή αναφοράς" - }, - "button": { - "cancel": "Ακύρωση" - }, - "label": { - "email": "Email", - "forwardToDomain": "Προώθηση στο { domain}" - }, - "description": { - "forwardToDomain": "Προωθήστε ένα ανωνυμοποιημένο αντίγραφο της αναφοράς σας στον διακομιστή που φιλοξενεί αυτό το στοιχείο." - } - }, "FilterModal": { "button": { "cancel": "Ακύρωση", "hide": "Απόκρυψη περιεχομένου" }, + "header": { + "failure": "Σφάλμα κατά τη δημιουργία φίλτρου", + "modal": "Θέλετε να κρύψετε περιεχόμενο απ' τον καλλιτέχνη \"{ name }\";" + }, "message": { "success": "Προστέθηκε επιτυχώς το φίλτρο περιεχομένου" + } + }, + "ReportCategoryDropdown": { + "label": { + "category": "Κατηγορία" + }, + "option": { + "all": "Όλα" + } + }, + "ReportModal": { + "button": { + "cancel": "Ακύρωση" + }, + "description": { + "forwardToDomain": "Προωθήστε ένα ανωνυμοποιημένο αντίγραφο της αναφοράς σας στον διακομιστή που φιλοξενεί αυτό το στοιχείο." }, "header": { - "modal": "Θέλετε να κρύψετε περιεχόμενο απ' τον καλλιτέχνη \"{ name }\";", - "failure": "Σφάλμα κατά τη δημιουργία φίλτρου" + "disabled": "Οι ανώνυμες αναφορές είναι απενεργοποιημένες, παρακαλώ συνδεθείτε για να υποβάλλεται αναφορά.", + "modal": "Θέλετε να αναφέρεται αυτό το στοιχείο;", + "submissionFailure": "Σφάλμα κατά την υποβολή αναφοράς" + }, + "label": { + "email": "Email", + "forwardToDomain": "Προώθηση στο { domain}" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Σφάλμα κατά την ανανέωση των στοιχείων:", - "success": "Τα δεδομένα από τον απομακρυσμένο server ανανεώθηκαν επιτυχώς." + "notifications": { + "NotificationRow": { + "button": { + "approve": "Αποδοχή" + }, + "message": { + "libraryAcceptFollow": "{ username } αποδέχθηκε την ακολούθηση της βιβλιοθήκης \"{ library }\"", + "libraryFollow": "{ username } ακολούθησε την βιβλιοθήκη σας \"{ library }\"", + "libraryPendingFollow": "{ username } θέλει να ακολουθήσει την βιβλιοθήκη σας \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "Editor": { + "button": { + "addDuplicate": "Προσθήκη ούτως ή άλλως", + "clear": "Καθάρισμα λίστας αναπαραγωγής", + "copy": "Αντιγραφή της τρέχουσας ουράς σε αυτήν την λίστα αναπαραγωγής" + }, + "error": { + "sync": "Σφάλμα κατά την αποθήκευση των αλλαγών σας" + }, + "help": { + "reorder": "Κάντε drag and drop σειρές για να αναδιάταξη των κομματιών στην λίστα αναπαραγωγής" + }, + "message": { + "sync": "Οι αλλαγές συγχρονίστηκαν με τον διακομιστή" + }, + "modal": { + "clearPlaylist": { + "header": "Θέλετε να εκκαθαρίσετε την λίστα αναπαραγωγής \"{ playlist }\";" + } + } + }, + "Form": { + "button": { + "create": "Δημιουργία λίστας αναπαραγωγής" + }, + "header": { + "createPlaylist": "Δημιουργία νέας λίστας αναπαραγωγής" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Προσθήκη ούτως ή άλλως", + "addToPlaylist": "Προσθήκη σε αυτήν την λίστα αναπαραγωγής", + "addTrack": "Προσθήκη κομματιού", + "cancel": "Ακύρωση", + "edit": "Επεξεργασία" + }, + "header": { + "addToPlaylist": "Προσθήκη στην λίστα αναπαραγωγής", + "available": "Διαθέσιμες λίστες αναπαραγωγής" + }, + "label": { + "filter": "Φίλτρο" + }, + "placeholder": { + "filterPlaylist": "Εισάγετε όνομα λίστας αναπαραγωγής" }, "table": { - "error": { - "value": { - "httpError": "Ένα σφάλμα HTTP συνέβη κατά την επικοινωνία με τον απομακρυσμένο εξυπηρετητή", - "invalidAttributesError": "Τα δεδομένα που πάρθηκαν από τον απομακρυσμένο server είχαν μη έγκυρα ή ελλιπής χαρακτηριστικά" - }, - "label": { - "type": "Τύπος σφάλματος" + "edit": { + "header": { + "edit": "Επεξεργασία" } } }, - "button": { - "close": "Κλείσιμο", - "reload": "Κλείσιμο και ανανέωση σελίδας" - }, - "header": { - "saveFailure": "Σφάλμα κατά την αποθήκευση ρυθμίσεων" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Συντομεύσεις αναπαραγωγής", - "clearQueue": "Καθάρισμα ουράς", - "decreaseVolume": "Μείωση έντασης" - }, - "general": { - "label": "Γενικές συντομεύσεις" + "warning": { + "duplicate": "Το { 0 } είναι ήδη στην λίστα { 1 }." } }, - "button": { - "close": "Κλείσιμο" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ακύρωση" - }, - "header": { - "chooseInstance": "Επιλέξτε το instance σας" - } - }, - "Queue": { - "button": { - "clear": "Καθάρισμα", - "close": "Κλείσιμο" - }, - "label": { - "duration": "Διάρκεια", - "addArtistContentFilter": "Απόκρυψη περιεχομένου από αυτόν τον καλλιτέχνη…" - } - }, - "forms": { - "PasswordInput": { + "TrackPlaylistIcon": { "button": { - "copy": "Αντιγραφή" + "add": "Προσθήκη στην λίστα αναπαραγωγής…" + } + }, + "Widget": { + "button": { + "create": "Δημιουργία Λίστας Αναπαραγωγής" } } }, @@ -1461,704 +1616,6 @@ "edit": "Επεξεργασία" } } - }, - "RemoteSearchForm": { - "button": { - "fediverse": "Fediverse" - }, - "label": { - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml" - } - } - }, - "PageNotFound": { - "link": { - "home": "Πηγαίνετε στην αρχική σελίδα" - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } επεισόδιο | { n } επεισόδια", - "listenings": "{ n } ακρόαση | { n } ακροάσεις", - "subscribers": "{ n } εγγεγραμμένος | { n } εγγεγραμμένοι", - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "channelEpisodes": "Όλα τα Επεισόδια" - }, - "header": { - "artistChannel": "Κανάλι καλλιτέχνη" - }, - "button": { - "cancel": "Ακύρωση", - "confirm": "Διαγραφή", - "delete": "Διαγραφή…", - "edit": "Επεξεργασία…", - "embed": "Ενσωμάτωση" - }, - "title": "Κανάλι", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Αντιγράψτε και επικολλήστε τον ακόλουθο σύνδεσμο στο αγαπημένο σας podcatcher:" - } - }, - "fediverse": { - "content": { - "help": "Εάν χρησιμοποιείτε το Mastodon ή άλλες εφαρμογές του fediverse, μπορείτε να γίνετε συνδρομητές σε αυτόν το λογαριασμό:" - } - } - }, - "delete": { - "header": "Διαγραφη του καναλιού;" - }, - "embed": { - "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Προσθήκη νέου" - }, - "header": { - "albums": "Άλμπουμ" - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Προσθήκη νέου" - }, - "button": { - "cancel": "Ακύρωση" - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } σε χρήση απο τα { max } διαθέσιμα" - }, - "header": { - "currentUsage": "Τρέχουσα χρήση" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Άλμπουμ", - "artist": "Καλλιτέχνης", - "duration": "Διάρκεια" - } - } - }, - "option": { - "status": { - "all": "Όλα", - "draft": "Προσχέδιο" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "action": { - "delete": "Διαγραφή" - } - }, - "Home": { - "link": { - "createLibrary": "Δημιουργία νέας βιβλιοθήκης" - } - }, - "Form": { - "button": { - "create": "Δημιουργία βιβλιοθήκης", - "delete": "Διαγραφή", - "confirm": "Διαγραφή βιβλιοθήκης" - }, - "modal": { - "delete": { - "header": "Διαγραφή της βιβλιοθήκης;" - } - }, - "label": { - "description": "Περιγραφή" - }, - "header": { - "failure": "Σφάλμα" - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια", - "failedTracks": "Αποτυχημένα κομμάτια:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Αν σταματήσετε να ακολουθείτε την βιβλιοθήκη, θα σταματήσετε να έχετε πρόσβαση στο περιεχόμενο της." - } - } - }, - "button": { - "cancel": "Ακύρωση αιτήματος ακόλουθου", - "follow": "Ακολούθησε" - }, - "link": { - "scanDetails": "Λεπτομέρειες" - } - }, - "ScanForm": { - "header": { - "failure": "Αποτυχία λήψης της απομακρυσμένης βιβλιοθήκης" - }, - "placeholder": { - "url": "Εισάγετε σύνδεσμο βιβλιοθήκης" - } - } - }, - "Home": { - "title": "Προσθήκη και διαχείριση περιεχομένου", - "description": { - "follow": "Ακολούθησε βιβλιοθήκες από άλλους χρήστες για να αποκτήσεις πρόσβαση σε νέα μουσική. Οι δημόσιες βιβλιοθήκες μπορούν να ακολουθηθούν άμεσα, ενώ σε ιδιωτικές βιβλιοθήκες απαιτείται έγκριση από τον ιδιοκτήτη της.", - "channel": { - "1": "Εάν είσαι μουσικός ή podcaster, τα κανάλια σχεδιάστηκαν για 'σένα!" - } - }, - "header": { - "follow": "Ακολούθησε απομακρυσμένες βιβλιοθήκες" - }, - "button": { - "start": "Ξεκινήστε" - } - }, - "Base": { - "title": "Προσθήκη περιεχομένου" - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } κομμάτι | { n } κομμάτια" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "button": { - "edit": "Επεξεργασία" - } - }, - "Edit": { - "button": { - "accept": "Αποδοχή" - }, - "table": { - "action": { - "status": { - "accepted": "Αποδεκτό" - }, - "header": { - "action": "ενέργεια", - "date": "Ημερομηνία" - } - } - }, - "header": { - "followers": "Ακόλουθοι" - } - } - }, - "auth": { - "ProfileBase": { - "title": "προφίλ του { username }", - "link": { - "activity": "Δραστηριότητα" - } - }, - "PasswordReset": { - "label": { - "email": "Διεύθυνση e-mail λογαριασμού" - }, - "button": { - "requestReset": "Επαναφορά κωδικού" - }, - "link": { - "back": "Πίσω στην σύνδεση" - } - }, - "ProfileOverview": { - "link": { - "addNew": "Προσθήκη νέου" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Κανάλι καλλιτέχνη" - }, - "header": "Δημιουργία καναλιού" - } - }, - "button": { - "cancel": "Ακύρωση", - "createChannel": "Δημιουργία καναλιού" - }, - "header": { - "channels": "Κανάλια" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Πίσω στην σύνδεση" - }, - "title": "Αλλαγή κωδικού", - "message": { - "requestSent": "Εάν η διεύθυνση e-mail που δόθηκε στο προηγούμενο βήμα είναι έγκυρη και συνδεδεμένη με ένα λογαριασμό χρήστη, θα πρέπει να παραλάβετε ένα e-mail με οδηγίες επαναφοράς στα επόμενα λεπτά." - } - }, - "EmailConfirm": { - "title": "Επιβεβαίωση της διεύθυνσης e-mail σας", - "label": { - "confirmationCode": "Κωδικός επιβεβαίωσης" - }, - "header": { - "failure": "Δεν μπορέσαμε να επιβεβαιώσουμε την διεύθυνση e-mail σας", - "success": "Η διεύθυνση e-mail επιβεβαιώθηκε" - } - }, - "Signup": { - "header": { - "createAccount": "Δημιουργία Funkwhale λογαριασμού" - } - } - }, - "Notifications": { - "option": { - "delay": { - "30": "30 ημέρες", - "60": "60 ημέρες", - "90": "90 ημέρες" - } - }, - "link": { - "help": "Ανακαλύψτε άλλους τρόπους να βοηθήσετε", - "donate": "Δωρεά" - }, - "header": { - "funkwhaleSupport": "Σας αρέσει το Funkwhale;" - } - }, - "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Πρόσβαση σε αγαπημένα", - "loginStatus": { - "disabled": "Απενεργοποιημένο", - "enabled": "Ενεργό" - }, - "displayName": "Εμφανιζόμενο όνομα", - "email": "Διεύθυνση Email" - }, - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - } - }, - "header": { - "accountData": "Στοιχεία λογαριασμού", - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "addPolicy": "Προσθήκη πολιτικής συντονισμού" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια", - "domain": "Διεύθυνση" - }, - "tooltip": { - "uploadQuota": "Καθορίστε πόσο περιεχόμενο μπορεί να ανεβάσει ο χρήστης. Αφήστε το κενό για να χρησιμοποιηθεί η προκαθορισμένη τιμή." - } - }, - "Base": { - "link": { - "accounts": "Λογαριασμοί", - "domains": "Διευθύνσεις" - } - }, - "DomainsDetail": { - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "addPolicy": "Προσθήκη πολιτικής συντονισμού", - "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - } - } - }, - "DomainsList": { - "button": { - "add": "Προσθήκη" - }, - "label": { - "addDomain": "Προσθήκη διεύθυνσης", - "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" - }, - "title": "Διευθύνσεις", - "header": { - "domains": "Διευθύνσεις", - "failure": "Σφάλμα κατά τη δημιουργία διεύθυνσης" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Όλα" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Όλα", - "approved": "Eγκρίθηκε" - } - }, - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Ημερομηνία πρόσβασης" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Μέγεθος στην προσωρινή μνήμη", - "duration": "Διάρκεια" - } - }, - "link": { - "account": "Λογαριασμός", - "domain": "Διεύθυνση" - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "button": { - "delete": "Διαγραφή", - "download": "Λήψη" - }, - "modal": { - "delete": { - "header": "Διαγραφή της μεταφόρτωσης;" - } - } - }, - "LibraryDetail": { - "link": { - "account": "Λογαριασμός", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "domain": "Διεύθυνση" - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "library": { - "description": "Περιγραφή" - }, - "activity": { - "followers": "Ακόλουθοι" - } - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή της βιβλιοθήκης;" - } - } - }, - "AlbumDetail": { - "header": { - "activity": "Δραστηριότητα", - "albumData": "Στοιχεία άλμπουμ", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "artist": "Καλλιτέχνης", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "album": { - "description": "Περιγραφή" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του άλμπουμ;" - } - } - }, - "ArtistDetail": { - "header": { - "activity": "Δραστηριότητα", - "artistData": "Δεδομένα καλλιτέχνη", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "albums": "Άλμπουμ", - "category": "Κατηγορία", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "audioContent": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "artist": { - "description": "Περιγραφή" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του καλλιτέχνη;" - } - } - }, - "TagDetail": { - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου" - }, - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή της ετικέτας;" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Δραστηριότητα" - }, - "link": { - "album": "Άλμπουμ", - "albumArtist": "Καλλιτέχνης Άλμπουμ", - "artist": "Καλλιτέχνης", - "domain": "Διεύθυνση", - "edits": "Επεξεργασίες" - }, - "table": { - "trackData": { - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "track": { - "copyright": "Πνευματικά Δικαιώματα", - "description": "Περιγραφή", - "discNumber": "Αριθμός δίσκου" - }, - "activity": { - "favorited": "Αγαπημένα κομμάτια" - } - }, - "button": { - "delete": "Διαγραφή", - "edit": "Επεξεργασία" - }, - "modal": { - "delete": { - "header": "Διαγραφή του κομματιού;" - } - } - }, - "Base": { - "link": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια", - "edits": "Επεξεργασίες" - } - }, - "EditsList": { - "title": "Επεξεργασίες" - } - }, - "ChannelDetail": { - "table": { - "channelData": { - "account": "Λογαριασμός", - "category": "Κατηγορία", - "description": "Περιγραφή", - "domain": "Διεύθυνση" - }, - "audioContent": { - "albums": "Άλμπουμ", - "cachedSize": "Μέγεθος στην προσωρινή μνήμη" - }, - "activity": { - "edits": "Επεξεργασίες", - "favorited": "Αγαπημένα κομμάτια" - } - }, - "header": { - "activity": "Δραστηριότητα", - "audioContent": "Περιεχόμενο ήχου", - "channelData": "Στοιχεία καναλιού" - }, - "button": { - "delete": "Διαγραφή" - }, - "modal": { - "delete": { - "header": "Διαγραφή του καναλιού;" - } - } - }, - "CommonList": { - "title": { - "accounts": "Λογαριασμοί", - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες", - "channels": "Κανάλια" - } - }, - "Settings": { - "header": { - "channels": "Κανάλια" - } - } - }, - "Search": { - "label": { - "albums": "Άλμπουμ", - "artists": "Καλλιτέχνες" - } - }, - "playlists": { - "List": { - "ordering": { - "direction": { - "ascending": "Αύξουσα", - "descending": "Φθίνουσα" - } - }, - "header": { - "browse": "Περιήγηση στις λίστες αναπαραγωγής" - }, - "button": { - "create": "Δημιουργία λίστας αναπαραγωγής" - }, - "placeholder": { - "search": "Εισάγετε όνομα λίστας αναπαραγωγής…" - } - }, - "Detail": { - "button": { - "cancel": "Ακύρωση", - "delete": "Διαγραφή", - "confirm": "Διαγραφή λίστας αναπαραγωγής", - "edit": "Επεξεργασία", - "embed": "Ενσωμάτωση" - }, - "modal": { - "delete": { - "header": "Θέλετε να διαγράψετε την λίστα αναπαραγωγής \"{ playlist }\";" - }, - "embed": { - "header": "Ενσωμάτωση της λίστας αναπαραγωγής στην ιστοσελίδα σας" - } - } - } - }, - "radios": { - "Detail": { - "button": { - "confirm": "Διαγραφή ράδιο", - "edit": "Επεξεργασία…" - }, - "modal": { - "delete": { - "header": "Θέλετε να διαγράψετε το ράδιο \"{ radio }\";" - } - } - } } }, "composables": { @@ -2169,45 +1626,37 @@ }, "locale": { "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Πρόσβαση σε αρχεία ήχου, βιβλιοθήκες, καλλιτέχνες, άλμπουμ και κομμάτια" + "fields": { + "contentCategory": { + "label": "Κατηγορία περιεχομένου" }, - "filters": { - "description": "Πρόσβαση σε φίλτρα περιεχομένου", - "label": "Φίλτρα περιεχομένου" + "importStatus": { + "choices": { + "draft": { + "label": "Προσχέδιο" + } + }, + "label": "Κάντε κλικ για εμφανιστούν περισσότερες πληροφορίες σχετικά με την διαδικασία εισαγωγής για αυτήν την μεταφόρτωση" }, - "profile": { - "description": "Πρόσβαση σε e-mail, όνομα χρήστη και πληροφορίες προφίλ" + "privacyLevel": { + "choices": { + "instance": "Όλοι σε αυτό το instance", + "public": "Όλοι, μεταξύ όλων των instances" + }, + "help": "Καθορίστε το επίπεδο ορατότητας της δραστηριότητας σας", + "label": "Ορατότητα δραστηριότητας", + "shortChoices": { + "public": "Όλοι" + } }, - "edits": { - "description": "Πρόσβαση σε επεξεργασίες", - "label": "Επεξεργασίες" + "reportType": { + "choices": { + "illegalContent": "Παράνομο περιεχόμενο" + }, + "label": "Κατηγορία" }, - "follows": { - "description": "Πρόσβαση σε ακολούθους", - "label": "Ακολουθούν" - }, - "listenings": { - "description": "Πρόσβαση στο ιστορικό ακρόασης" - }, - "reports": { - "description": "Πρόβαση στις αναφορές" - }, - "notifications": { - "description": "Πρόσβαση στις ειδοποιήσεις" - }, - "playlists": { - "description": "Πρόσβαση στις λίστες αναπαραγωγής" - }, - "radios": { - "description": "Πρόσβαση στα ράδιο" - }, - "security": { - "description": "Πρόσβαση σε ρυθμίσεις ασφαλείας όπως κωδικός και εξουσιοδότηση" - }, - "favorites": { - "label": "Αγαπημένα" + "summary": { + "label": "Βιογραφία" } }, "filters": { @@ -2221,42 +1670,58 @@ "expirationDate": "Ημερομηνία λήξης", "followers": "Ακόλουθοι" }, - "fields": { - "privacyLevel": { - "label": "Ορατότητα δραστηριότητας", - "help": "Καθορίστε το επίπεδο ορατότητας της δραστηριότητας σας", - "shortChoices": { - "public": "Όλοι" - }, - "choices": { - "instance": "Όλοι σε αυτό το instance", - "public": "Όλοι, μεταξύ όλων των instances" - } + "scopes": { + "edits": { + "description": "Πρόσβαση σε επεξεργασίες", + "label": "Επεξεργασίες" }, - "summary": { - "label": "Βιογραφία" + "favorites": { + "label": "Αγαπημένα" }, - "reportType": { - "label": "Κατηγορία", - "choices": { - "illegalContent": "Παράνομο περιεχόμενο" - } + "filters": { + "description": "Πρόσβαση σε φίλτρα περιεχομένου", + "label": "Φίλτρα περιεχομένου" }, - "importStatus": { - "label": "Κάντε κλικ για εμφανιστούν περισσότερες πληροφορίες σχετικά με την διαδικασία εισαγωγής για αυτήν την μεταφόρτωση", - "choices": { - "draft": { - "label": "Προσχέδιο" - } - } + "follows": { + "description": "Πρόσβαση σε ακολούθους", + "label": "Ακολουθούν" }, - "contentCategory": { - "label": "Κατηγορία περιεχομένου" + "libraries": { + "description": "Πρόσβαση σε αρχεία ήχου, βιβλιοθήκες, καλλιτέχνες, άλμπουμ και κομμάτια" + }, + "listenings": { + "description": "Πρόσβαση στο ιστορικό ακρόασης" + }, + "notifications": { + "description": "Πρόσβαση στις ειδοποιήσεις" + }, + "playlists": { + "description": "Πρόσβαση στις λίστες αναπαραγωγής" + }, + "profile": { + "description": "Πρόσβαση σε e-mail, όνομα χρήστη και πληροφορίες προφίλ" + }, + "radios": { + "description": "Πρόσβαση στα ράδιο" + }, + "reports": { + "description": "Πρόβαση στις αναφορές" + }, + "security": { + "description": "Πρόσβαση σε ρυθμίσεις ασφαλείας όπως κωδικός και εξουσιοδότηση" } } } }, "moderation": { + "useEditConfigs": { + "description": { + "label": "Περιγραφή" + }, + "track": { + "copyright": "Πνευματικά Δικαιώματα" + } + }, "useReport": { "account": { "typeLabel": "Λογαριασμός" @@ -2285,22 +1750,14 @@ "channel": { "label": "Κανάλι" }, - "track": { - "copyright": "Πνευματικά Δικαιώματα" - }, "creationDate": { "label": "Ημερομηνία δημιουργίας" }, "library": { "description": "Περιγραφή" - } - }, - "useEditConfigs": { + }, "track": { "copyright": "Πνευματικά Δικαιώματα" - }, - "description": { - "label": "Περιγραφή" } } }, @@ -2312,5 +1769,697 @@ "serviceWorker": { "newAppVersion": "Μια νέα έκδοση της εφαρμογής είναι διαθέσιμη." } + }, + "views": { + "Notifications": { + "header": { + "funkwhaleSupport": "Σας αρέσει το Funkwhale;" + }, + "link": { + "donate": "Δωρεά", + "help": "Ανακαλύψτε άλλους τρόπους να βοηθήσετε" + }, + "option": { + "delay": { + "30": "30 ημέρες", + "60": "60 ημέρες", + "90": "90 ημέρες" + } + } + }, + "Search": { + "label": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + } + }, + "admin": { + "ChannelDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου", + "channelData": "Στοιχεία καναλιού" + }, + "modal": { + "delete": { + "header": "Διαγραφή του καναλιού;" + } + }, + "table": { + "activity": { + "edits": "Επεξεργασίες", + "favorited": "Αγαπημένα κομμάτια" + }, + "audioContent": { + "albums": "Άλμπουμ", + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + }, + "channelData": { + "account": "Λογαριασμός", + "category": "Κατηγορία", + "description": "Περιγραφή", + "domain": "Διεύθυνση" + } + } + }, + "CommonList": { + "title": { + "accounts": "Λογαριασμοί", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια" + } + }, + "Settings": { + "header": { + "channels": "Κανάλια" + } + }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα", + "albumData": "Στοιχεία άλμπουμ", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "artist": "Καλλιτέχνης", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του άλμπουμ;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "album": { + "description": "Περιγραφή" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "ArtistDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα", + "artistData": "Δεδομένα καλλιτέχνη", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "category": "Κατηγορία", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του καλλιτέχνη;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "artist": { + "description": "Περιγραφή" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "Base": { + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια", + "edits": "Επεξεργασίες" + } + }, + "EditsList": { + "title": "Επεξεργασίες" + }, + "LibraryDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "account": "Λογαριασμός", + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "domain": "Διεύθυνση" + }, + "modal": { + "delete": { + "header": "Διαγραφή της βιβλιοθήκης;" + } + }, + "table": { + "activity": { + "followers": "Ακόλουθοι" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + }, + "library": { + "description": "Περιγραφή" + } + } + }, + "TagDetail": { + "button": { + "delete": "Διαγραφή" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + }, + "modal": { + "delete": { + "header": "Διαγραφή της ετικέτας;" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Διαγραφή", + "edit": "Επεξεργασία" + }, + "header": { + "activity": "Δραστηριότητα" + }, + "link": { + "album": "Άλμπουμ", + "albumArtist": "Καλλιτέχνης Άλμπουμ", + "artist": "Καλλιτέχνης", + "domain": "Διεύθυνση", + "edits": "Επεξεργασίες" + }, + "modal": { + "delete": { + "header": "Διαγραφή του κομματιού;" + } + }, + "table": { + "activity": { + "favorited": "Αγαπημένα κομμάτια" + }, + "track": { + "copyright": "Πνευματικά Δικαιώματα", + "description": "Περιγραφή", + "discNumber": "Αριθμός δίσκου" + }, + "trackData": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "UploadDetail": { + "button": { + "delete": "Διαγραφή", + "download": "Λήψη" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "account": "Λογαριασμός", + "domain": "Διεύθυνση" + }, + "modal": { + "delete": { + "header": "Διαγραφή της μεταφόρτωσης;" + } + }, + "table": { + "activity": { + "accessedDate": "Ημερομηνία πρόσβασης" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate" + }, + "cachedSize": "Μέγεθος στην προσωρινή μνήμη", + "duration": "Διάρκεια" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Προσθήκη πολιτικής συντονισμού" + }, + "header": { + "accountData": "Στοιχεία λογαριασμού", + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια", + "domain": "Διεύθυνση" + }, + "table": { + "accountData": { + "displayName": "Εμφανιζόμενο όνομα", + "email": "Διεύθυνση Email", + "loginStatus": { + "disabled": "Απενεργοποιημένο", + "enabled": "Ενεργό" + }, + "username": "Πρόσβαση σε αγαπημένα" + }, + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + }, + "tooltip": { + "uploadQuota": "Καθορίστε πόσο περιεχόμενο μπορεί να ανεβάσει ο χρήστης. Αφήστε το κενό για να χρησιμοποιηθεί η προκαθορισμένη τιμή." + } + }, + "Base": { + "link": { + "accounts": "Λογαριασμοί", + "domains": "Διευθύνσεις" + } + }, + "DomainsDetail": { + "button": { + "addPolicy": "Προσθήκη πολιτικής συντονισμού", + "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" + }, + "header": { + "activity": "Δραστηριότητα", + "audioContent": "Περιεχόμενο ήχου" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες", + "channels": "Κανάλια" + }, + "table": { + "audioContent": { + "cachedSize": "Μέγεθος στην προσωρινή μνήμη" + } + } + }, + "DomainsList": { + "button": { + "add": "Προσθήκη" + }, + "header": { + "domains": "Διευθύνσεις", + "failure": "Σφάλμα κατά τη δημιουργία διεύθυνσης" + }, + "label": { + "addDomain": "Προσθήκη διεύθυνσης", + "addToAllowList": "Προσθήκη στην λίστα επιτρεπομένων" + }, + "title": "Διευθύνσεις" + }, + "ReportsList": { + "option": { + "status": { + "all": "Όλα" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + }, + "RequestsList": { + "option": { + "status": { + "all": "Όλα", + "approved": "Eγκρίθηκε" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + } + } + } + }, + "auth": { + "EmailConfirm": { + "header": { + "failure": "Δεν μπορέσαμε να επιβεβαιώσουμε την διεύθυνση e-mail σας", + "success": "Η διεύθυνση e-mail επιβεβαιώθηκε" + }, + "label": { + "confirmationCode": "Κωδικός επιβεβαίωσης" + }, + "title": "Επιβεβαίωση της διεύθυνσης e-mail σας" + }, + "PasswordReset": { + "button": { + "requestReset": "Επαναφορά κωδικού" + }, + "label": { + "email": "Διεύθυνση e-mail λογαριασμού" + }, + "link": { + "back": "Πίσω στην σύνδεση" + } + }, + "PasswordResetConfirm": { + "link": { + "back": "Πίσω στην σύνδεση" + }, + "message": { + "requestSent": "Εάν η διεύθυνση e-mail που δόθηκε στο προηγούμενο βήμα είναι έγκυρη και συνδεδεμένη με ένα λογαριασμό χρήστη, θα πρέπει να παραλάβετε ένα e-mail με οδηγίες επαναφοράς στα επόμενα λεπτά." + }, + "title": "Αλλαγή κωδικού" + }, + "ProfileBase": { + "link": { + "activity": "Δραστηριότητα" + }, + "title": "προφίλ του { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Ακύρωση", + "createChannel": "Δημιουργία καναλιού" + }, + "header": { + "channels": "Κανάλια" + }, + "link": { + "addNew": "Προσθήκη νέου" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Κανάλι καλλιτέχνη" + }, + "header": "Δημιουργία καναλιού" + } + } + }, + "Signup": { + "header": { + "createAccount": "Δημιουργία Funkwhale λογαριασμού" + } + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή", + "delete": "Διαγραφή…", + "edit": "Επεξεργασία…", + "embed": "Ενσωμάτωση" + }, + "header": { + "artistChannel": "Κανάλι καλλιτέχνη" + }, + "link": { + "channelEpisodes": "Όλα τα Επεισόδια" + }, + "meta": { + "episodes": "{ n } επεισόδιο | { n } επεισόδια", + "listenings": "{ n } ακρόαση | { n } ακροάσεις", + "subscribers": "{ n } εγγεγραμμένος | { n } εγγεγραμμένοι", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + }, + "modal": { + "delete": { + "header": "Διαγραφη του καναλιού;" + }, + "embed": { + "header": "Ενσωμάτωση του καλλιτέχνη στην ιστοσελίδα σας" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Εάν χρησιμοποιείτε το Mastodon ή άλλες εφαρμογές του fediverse, μπορείτε να γίνετε συνδρομητές σε αυτόν το λογαριασμό:" + } + }, + "rss": { + "content": { + "help": "Αντιγράψτε και επικολλήστε τον ακόλουθο σύνδεσμο στο αγαπημένο σας podcatcher:" + } + } + } + }, + "title": "Κανάλι" + }, + "DetailOverview": { + "header": { + "albums": "Άλμπουμ" + }, + "link": { + "addAlbum": "Προσθήκη νέου" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ακύρωση" + }, + "link": { + "addNew": "Προσθήκη νέου" + } + } + }, + "content": { + "Base": { + "title": "Προσθήκη περιεχομένου" + }, + "Home": { + "button": { + "start": "Ξεκινήστε" + }, + "description": { + "channel": { + "1": "Εάν είσαι μουσικός ή podcaster, τα κανάλια σχεδιάστηκαν για 'σένα!" + }, + "follow": "Ακολούθησε βιβλιοθήκες από άλλους χρήστες για να αποκτήσεις πρόσβαση σε νέα μουσική. Οι δημόσιες βιβλιοθήκες μπορούν να ακολουθηθούν άμεσα, ενώ σε ιδιωτικές βιβλιοθήκες απαιτείται έγκριση από τον ιδιοκτήτη της." + }, + "header": { + "follow": "Ακολούθησε απομακρυσμένες βιβλιοθήκες" + }, + "title": "Προσθήκη και διαχείριση περιεχομένου" + }, + "libraries": { + "Card": { + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + }, + "FilesTable": { + "action": { + "delete": "Διαγραφή" + }, + "option": { + "status": { + "all": "Όλα", + "draft": "Προσχέδιο" + } + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "table": { + "file": { + "header": { + "album": "Άλμπουμ", + "artist": "Καλλιτέχνης", + "duration": "Διάρκεια" + } + } + } + }, + "Form": { + "button": { + "confirm": "Διαγραφή βιβλιοθήκης", + "create": "Δημιουργία βιβλιοθήκης", + "delete": "Διαγραφή" + }, + "header": { + "failure": "Σφάλμα" + }, + "label": { + "description": "Περιγραφή" + }, + "modal": { + "delete": { + "header": "Διαγραφή της βιβλιοθήκης;" + } + } + }, + "Home": { + "link": { + "createLibrary": "Δημιουργία νέας βιβλιοθήκης" + } + }, + "Quota": { + "header": { + "currentUsage": "Τρέχουσα χρήση" + }, + "label": { + "currentUsage": "{ current } σε χρήση απο τα { max } διαθέσιμα" + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Ακύρωση αιτήματος ακόλουθου", + "follow": "Ακολούθησε" + }, + "link": { + "scanDetails": "Λεπτομέρειες" + }, + "meta": { + "failedTracks": "Αποτυχημένα κομμάτια:", + "tracks": "{ n } κομμάτι | { n } κομμάτια" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Αν σταματήσετε να ακολουθείτε την βιβλιοθήκη, θα σταματήσετε να έχετε πρόσβαση στο περιεχόμενο της." + } + } + } + }, + "ScanForm": { + "header": { + "failure": "Αποτυχία λήψης της απομακρυσμένης βιβλιοθήκης" + }, + "placeholder": { + "url": "Εισάγετε σύνδεσμο βιβλιοθήκης" + } + } + } + }, + "library": { + "Edit": { + "button": { + "accept": "Αποδοχή" + }, + "header": { + "followers": "Ακόλουθοι" + }, + "table": { + "action": { + "header": { + "action": "ενέργεια", + "date": "Ημερομηνία" + }, + "status": { + "accepted": "Αποδεκτό" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Επεξεργασία" + }, + "link": { + "albums": "Άλμπουμ", + "artists": "Καλλιτέχνες" + }, + "meta": { + "tracks": "{ n } κομμάτι | { n } κομμάτια" + } + } + }, + "playlists": { + "Detail": { + "button": { + "cancel": "Ακύρωση", + "confirm": "Διαγραφή λίστας αναπαραγωγής", + "delete": "Διαγραφή", + "edit": "Επεξεργασία", + "embed": "Ενσωμάτωση" + }, + "modal": { + "delete": { + "header": "Θέλετε να διαγράψετε την λίστα αναπαραγωγής \"{ playlist }\";" + }, + "embed": { + "header": "Ενσωμάτωση της λίστας αναπαραγωγής στην ιστοσελίδα σας" + } + } + }, + "List": { + "button": { + "create": "Δημιουργία λίστας αναπαραγωγής" + }, + "header": { + "browse": "Περιήγηση στις λίστες αναπαραγωγής" + }, + "ordering": { + "direction": { + "ascending": "Αύξουσα", + "descending": "Φθίνουσα" + } + }, + "placeholder": { + "search": "Εισάγετε όνομα λίστας αναπαραγωγής…" + } + } + }, + "radios": { + "Detail": { + "button": { + "confirm": "Διαγραφή ράδιο", + "edit": "Επεξεργασία…" + }, + "modal": { + "delete": { + "header": "Θέλετε να διαγράψετε το ράδιο \"{ radio }\";" + } + } + } + }, + "ChooseInstance": { + "button": { + "submit": "Υποβολή" + }, + "header": { + "chooseInstance": "Επιλέξτε το instance σας", + "failure": "Δεν είναι δυνατή η σύνδεση στο συγκεκριμένο URL" + } + } } } diff --git a/front/src/locales/en_GB.json b/front/src/locales/en_GB.json index 813562fb0..b2f82ab54 100644 --- a/front/src/locales/en_GB.json +++ b/front/src/locales/en_GB.json @@ -1,1459 +1,66 @@ { + "App": { + "loading": "Loading…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{app_name} wants to access your Funkwhale account", - "authorize": "Authorise third-party app", - "authorizeFailure": "Error while fetching application data", - "fetchFailure": "Error while fetching application data", - "allScopes": "Full access", - "readOnly": "Read-only", - "writeOnly": "Write-only" - }, - "title": "Allow application", - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "pasteCode": "Copy-paste the following code in the application:", - "redirect": "You will be redirected to { 0 }", - "copyCode": "You will be shown a code to copy-paste in the application" - }, - "message": { - "unknownPermissions": "The application is also requesting the following unknown permissions:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Access disabled", - "passwordUpdated": "Password updated", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "button": { - "confirmDisable": "Disable access", - "disable": "Disable Subsonic access", - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password" - }, - "modal": { - "disableSubsonic": { - "header": "Disable Subsonic API access?", - "content": { - "warning": "This will completely disable access to the Subsonic API using from account." - } - }, - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - } - }, - "link": { - "apps": "Discover how to use Funkwhale from other apps" - }, - "header": { - "error": "Error", - "subsonic": "Subsonic API password" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", - "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below.", - "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance." - } - }, - "label": { - "subsonicField": "Your subsonic API password" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Access token", - "appId": "Application ID", - "appSecret": "Application secret" - }, - "header": { - "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "help": { - "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." - }, - "link": { - "settings": "Back to settings" - }, - "title": "Edit application", - "button": { - "regenerateToken": "Regenerate token" - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." - } - }, - "Settings": { - "title": "Account Settings", - "header": { - "accountSettings": "Account settings", - "authorizedApps": "Authorised apps", - "avatar": "Avatar", - "changeEmail": "Change my e-mail address", - "changePassword": "Change my password", - "contentFilters": "Content filters", - "deleteAccount": "Delete my account", - "hiddenArtists": "Hidden artists", - "plugins": "Plugins", - "settingsUpdated": "Settings updated", - "emailFailure": "We cannot change your e-mail address", - "accountFailure": "We cannot delete your account", - "noApps": "You don't have any application connected with your account.", - "noPersonalApps": "You don't have registered any application yet.", - "yourApps": "Your applications", - "avatarFailure": "Your avatar cannot be saved", - "passwordFailure": "Your password cannot be changed", - "updateFailure": "Your settings can't be updated" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Application", - "permissions": "Permissions" - } - }, - "yourApps": { - "header": { - "application": "Application", - "creationDate": "Creation date", - "scopes": "Scopes" - } - }, - "artists": { - "header": { - "creationDate": "Creation date", - "name": "Name" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Current password", - "newEmail": "New e-mail address", - "newPassword": "New password", - "password": "Password" - }, - "button": { - "password": "Change password", - "delete": "Delete", - "deleteAccountConfirm": "Delete my account", - "deleteAccount": "Delete my account…", - "disableSubsonic": "Disable access", - "edit": "Edit", - "refresh": "Refresh", - "remove": "Remove", - "removeApp": "Remove application", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "update": "Update", - "updateSettings": "Update settings" - }, - "description": { - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "changePassword": { - "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", - "paragraph2": "You will have to update your password on your clients that use this password." - }, - "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", - "plugins": "Use plugins to extend Funkwhale and get additional features.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." - }, - "modal": { - "changePassword": { - "header": "Change your password?", - "content": { - "warning": "Changing your password will have the following consequences", - "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "deleteAccount": { - "header": "Do you want to delete your account?", - "content": { - "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - } - }, - "help": { - "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", - "changePassword": "Please double-check your password is correct", - "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." - }, - "link": { - "managePlugins": "Manage plugins", - "newApp": "Register a new application" - }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "message": { - "currentEmail": "Your current e-mail address is {email}", - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly" - } - }, - "Logout": { - "header": { - "confirm": "Are you sure you want to log out?", - "unauthenticated": "You aren't currently logged in" - }, - "link": { - "login": "Log in!" - }, - "title": "Log out", - "button": { - "logout": "Yes, log me out!" - }, - "message": { - "loggedIn": "You are currently logged in as {username}" - } - }, - "ApplicationNew": { - "link": { - "settings": "Back to settings" - }, - "title": "Create a new application" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", - "read": { - "label": "Read", - "description": "Read-only access to user data" - }, - "write": { - "label": "Write", - "description": "Write-only access to user data" - }, - "label": "Scopes" - }, - "name": "Name", - "redirectUri": "Redirect URI" - }, - "button": { - "create": "Create application", - "update": "Update application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." - }, - "header": { - "failure": "We cannot save your changes" - } - }, - "LoginForm": { - "link": { - "createAccount": "Create an account", - "resetPassword": "Reset your password" - }, - "placeholder": { - "username": "Enter your username or e-mail address" - }, - "help": { - "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", - "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." - }, - "button": { - "login": "Login" - }, - "label": { - "password": "Password", - "username": "Username or e-mail address" - }, - "header": { - "loginFailure": "We cannot log you in" - }, - "message": { - "redirect": "You will be redirected to {domain} to authenticate" - } - }, - "SignupForm": { - "button": { - "create": "Create my account" - }, - "label": { - "email": "E-mail address", - "password": "Password", - "username": "Username", - "invitation": "Invitation code" - }, - "placeholder": { - "email": "Enter your e-mail address", - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username" - }, - "header": { - "login": "Log in to your Funkwhale account", - "signupFailure": "Your account cannot be created." - }, - "message": { - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval.", - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentation" - }, - "label": { - "pluginEnabled": "Enabled", - "library": "Library" - }, - "header": { - "failure": "Error while saving plugin" - }, - "description": { - "library": "Library where files should be imported." - }, - "button": { - "save": "Save", - "scan": "Scan" - } - } - }, "About": { - "stat": { - "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + "description": { + "findApp": "Use Funkwhale on other devices with our apps.", + "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "publicContent": "Listen to public albums and playlists shared on this pod.", + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!" }, "header": { - "funkwhale": "A social platform to enjoy and share music", "aboutPod": "About this pod", - "publicContent": "Browse public content", "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", "signup": "Sign up" }, - "title": "About", + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, "link": { "findOtherPod": "Find another pod", "learnMore": "Learn more" }, - "description": { - "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralised, open network.", - "publicContent": "Listen to public albums and playlists shared on this pod.", - "signup": "Sign up now to keep a track of your favourites, create playlists, discover new content and much more!", - "findApp": "Use Funkwhale on other devices with our apps.", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" + "message": { + "greeting": "Hello {username}", + "loggedIn": "You're already signed in!" }, "placeholder": { "noDescription": "No description available" }, - "message": { - "loggedIn": "You're already signed in!", - "greeting": "Hello {username}" - }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "Home": { "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "header": { - "aboutFunkwhale": "About Funkwhale", - "about": "About this Funkwhale pod", - "contact": "Contact", - "login": "Log in", - "newChannels": "New channels", - "newAlbums": "Recently added albums", - "signup": "Sign up", - "statistics": "Statistics", - "links": "Useful links", - "welcome": "Welcome to {podName}!" - }, - "link": { - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "userGuides": { - "description": "Discover everything you need to know about Funkwhale and its features", - "label": "User guides" - }, - "findOtherPod": "Find another pod", - "learnMore": "Learn more", - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "rules": "Server rules", - "viewMore": "View more…", - "funkwhale": "Visit funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers.", - "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network." - }, - "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!" - }, - "title": "Home", - "placeholder": { - "noDescription": "No description available" - }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks" - }, - "title": "Updated on {date}" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - } - }, - "Widget": { - "button": { - "more": "Show more" - } - } - }, - "Player": { - "meta": { - "position": "{index} of {length}" - }, - "header": { - "player": "Audio player and controls" - }, - "label": { - "clearQueue": "Clear your queue", - "expandQueue": "Expand queue", - "addArtistContentFilter": "Hide content from this artist…", - "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", - "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", - "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", - "audioPlayer": "Media player", - "mute": "Mute", - "nextTrack": "Next track", - "pause": "Pause", - "play": "Play", - "previousTrack": "Previous track", - "shuffleQueue": "Shuffle your queue", - "unmute": "Unmute" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Add to current queue", - "addToPlaylist": "Add to playlist", - "episodeDetails": "Episode details", - "hideArtist": "Hide content from this artist", - "discretePlay": "Play", - "playAlbum": "Play album", - "playArtist": "Play artist", - "playNext": "Play next", - "playNow": "Play now", - "playPlaylist": "Play playlist", - "startRadio": "Play similar songs", - "playTrack": "Play track", - "playTracks": "Play tracks", - "report": "Report…", - "trackDetails": "Track details" - }, - "title": { - "more": "More…", - "unavailable": "This track is not available in any library you have access to" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Add to favourites", - "addToPlaylist": "Add to playlist", - "addToQueue": "Add to queue", - "episodeDetails": "Episode details", - "playNext": "Play next", - "playNow": "Play now", - "startRadio": "Play radio", - "removeFromFavorites": "Remove from favourites", - "trackDetails": "Track details", - "albumDetails": "View album", - "artistDetails": "View artist", - "channelDetails": "View channel", - "seriesDetails": "View series" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artist", - "title": "Title" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nothing found" - }, - "button": { - "more": "Show more" - } - }, - "MobileRow": { - "button": { - "actions": "Show track actions" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Adjust volume" - }, - "button": { - "mute": "Mute", - "unmute": "Unmute" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artist", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - }, - "search": "Search for content", - "tag": "Tag", - "track": "Track" - }, - "link": { - "more": "More results 🡒", - "fediverse": "Search on the fediverse", - "rss": "Subscribe to podcast via RSS" - }, - "header": { - "noResults": "No matches found" - }, - "placeholder": { - "search": "Search for artists, albums, tracks…" - }, - "empty": { - "noResults": "Sorry, there are no results for this search" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artists", - "search": "Search for some music" - }, - "placeholder": { - "search": "Artist, album, track…" - }, - "empty": { - "noAlbums": "No album matched your query", - "noArtists": "No artist matched your query" - } - }, - "ChannelForm": { - "label": { - "discography": "Artist Discography", - "category": "Category", - "image": "Channel Picture", - "description": "Description", - "username": "Fediverse handle", - "language": "Language", - "name": "Name", - "email": "Owner e-mail address", - "owner": "Owner name", - "podcast": "Podcasts", - "subcategory": "Subcategory", - "tags": "Tags" - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, - "header": { - "error": "Error while saving channel." - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." - }, - "loader": { - "loading": "Loading" - }, - "legend": { - "purpose": "What will this channel be used for?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "unfollow": "Unfollow" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copy" - }, - "help": { - "embed": "Copy/paste this code in your website HTML", - "width": "Leave empty for a responsive widget", - "anonymous": "Please contact your admins and ask them to update the corresponding setting." - }, - "label": { - "embed": "Embed code", - "height": "Widget height", - "width": "Widget width" - }, - "header": { - "preview": "Preview" - }, - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." - }, - "message": { - "copy": "Text copied to clipboard!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Show more" - }, - "help": { - "subscribe": "You may need to subscribe to this channel to see its contents." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Show more" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "You may need to subscribe to this channel to see its content." - } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "addDescription": "Add a description…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } track in | { n } tracks in", - "albums": "{ n } album | { n } albums" - }, - "title": "Artist", - "button": { - "cancel": "Cancel", - "edit": "Edit", - "embed": "Embed", - "more": "More…", - "play": "Play all albums" - }, - "modal": { - "embed": { - "header": "Embed this artist work on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } track matching combined filters | { n } tracks matching combined filters", - "builder": "Builder", - "created": "Radio created", - "updated": "Radio updated" - }, - "table": { - "filter": { - "header": { - "actions": "Actions", - "candidates": "Candidates", - "config": "Config", - "exclude": "Exclude", - "name": "Filter name" - } - } - }, - "button": { - "filter": "Add filter", - "save": "Save" - }, - "label": { - "filter": "Add filters to customise your radio", - "description": "Description", - "public": "Display publicly", - "name": "Radio name" - }, - "placeholder": { - "description": "My awesome description", - "name": "My awesome radio" - }, - "title": "Radio Builder", - "option": { - "filter": "Select a filter" - }, - "description": { - "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." - } - }, - "Filter": { - "cancelButton": "Cancel", - "excludeLabel": "Exclude", - "removeButton": "Remove", - "matchingTracksModalHeader": "Tracks matching filter" - } - }, - "FileUpload": { - "tooltip": { - "network": "A network error occurred while uploading this file", - "size": "Cannot upload this file, ensure it is not too big", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are { extensions }", - "retry": "Retry", - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "timeout": "Upload timeout, please try again" - }, - "table": { - "upload": { - "header": { - "actions": "Actions", - "filename": "Filename", - "size": "Size", - "status": "Status" - }, - "status": { - "pending": "Pending", - "uploaded": "Uploaded", - "uploading": "Uploading…" - } - } - }, - "button": { - "cancel": "Cancel", - "retry": "Retry failed uploads" - }, - "label": { - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "remainingSpace": "Remaining storage space", - "extensions": "Supported extensions: { extensions }" - }, - "header": { - "failure": "Error while launching import", - "server": "Import status", - "status": "Import status", - "local": "Upload music from your local storage" - }, - "link": { - "processing": "Processing", - "uploading": "Uploading", - "picard": "We recommend using Picard for that purpose." - }, - "description": { - "import": "Results of your import:", - "previousImport": "Results of your previous import:" - }, - "message": { - "local": { - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", - "tag": "The music files you are uploading are tagged properly.", - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "A short summary describing your changes." - }, - "button": { - "cancel": "Cancel", - "clear": "Clear", - "reset": "Reset to initial value", - "showUnreviewed": "Restrict to unreviewed edits", - "showAll": "Show all edits", - "submit": "Submit and apply edit", - "new": "Submit another edit", - "suggest": "Submit suggestion" - }, - "header": { - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Recent edits awaiting review", - "success": "Your edit was successfully submitted." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suggest a change using the form below." - }, - "label": { - "summary": "Summary (optional)" - }, - "message": { - "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." - } - }, - "Albums": { - "link": { - "addMusic": "Add some music" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing albums" - }, - "placeholder": { - "search": "Enter album title…" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search", - "tags": "Tags" - }, - "button": { - "search": "Search" - } - }, - "Artists": { - "button": { - "upload": "Add some music", - "search": "Search" - }, - "label": { - "search": "Artist name", - "excludeCompilation": "Exclude Compilation Artists", - "tags": "Tags" - }, - "title": "Artists", - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing artists" - }, - "empty": { - "noResults": "No results matching your query" - }, - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Search…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artist", - "copyright": "Copyright", - "license": "License", - "series": "Series", - "url": "URL", - "year": "Year" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Downloads", - "duration": "Duration", - "size": "Size" - } - }, - "header": { - "episode": "Episode Details", - "library": "Related Libraries", - "playlists": "Related Playlists", - "release": "Release Details", - "track": "Track Details" - }, - "notApplicable": "N/A", - "description": { - "library": "This track is present in the following libraries:" - }, - "link": { - "musicbrainz": "View on MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface" - }, - "header": { - "channels": "Channels", - "tracks": "Tracks" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" - }, - "button": { - "more": "Load more…", - "filter": "Remove filter" - }, - "link": { - "filter": "Review my filters" - }, - "description": { - "library": "This artist is present in the following libraries:" - }, - "message": { - "filter": "You are currently hiding content related to this artist." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "An error occurred during upload processing. You will find more information below.", - "unknownError": { - "message": "An unknown error occurred", - "label": "Unknown error" - }, - "invalidMetadata": { - "label": "Invalid metadata", - "message": "The metadata included in the file is invalid or some mandatory fields are missing." - } - }, - "button": { - "close": "Close" - }, - "table": { - "error": { - "debug": "Debug information", - "errorDetail": "Error detail", - "errorType": "Error type", - "help": "Getting help" - } - }, - "header": { - "importDetail": "Import detail" - }, - "link": { - "support": "Open a support thread (include the debug information below in your message)", - "documentation": "Read our documentation for this error" - }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - } - }, - "EditCard": { - "button": { - "approve": "Approve", - "delete": "Delete", - "reject": "Reject" - }, - "status": { - "approved": "Approved", - "applied": "Approved and applied", - "pending": "Pending review", - "rejected": "Rejected" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Field", - "newValue": "New value", - "oldValue": "Old value" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Modification { id }" - }, - "link": { - "track": "Track #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing podcasts" - }, - "button": { - "cancel": "Cancel", - "channel": "Create a Channel", - "search": "Search", - "subscribe": "Subscribe", - "feed": "Subscribe to feed" - }, - "empty": { - "noResults": "No results matching your query" - }, - "label": { - "search": "Podcast title", - "tags": "Tags" - }, - "title": "Podcasts", - "pagination": { - "results": "Results per page" - }, - "placeholder": { - "search": "Search…" - }, - "modal": { - "subscription": { - "header": "Subscription" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "header": { - "browse": "Browsing radios", - "instance": "Instance radios", - "user": "User radios" - }, - "button": { - "add": "Create a radio", - "create": "Create your own radio" - }, - "placeholder": { - "search": "Enter a radio name…" - }, - "empty": { - "noResults": "No results matching your query" - }, - "title": "Radios", - "pagination": { - "results": "Results per page" - }, - "label": { - "search": "Search" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancel", - "delete": "Delete…", - "edit": "Edit", - "embed": "Embed", - "more": "More…" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this album on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "django": "View in Django's admin", - "domain": "View on { domain }", - "musicbrainz": "View on MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancel", - "delete": "Delete…", - "download": "Download", - "edit": "Edit", - "embed": "Embed", - "more": "More…", - "play": "Play" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this track on your website" - } - }, - "link": { - "moderation": "Open in moderation interface", - "discogs": "Search on Discogs", - "wikipedia": "Search on Wikipedia", - "django": "View in Django's admin", - "domain": "View on { domain }" - }, - "title": "Track" - }, - "AlbumEdit": { - "header": { - "edit": "Edit this album", - "suggest": "Suggest an edit on this album" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edit this artist", - "suggest": "Suggest an edit on this artist" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "TrackEdit": { - "header": { - "edit": "Edit this track", - "suggest": "Suggest an edit on this track" - }, - "message": { - "remote": "This object is managed by another server, you cannot edit it." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, - "description": { - "libraries": "This album is present in the following libraries:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Import hasn't started yet" - } - }, - "Home": { - "title": "Library", - "header": { - "newChannels": "New channels", - "playlists": "Playlists", - "recentlyAdded": "Recently added", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" - } - }, - "TagSelector": { - "placeholder": { - "search": "Search…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favourite | { n } favourites" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "link": { - "library": "Browse the library" - }, - "loader": { - "loading": "Loading your favourites…" - }, - "empty": { - "noFavorites": "No tracks have been added to your favourites yet" - }, - "pagination": { - "results": "Results per page" - }, - "title": "Your Favourites" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Add to favourites", - "remove": "Remove from favourites" - }, - "label": { - "inFavorites": "In favourites" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "no files | {n} file | {n} files", - "quota": "Remaining storage space: {space}" - }, - "button": { - "cancel": "Cancel", - "close": "Close", - "finishLater": "Finish later", - "next": "Next step", - "previous": "Previous step", - "publish": "Publish", - "update": "Update" - }, - "header": { - "uploadFiles": "Files to upload", - "processing": "Processing uploads", - "publish": "Publish audio", - "uploadDetails": "Upload details" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, - "label": { - "album": "Album", - "series": "Series" - }, - "option": { - "none": "None" - } - }, - "LicenseSelect": { - "link": { - "license": "About this licence" - }, - "label": { - "license": "Licence" - }, - "option": { - "none": "None" - } - }, - "UploadForm": { - "help": { - "license": "Add a licence to your upload to ensure some freedoms to your public." - }, - "label": { - "openBrowser": "Browse…", - "channel": "Channel" - }, - "message": { - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", - "pending": "You have some draft uploads pending publication." - }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "remove": "Remove", - "resume": "Resume", - "retry": "Retry" - }, - "header": { - "error": "Error while publishing" - }, - "status": { - "errored": "Errored", - "pending": "Pending", - "uploading": "Uploading" - }, - "description": { - "extensions": "Supported extensions {extensions}" - }, - "warning": { - "quota": "You don't have any space left to upload your files. Please contact the moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancel", - "create": "Create" - }, - "header": { - "newAlbum": "New album", - "newSeries": "New series" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Description", - "position": "Position", - "tags": "Tags", - "title": "Title", - "image": "Track Picture" - } - }, - "AlbumForm": { - "header": { - "error": "Error while creating" - }, - "label": { - "albumTitle": "Title" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribe", - "unsubscribe": "Unsubscribe" - }, - "help": { - "auth": "You need to be logged in to subscribe to this channel" - } - } + "title": "About" }, "AboutPod": { - "stat": { - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "activeUsers": "No active users | {n} active user | {n} active users", - "albumsCount": "0 albums | {n} album | {n} albums", - "artistsCount": "0 artists | {n} artist | {n} artists", - "listeningsCount": "0 listenings | {n} listening | {n} listenings", - "tracksCount": "0 tracks | {n} track | {n} tracks" + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, + "header": { + "about": "About this pod", + "contact": "Contact", + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, - "title": "About", "link": { "about": "About this pod", "features": "Features", @@ -1462,27 +69,8 @@ "statistics": "Statistics", "terms": "Terms and privacy policy" }, - "header": { - "about": "About this pod", - "contact": "Contact", - "features": "Features", - "rules": "Rules", - "statistics": "Statistics", - "terms": "Terms and privacy policy" - }, - "feature": { - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "status": { - "closed": "Closed", - "disabled": "Disabled", - "enabled": "Enabled", - "open": "Open" - }, - "federation": "Federation", - "version": "Funkwhale version", - "registrations": "Registrations", - "quota": "Upload quota" + "message": { + "contact": "Send us an email: { contactEmail }" }, "notApplicable": "N/A", "placeholder": { @@ -1490,332 +78,210 @@ "noRules": "No rules available", "noTerms": "No terms available" }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "albumsCount": "0 albums | {n} album | {n} albums", + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralised, open network.", + "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep track of your favourites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View more…" + }, + "placeholder": { + "noDescription": "No description available" + }, + "stat": { + "activeUsers": "No active users | {n} active user | {n} active users", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" + }, + "title": "Home" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Page not found!" + }, + "link": { + "home": "Go to home page" + }, "message": { - "contact": "Send us an email: { contactEmail }" + "pageNotFound": "Sorry, the page you asked for does not exist:" + }, + "title": "Page not found" + }, + "Queue": { + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" + }, + "header": { + "failure": "The track cannot be loaded", + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favourite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio track…", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualiser" + }, + "message": { + "automaticPlay": "The next track will play automatically in a few seconds…", + "radio": "New tracks will be appended here automatically.", + "webglUnsupported": "Your browser doesn't appear to support WebGL2." + }, + "meta": { + "end": "End", + "queuePosition": "Track {index} of {length}", + "startTime": "00:00", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } on {total} selected", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", - "go": "Go", - "launch": "Launch", - "refresh": "Refresh table content", - "select": "Select", - "selectAll": "Select all items", - "selectElement": "Select one element | Select all { n } elements", - "selectCurrentPage": "Select only current page" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" + }, + "header": { + "fetchFailed": "Error while fetching object" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" }, - "message": { - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements", - "needsRefresh": "Content has been updated, click refresh to see up-to-date content" - }, - "label": { - "actions": "Actions", - "performAction": "Perform actions" - }, - "modal": { - "performAction": { - "header": "Do you want to launch { action } on { n } element? | Do you want to launch { action } on { n } elements?", - "content": { - "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } - } - }, - "header": { - "error": "Error while applying action" + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "About", - "chat": "Chat room", - "docs": "Documentation", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - } - }, - "UserModal": { - "link": { - "about": "About", - "chat": "Chat room", - "forum": "Forum", - "support": "Help", - "git": "Issue tracker", - "login": "Log in", - "logout": "Log out", - "notifications": "Notifications", - "profile": "Profile", - "settings": "Settings", - "signup": "Sign up" - }, - "label": { - "shortcuts": "Keyboard shortcuts", - "language": "Language", - "theme": "Theme" - }, - "header": { - "options": "Options" - }, - "button": { - "switchInstance": "Use another instance" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancel", - "confirm": "Confirm" - }, - "header": { - "confirm": "Do you want to confirm this action?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancel", - "edit": "Edit", - "less": "Show less", - "more": "Show more", - "update": "Update description" - }, - "header": { - "failure": "Error while updating description" - }, - "empty": { - "noDescription": "No description available" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Clear" - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Collapse", - "expand": "Expand" - } - }, - "CopyInput": { - "button": { - "copy": "Copy" - }, - "message": { - "success": "Text copied to clipboard!" - } - }, - "LoginModal": { - "link": { - "login": "Log in", - "signup": "Sign up" - }, - "header": { - "unauthenticated": "Unauthenticated" - }, - "description": { - "noAccess": "You don't have access!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown syntax is supported." - }, - "empty": { - "noContent": "Nothing to preview." - }, - "button": { - "preview": "Preview", - "write": "Write" - }, - "placeholder": { - "input": "Write a few words here…" - } - }, - "EmptyState": { - "header": { - "noResults": "No results were found." - }, - "button": { - "refresh": "Refresh" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." - }, - "button": { - "remove": "Remove" - }, - "label": { - "upload": "Upload New Picture…" - }, - "loader": { - "uploading": "Uploading file…" - }, - "header": { - "failure": "Your attachment cannot be saved" - } - }, - "ExpandableDiv": { - "button": { - "less": "Show less", - "more": "Show more" - } + "warning": { + "unsupported": "This kind of object isn't supported yet" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - } + "ShortcutsModal": { + "button": { + "close": "Close" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } is already in { 1 }." - }, - "button": { - "addDuplicate": "Add anyway", - "addToPlaylist": "Add to this playlist", - "addTrack": "Add track", - "cancel": "Cancel", - "edit": "Edit" - }, - "header": { - "addToPlaylist": "Add to playlist", - "available": "Available playlists", - "manage": "Manage playlists", - "noResults": "No results matching your filter", - "addFailure": "The track can't be added to a playlist" - }, - "table": { - "edit": { - "header": { - "edit": "Edit", - "lastModification": "Last modification", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" - } + "header": { + "modal": "Keyboard shortcuts" }, - "Editor": { - "button": { - "addDuplicate": "Add anyway", - "clear": "Clear playlist", - "copy": "Copy the current queue to this playlist", - "insertFromQueue": "Insert from queue ({ n } track) | Insert from queue ({ n } tracks)" + "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favourite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" }, - "error": { - "sync": "An error occurred while saving your changes" - }, - "message": { - "sync": "Changes synced with server" - }, - "modal": { - "clearPlaylist": { - "header": "Do you want to clear the playlist \"{ playlist }\"?", - "content": { - "warning": "This will remove all tracks from this playlist and cannot be undone." - } - } - }, - "help": { - "reorder": "Drag and drop rows to reorder tracks in the playlist" - }, - "header": { - "editor": "Playlist editor" - }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "loading": { - "sync": "Syncing changes to server…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Add to playlist…" - } - }, - "Form": { - "header": { - "createPlaylist": "Create a new playlist", - "createSuccess": "Playlist created", - "updateSuccess": "Playlist updated", - "createFailure": "The playlist could not be created" - }, - "button": { - "create": "Create playlist", - "update": "Update playlist" - }, - "placeholder": { - "name": "My awesome playlist" - }, - "label": { - "name": "Playlist name", - "visibility": "Playlist visibility" - } - }, - "Widget": { - "button": { - "create": "Create Playlist", - "more": "Show more" - }, - "placeholder": { - "noPlaylists": "No playlists have been created yet" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } accepted your follow on library \"{ library }\"", - "libraryFollow": "{ username } followed your library \"{ library }\"", - "libraryPendingFollow": "{ username } wants to follow your library \"{ library }\"" - }, - "button": { - "approve": "Approve", - "markRead": "Mark as read", - "markUnread": "Mark as unread", - "reject": "Reject" + "general": { + "focus": "Focus searchbar", + "label": "General shortcuts", + "show": "Show available keyboard shortcuts", + "unfocus": "Unfocus searchbar" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, + "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", + "main": "Main menu", + "play": "Play this track", + "reports": "Pending review reports", + "theme": "Theme" + }, "link": { "about": "About this pod", "albums": "Albums", @@ -1833,46 +299,1985 @@ "radios": "Radios", "search": "Search", "settings": "Settings", - "users": "Users", - "switchInstance": "Switch instance" - }, - "label": { - "add": "Add content", - "administration": "Administration", - "language": "Language", - "main": "Main menu", - "follows": "Pending follow requests", - "edits": "Pending review edits", - "play": "Play this track", - "theme": "Theme", - "reports": "Pending review reports" - }, - "header": { - "administration": "Administration", - "explore": "Explore", - "main": "Main navigation", - "more": "More", - "library": "My library" + "switchInstance": "Switch instance", + "users": "Users" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Save" + }, + "header": { + "error": "Error while saving settings.", + "image": "Current image" + }, + "message": { + "success": "Settings updated successfully." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Add a new field", + "edit": "Edit form", + "preview": "Preview Form" + }, + "help": { + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Actions", + "label": "Field label", + "required": "Required", + "type": "Field type" + }, + "required": { + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Updated on {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "You may need to subscribe to this channel to see its content." + } + }, + "ChannelForm": { + "header": { + "error": "Error while saving channel." + }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, + "legend": { + "purpose": "What will this channel be used for?" + }, + "loader": { + "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Show more" + }, + "help": { + "subscribe": "You may need to subscribe to this channel to see its contents." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Show more" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" + }, + "help": { + "anonymous": "Please contact your admins and ask them to update the corresponding setting.", + "embed": "Copy/paste this code in your website HTML", + "width": "Leave empty for a responsive widget" + }, + "label": { + "embed": "Embed code", + "height": "Widget height", + "width": "Widget width" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "unfollow": "Unfollow" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", + "hideArtist": "Hide content from this artist", + "playAlbum": "Play album", + "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", + "playPlaylist": "Play playlist", + "playTrack": "Play track", + "playTracks": "Play tracks", + "report": "Report…", + "startRadio": "Play similar songs", + "trackDetails": "Track details" + }, + "title": { + "more": "More…", + "unavailable": "This track is not available in any library you have access to" + } + }, + "Player": { + "header": { + "player": "Audio player and controls" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "audioPlayer": "Media player", + "clearQueue": "Clear your queue", + "expandQueue": "Expand queue", + "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", + "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", + "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", + "shuffleQueue": "Shuffle your queue", + "unmute": "Unmute" + }, + "meta": { + "position": "{index} of {length}", + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" + } + }, + "Search": { + "empty": { + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" + }, + "placeholder": { + "search": "Artist, album, track…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sorry, there are no results for this search" + }, + "header": { + "noResults": "No matches found" + }, + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results 🡒", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracks…" + } + }, + "VolumeControl": { + "button": { + "mute": "Mute", + "unmute": "Unmute" + }, + "label": { + "slider": "Adjust volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Widget": { + "button": { + "more": "Show more" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Show track actions" + } + }, + "Modal": { + "button": { + "addToFavorites": "Add to favourites", + "addToPlaylist": "Add to playlist", + "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", + "playNext": "Play next", + "playNow": "Play now", + "removeFromFavorites": "Remove from favourites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artist", + "title": "Title" + } + } + }, + "Widget": { + "button": { + "more": "Show more" + }, + "empty": { + "noResults": "Nothing found" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Regenerate token" + }, + "header": { + "appDetails": "Application Details", + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" + }, + "help": { + "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." + }, + "label": { + "accessToken": "Access token", + "appId": "Application ID", + "appSecret": "Application secret" + }, + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" + }, + "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, + "header": { + "failure": "We cannot save your changes" + }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, + "label": { + "name": "Name", + "redirectUri": "Redirect URI", + "scopes": { + "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", + "read": { + "description": "Read-only access to user data", + "label": "Read" + }, + "write": { + "description": "Write-only access to user data", + "label": "Write" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Back to settings" + }, + "title": "Create a new application" + }, + "Authorize": { + "button": { + "authorize": "Authorize {app}" + }, + "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", + "authorize": "Authorise third-party app", + "authorizeFailure": "Error while fetching application data", + "fetchFailure": "Error while fetching application data", + "readOnly": "Read-only", + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-paste in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" + }, + "message": { + "unknownPermissions": "The application is also requesting the following unknown permissions:" + }, + "title": "Allow application" + }, + "LoginForm": { + "button": { + "login": "Login" + }, + "header": { + "loginFailure": "We cannot log you in" + }, + "help": { + "approvalRequired": "If you signed-up recently, you may need to wait before our moderation team review your account, or verify your e-mail address.", + "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." + }, + "label": { + "password": "Password", + "username": "Username or e-mail address" + }, + "link": { + "createAccount": "Create an account", + "resetPassword": "Reset your password" + }, + "message": { + "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" + } + }, + "Logout": { + "button": { + "logout": "Yes, log me out!" + }, + "header": { + "confirm": "Are you sure you want to log out?", + "unauthenticated": "You aren't currently logged in" + }, + "link": { + "login": "Log in!" + }, + "message": { + "loggedIn": "You are currently logged in as {username}" + }, + "title": "Log out" + }, + "Plugin": { + "button": { + "save": "Save", + "scan": "Scan" + }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, + "label": { + "library": "Library", + "pluginEnabled": "Enabled" + }, + "link": { + "documentation": "Documentation" + } + }, + "Settings": { + "button": { + "delete": "Delete", + "deleteAccount": "Delete my account…", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" + }, + "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", + "changePassword": { + "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", + "paragraph2": "You will have to update your password on your clients that use this password." + }, + "contentFilters": "Content filters help you hide content you don't want to see on the service.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", + "plugins": "Use plugins to extend Funkwhale and get additional features.", + "yourApps": "This is the list of applications that you have registered." + }, + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorised apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" + }, + "help": { + "changePassword": "Please double-check your password is correct", + "noApps": "If you authorise third-party applications to access your data, those applications will be listed here.", + "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Current password", + "newEmail": "New e-mail address", + "newPassword": "New password", + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "You will be logged out from this session and have to log in with the new one", + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" + }, + "deleteAccount": { + "content": { + "warning": "This is irreversible and will permanently remove your data from our servers. You will be immediately logged out." + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Creation date", + "name": "Name" + } + }, + "authorizedApps": { + "header": { + "application": "Application", + "permissions": "Permissions" + } + }, + "yourApps": { + "header": { + "application": "Application", + "creationDate": "Creation date", + "scopes": "Scopes" + } + } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." + } + }, + "SignupForm": { + "button": { + "create": "Create my account" + }, + "header": { + "login": "Log in to your Funkwhale account", + "signupFailure": "Your account cannot be created." + }, + "label": { + "email": "E-mail address", + "invitation": "Invitation code", + "password": "Password", + "username": "Username" + }, + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale is compatible with other music players that support the Subsonic API.", + "paragraph2": "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance.", + "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." + } + }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, + "link": { + "apps": "Discover how to use Funkwhale from other apps" + }, + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "This will completely disable access to the Subsonic API using from account." + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error while creating" + }, + "label": { + "albumTitle": "Title" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancel", + "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Series" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" + } + }, + "LicenseSelect": { + "label": { + "license": "Licence" + }, + "link": { + "license": "About this licence" + }, + "option": { + "none": "None" + } + }, + "SubscribeButton": { + "help": { + "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" + } + }, + "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, + "header": { + "error": "Error while publishing" + }, + "help": { + "license": "Add a licence to your upload to ensure some freedoms to your public." + }, + "label": { + "channel": "Channel", + "openBrowser": "Browse…" + }, + "message": { + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." + }, + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" + }, + "warning": { + "quota": "You don't have any space left to upload your files. Please contact the moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Description", + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next step", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, + "meta": { + "files": "no files | {n} file | {n} files", + "quota": "Remaining storage space: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "go": "Go", + "launch": "Launch", + "refresh": "Refresh table content", + "select": "Select", + "selectAll": "Select all items", + "selectCurrentPage": "Select only current page", + "selectElement": "Select one element | Select all {n} elements", + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" + }, + "label": { + "actions": "Actions", + "performAction": "Perform actions" + }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Remove" + }, + "header": { + "failure": "Your attachment cannot be saved" + }, + "help": { + "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." + }, + "label": { + "upload": "Upload New Picture…" + }, + "loader": { + "uploading": "Uploading file…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Collapse", + "expand": "Expand" + } + }, + "ContentForm": { + "button": { + "preview": "Preview", + "write": "Write" + }, + "empty": { + "noContent": "Nothing to preview" + }, + "help": { + "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words here…" + } + }, + "CopyInput": { + "button": { + "copy": "Copy" + }, + "message": { + "success": "Text copied to clipboard!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancel", + "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Refresh" + }, + "header": { + "noResults": "No results were found." + } + }, + "ExpandableDiv": { + "button": { + "less": "Show less", + "more": "Show more" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Clear" + }, + "label": { + "search": "Search" + }, + "placeholder": { + "search": "Search…" + } + }, + "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, + "header": { + "unauthenticated": "Unauthenticated" + }, + "link": { + "login": "Log in", + "signup": "Sign up" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", + "update": "Update description" + }, + "empty": { + "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + }, + "UserModal": { + "button": { + "switchInstance": "Use another instance" + }, + "header": { + "options": "Options" + }, + "label": { + "language": "Change language", + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" + }, + "link": { + "about": "About", + "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", + "git": "Issue tracker", + "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", + "signup": "Sign up", + "support": "Help" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "No tracks have been added to your favourites yet" + }, + "header": { + "favorites": "No favourites | {n} favourite | {n} favourites" + }, + "link": { + "library": "Browse the library" + }, + "loader": { + "loading": "Loading your favourites…" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favourites" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Add to favourites", + "remove": "Remove from favourites" + }, + "label": { + "inFavorites": "In favourites" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Close", + "reload": "Close and reload page" + }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote server…", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, + "loader": { + "awaitingResult": "Waiting for result…", + "fetchRequest": "Requesting a fetch…" + }, + "table": { + "error": { + "label": { + "detail": "Error detail", + "type": "Error type" + }, + "value": { + "connectionError": "Impossible to connect to the remote server", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", + "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", + "unknownError": "Unknown error" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Show more" + }, + "empty": { + "noMatch": "No matching library." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copy" + }, + "message": { + "copy": "Text copied to clipboard!" + }, + "title": "Show/hide password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Add a description…" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "This album is present in the following libraries:" + }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, + "meta": { + "volume": "Volume {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "more": "More…" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edit this album", + "suggest": "Suggest an edit on this album" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Albums": { + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing albums" + }, + "label": { + "search": "Search", + "tags": "Tags" + }, + "link": { + "addMusic": "Add some music" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter album title…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancel", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play all albums" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" + }, + "modal": { + "embed": { + "header": "Embed this artist work on your website" + } + }, + "title": "Artist" + }, + "ArtistDetail": { + "button": { + "filter": "Remove filter", + "more": "Load more…" + }, + "description": { + "library": "This artist is present in the following libraries:" + }, + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" + }, + "link": { + "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." + } + }, + "ArtistEdit": { + "header": { + "edit": "Edit this artist", + "suggest": "Suggest an edit on this artist" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "Artists": { + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing artists" + }, + "label": { + "excludeCompilation": "Exclude Compilation Artists", + "search": "Artist name", + "tags": "Tags" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Artists" + }, + "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, + "header": { + "modification": "Modification {id}" + }, + "link": { + "track": "Track #{id} - {name}" + }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, + "status": { + "applied": "Approved and applied", + "approved": "Approved", + "pending": "Pending", + "rejected": "Rejected" + }, + "table": { + "update": { + "header": { + "field": "Field", + "newValue": "New value", + "oldValue": "Old value" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", + "showAll": "Show all edits", + "showUnreviewed": "Restrict to unreviewed edits", + "submit": "Submit and apply edit", + "suggest": "Submit suggestion" + }, + "empty": { + "suggestEdit": "Suggest a change using the form below" + }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, + "label": { + "summary": "Summary (optional)" + }, + "message": { + "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancel", + "retry": "Retry failed uploads" + }, + "description": { + "import": "Import status", + "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploading…" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" + } + }, + "FsBrowser": { + "button": { + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Import hasn't started yet" + } + }, + "Home": { + "header": { + "newChannels": "New channels", + "playlists": "Playlists", + "recentlyAdded": "Recently added", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + }, + "title": "Library" + }, + "ImportStatusModal": { + "button": { + "close": "Close" + }, + "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", + "invalidMetadata": { + "label": "Invalid metadata", + "message": "The metadata included in the file is invalid or some mandatory fields are missing." + }, + "unknownError": { + "label": "Unknown error", + "message": "An unknown error occurred" + } + }, + "header": { + "importDetail": "Import detail" + }, + "link": { + "documentation": "Read our documentation for this error", + "support": "Open a support thread (include the debug information below in your message)" + }, + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing podcasts" + }, + "label": { + "search": "Podcast title", + "tags": "Tags" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing radios", + "instance": "Instance radios", + "user": "User radios" + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Enter a radio name…" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Channels", + "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" + } + }, + "TagSelector": { + "placeholder": { + "search": "Search…" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, + "subtitle": { + "with-uploader": "Uploaded by {0} on {1}", + "without-uploader": "Uploaded on {0}" + }, + "title": "Track" + }, + "TrackDetail": { + "description": { + "library": "This track is present in the following libraries:" + }, + "header": { + "episode": "Episode Details", + "library": "Related Libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, + "link": { + "musicbrainz": "View on MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Series", + "url": "URL", + "year": "Year" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Edit this track", + "suggest": "Suggest an edit on this track" + }, + "message": { + "remote": "This object is managed by another server, you cannot edit it." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Add filter", + "save": "Save" + }, + "description": { + "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." + }, + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" + }, + "label": { + "description": "Description", + "filter": "Add filters to customise your radio", + "name": "Radio name", + "public": "Display publicly" + }, + "option": { + "filter": "Select a filter" + }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Accessed date", - "account": "Account", - "creationDate": "Creation date", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "name": "Name", - "size": "Size", - "visibility": "Visibility" + "actions": "Actions", + "candidates": "Candidates", + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } }, + "title": "Radio Builder" + }, + "Filter": { + "cancelButton": "Cancel", + "excludeLabel": "Exclude", + "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", + "matchingTracksModalHeader": "Tracks matching filter", + "removeButton": "Remove" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, account…" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz ID…" + }, + "table": { + "album": { + "header": { + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Title", + "releaseDate": "Release date", + "tracks": "Tracks" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected artist will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz ID…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "all": "All", + "approved": "Approved", + "pending": "Pending review", + "rejected": "Rejected" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." + } + }, + "label": { + "search": "Search", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "All" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, description…" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "followers": "Followers", + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + } + }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz ID…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Delete", + "warning": "The selected upload will be removed. This action is irreversible." + } + }, + "label": { + "search": "Search", + "status": "Import status", + "visibility": "Visibility" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "All", "failed": "Failed", @@ -1888,396 +2293,68 @@ }, "label": "Ordering" }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected upload will be removed. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search", - "status": "Status", - "visibility": "Visibility" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by domain, actor, name, reference, source…" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Accessed date", "account": "Account", "creationDate": "Creation date", "domain": "Domain", - "followers": "Followers", + "importStatus": "Import status", + "library": "Library", "name": "Name", - "uploads": "Uploads", + "size": "Size", "visibility": "Visibility" } } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected library will be removed, as well as associated uploads and follows. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Search", - "visibility": "Visibility" - }, - "placeholder": { - "search": "Search by domain, actor, name, description…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "license": "License", - "title": "Title" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tracks will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "label": { - "category": "Category", - "search": "Search" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Search by domain, name, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artists", - "creationDate": "Creation date", - "name": "Name", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected tag will be removed and unlinked with existing content, if any. This action is irreversible." - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by name" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "EditsCardList": { - "option": { - "all": "All", - "approved": "Approved", - "pending": "Pending review", - "rejected": "Rejected" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "placeholder": { - "search": "Search by account, summary, domain…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "label": { - "status": "Status" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artist", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Title", - "releaseDate": "Release date", - "tracks": "Tracks" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "action": { - "delete": { - "label": "Delete", - "warning": "The selected albums will be removed, as well as associated tracks, uploads, favourites and listening history. This action is irreversible." - } - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "notApplicable": "N/A", - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz ID…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Domain", - "local": "Local", - "owner": "Owner", - "type": "Type" - }, - "status": { - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "resolutionDate": "Resolution date", - "resolved": "Resolved", - "status": "Status", - "unresolved": "Unresolved" - }, - "report": { - "category": "Category", - "creationDate": "Creation date", - "submittedBy": "Submitted by" + "AccountsTable": { + "action": { + "purge": { + "label": "Purge" } }, - "header": { - "actions": "Actions", - "notes": "Internal notes", - "message": "Message", - "reportedObject": "Reported object" - }, - "button": { - "confirmDelete": "Delete", - "delete": "Delete reported object", - "resolve": "Resolve", - "unresolve": "Unresolve" - }, - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Open in moderation interface", - "report": "Report { id }", - "publicPage": "View public page" - }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - } - }, - "UserRequestCard": { - "header": { - "actions": "Actions", - "notes": "Internal notes", - "signup": "Message" - }, - "button": { - "approve": "Approve", - "reject": "Refuse" - }, - "table": { - "status": { - "approved": "Approved", - "assignedTo": "Assigned to", - "internalNotes": "Internal notes", - "pending": "Pending", - "refused": "Refused", - "status": "Status" - }, - "request": { - "creationDate": "Creation date", - "submittedBy": "Submitted by" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Request { id }" - }, - "message": { - "signup": "This user wants to sign-up on your pod." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Add a new moderation rule", - "editRule": "Edit moderation rule", - "failure": "Error while creating rule" - }, "label": { - "blockAll": "Block everything", - "policyDisabled": "Disabled", - "policyEnabled": "Enabled", - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "customizeRule": "Or customise your rule", - "policyReason": "Reason", - "rejectMedia": "Reject media" + "search": "Search" }, - "tooltip": { - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", - "rejectMedia": "Do not download any media file (audio, album cover, account avatar…) from this account or domain. This will purge existing content as well.", - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it." + "link": { + "local": "Local account" }, - "button": { - "cancel": "Cancel", - "create": "Create", - "delete": "Delete", - "confirm": "Delete moderation rule", - "update": "Update" + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "modal": { - "delete": { - "header": "Delete this moderation rule?", - "content": { - "warning": "This action is irreversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Add note" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { - "summary": "Describe what actions have been taken, or any other related updates…" + "search": "Search by domain, username, bio…" }, - "header": { - "failure": "Error while submitting note" + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { @@ -2292,6 +2369,16 @@ "label": "Remove from allow-list" } }, + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" + }, + "link": { + "list": "This domain is present in your allow-list" + }, "option": { "all": "All", "no": "No", @@ -2305,76 +2392,32 @@ }, "label": "Ordering" }, - "table": { - "domain": { - "header": { - "firstSeen": "First seen", - "name": "Name", - "receivedMessages": "Received messages", - "moderationRule": "Under moderation rule", - "users": "Users" - }, - "moderationRule": "Yes" - } - }, - "label": { - "inList": "Is present on allow-list", - "search": "Search" - }, - "empty": { - "noPods": "No other pods found" + "pagination": { + "results": "Showing results {start}-{end} on {total}" }, "placeholder": { "search": "Search by name…" }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - }, - "link": { - "list": "This domain is present in your allow-list" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domain", "firstSeen": "First seen", - "lastSeen": "Last seen", - "name": "Name", "moderationRule": "Under moderation rule", - "uploads": "Uploads" + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "link": { - "local": "Local account" - }, - "action": { - "purge": { - "label": "Purge" - } - }, - "label": { - "search": "Search" - }, - "placeholder": { - "search": "Search by domain, username, bio…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edit" + }, + "header": { + "rule": "Rule" + }, "label": { "blockAll": "Block everything", "muteActivity": "Mute activity", @@ -2382,15 +2425,49 @@ "reason": "Reason", "rejectMedia": "Reject media" }, - "button": { - "edit": "Edit" - }, "status": { "enabled": "Enabled", "paused": "Paused" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancel", + "confirm": "Delete moderation rule", + "create": "Create", + "delete": "Delete", + "update": "Update" }, "header": { - "rule": "Rule" + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customise your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" + }, + "modal": { + "delete": { + "content": { + "warning": "This action is irreversible" + }, + "header": "Delete this moderation rule?" + } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { @@ -2400,161 +2477,130 @@ }, "modal": { "manage": { - "header": "Manage moderation rules for { obj }", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, + "NoteForm": { + "button": { + "add": "Add note" + }, + "header": { + "failure": "Error while submitting note" + }, + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updates…" + } + }, "NotesThread": { "button": { "delete": "Delete" }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be removed. This action is irreversible." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Creation date", - "domain": "Domain", - "name": "Name", - "tracks": "Tracks" + }, + "header": "Delete this note?" } } }, - "option": { - "all": "All" - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" + "ReportCard": { + "button": { + "confirmDelete": "Delete", + "delete": "Delete reported object", + "resolve": "Resolve", + "unresolve": "Unresolve" }, - "label": "Ordering" + "header": { + "actions": "Actions", + "message": "Message", + "notes": "Internal notes", + "reportedObject": "Reported object" + }, + "link": { + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } }, - "label": { - "category": "Category", - "search": "Search" - }, - "link": { - "local": "Local", - "moderation": "Open in moderation interface" - }, - "placeholder": { - "search": "Search by domain, name, account…" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, + "header": { + "actions": "Actions", + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" + }, + "message": { + "signup": "This user wants to sign-up on your pod." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Account status", - "email": "Email", - "lastActivity": "Last activity", - "permissions": "Permissions", - "signup": "Sign-up", - "status": "Status", - "username": "Username" - }, - "accountStatus": { - "active": "Active", - "inactive": "Inactive" - }, - "status": { - "admin": "Admin", - "regular": "Regular user", - "staff": "Staff member" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Ordering direction" - }, - "label": "Ordering" - }, - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Search by username, e-mail address, name…" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "All", - "expired": "Expired/used", - "open": "Open" - }, - "table": { - "invitation": { - "header": { - "code": "Code", - "creationDate": "Creation date", - "expirationDate": "Expiry date", - "owner": "Owner", - "status": "Status" - } - } - }, - "action": { - "delete": "Delete" - }, - "label": { - "expired": "Expired", - "unused": "Not used", - "search": "Search", - "status": "Status", - "used": "Used" - }, - "ordering": { - "label": "Ordering" - }, - "placeholder": { - "search": "Search by username, e-mail address, code…" - }, - "pagination": { - "results": "Showing one result | Showing results { start } to { end } from { total }" - } - }, "InvitationForm": { "button": { "clear": "Clear", "new": "Get a new invitation" }, - "table": { - "invitation": { - "header": { - "code": "Code", - "link": "Share link" - } - } - }, "header": { "failure": "Error while creating invitation" }, @@ -2563,534 +2609,59 @@ }, "placeholder": { "invitation": "Leave empty for a random code" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Actions", - "label": "Field label", - "type": "Field type", - "required": "Required" - }, - "type": { - "long": "Long text", - "short": "Short text" - }, - "required": { - "false": "False", - "true": "True" - } - } - }, - "button": { - "add": "Add a new field", - "edit": "Edit form", - "preview": "Preview Form" - }, - "label": { - "additionalField": "Additional field", - "additionalFields": "Additional fields", - "delete": "Delete", - "helpText": "Help text", - "moveDown": "Move down", - "moveUp": "Move up" - }, - "help": { - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", - "helpText": "An optional text to be displayed at the start of the sign-up form." - } - }, - "SettingsGroup": { - "header": { - "image": "Current image", - "error": "Error while saving settings." - }, - "button": { - "save": "Save" - }, - "message": { - "success": "Settings updated successfully." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "All" - }, - "label": { - "category": "Category" - } - }, - "ReportModal": { - "header": { - "disabled": "Anonymous reports are disabled, please sign in to submit a report.", - "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report" - }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" - }, - "label": { - "email": "Email", - "forwardToDomain": "Forward to { domain}", - "message": "Message" - }, - "description": { - "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "modal": "Use this form to submit a report to our moderation team.", - "email": "We'll use this e-mail address if we need to contact you regarding this report." - }, - "message": { - "submissionSuccess": "Report successfully submitted, thank you" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancel", - "hide": "Hide content" - }, - "message": { - "success": "Content filter successfully added" - }, - "header": { - "modal": "Do you want to hide content from artist \"{ name }\"?", - "failure": "Error while creating filter" - }, - "warning": { - "createFilter": { - "listItem2": "In \"Recently added\" widget", - "listItem3": "In artists and album listings", - "listItem1": "In other users' favourites and listening history", - "listItem4": "In radio suggestions", - "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:" - } - }, - "help": { - "createFilter": "You can manage and update your filters any time from your account settings." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "An error occurred while trying to refresh data:", - "success": "Data was refreshed successfully from remote server.", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "An HTTP error occurred while contacting the remote server", - "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", - "connectionError": "Impossible to connect to the remote server", - "httpStatus": "The remote server answered with HTTP { status }", - "timeoutError": "The remote server didn't respond quickly enough", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", - "unknownError": "Unknown error" - }, - "label": { - "detail": "Error detail", - "type": "Error type" - } - } - }, - "button": { - "close": "Close", - "reload": "Close and reload page" - }, - "header": { - "saveFailure": "Error while saving settings", - "failure": "Refresh error", - "pending": "Refresh pending", - "success": "Refresh successful", - "skipped": "Refresh was skipped", - "refresh": "Refreshing object from remote server…" - }, - "loader": { - "fetchRequest": "Requesting a fetch…", - "awaitingResult": "Waiting for result…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "No matching library." - }, - "button": { - "showMore": "Show more" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio player shortcuts", - "clearQueue": "Clear queue", - "decreaseVolume": "Decrease volume", - "expandQueue": "Expand queue/player view", - "increaseVolume": "Increase volume", - "playPause": "Pause/play the current track", - "playNext": "Play next track", - "playPrevious": "Play previous track", - "seekBack30": "Seek backwards 30s", - "seekBack5": "Seek backwards 5s", - "seekForward30": "Seek forwards 30s", - "seekForward5": "Seek forwards 5s", - "shuffleQueue": "Shuffle queue", - "toggleFavorite": "Toggle favourite", - "toggleMute": "Toggle mute", - "toggleLoop": "Toggle queue looping" - }, - "general": { - "focus": "Focus searchbar", - "label": "General shortcuts", - "show": "Show available keyboard shortcuts", - "unfocus": "Unfocus searchbar" - } - }, - "button": { - "close": "Close" - }, - "header": { - "modal": "Keyboard shortcuts" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancel", - "submit": "Submit" - }, - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "label": { - "url": "Instance URL" - }, - "help": { - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "serverDown": "The server might be down", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - } - }, - "Queue": { - "button": { - "clear": "Clear", - "close": "Close", - "stopRadio": "Stop radio" - }, - "label": { - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artist…", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "previous": "Previous track", - "queue": "Queue", - "remove": "Remove", - "restart": "Restart track", - "populatingRadio": "Fetching radio track...", - "selectTrack": "Select track", - "favorite": "Favourite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualiser" - }, - "message": { - "radio": "New tracks will be appended here automatically.", - "automaticPlay": "The next track will play automatically in a few seconds…" - }, - "header": { - "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." - }, - "meta": { - "queuePosition": "Track {index} of {length}", - "startTime": "00:00" - }, - "warning": { - "connectivity": "You may have a connectivity issue." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copy" - }, - "title": "Show/hide password", - "message": { - "copy": "Text copied to clipboard!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Edit" - } - }, - "Button": { - "startRadio": "Play radio", - "stopRadio": "Stop radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error while fetching object" - }, - "button": { - "fediverse": "Fediverse", - "rss": "RSS", - "search": "Search" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverse object", - "title": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "RSS feed location", - "title": "Subscribe to a podcast RSS feed" - } - }, - "warning": { - "unsupported": "This kind of object isn't supported yet" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" - }, - "description": { - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", - "rss": "Use this form to subscribe to an RSS feed from its URL." - } - }, - "PageNotFound": { - "link": { - "home": "Go to home page" - }, - "title": "Page not found", - "header": { - "pageNotFound": "Page not found!" - }, - "message": { - "pageNotFound": "Sorry, the page you asked for does not exist:" - } - }, - "vui": { - "Pagination": { - "next": "Next Page", - "label": "Pagination", - "previous": "Previous Page" - } - }, - "tags": { - "List": { - "button": { - "more": "Show 1 more tag | Show { n } more tags" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episode | { n } episodes", - "listenings": "{ n } listening | { n } listenings", - "subscribers": "{ n } subscriber | { n } subscribers", - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "channelEpisodes": "All Episodes", - "mirrored": "Mirrored from { domain }", - "moderation": "Open in moderation interface", - "channelOverview": "Overview", - "channelTracks": "Tracks", - "domainView": "View on { domain }" - }, - "header": { - "artistChannel": "Artist channel", - "podcastChannel": "Podcast channel" - }, - "button": { - "cancel": "Cancel", - "confirm": "Delete", - "delete": "Delete…", - "edit": "Edit…", - "embed": "Embed", - "play": "Play", - "updateChannel": "Update channel", - "upload": "Upload" - }, - "title": "Channel", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copy-paste the following URL in your favourite podcatcher:" - }, - "header": "Subscribe via RSS" - }, - "fediverse": { - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - }, - "header": "Subscribe on the Fediverse" - }, - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "header": "Subscribe to this channel" }, - "delete": { - "header": "Delete this Channel?", - "content": { - "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } - }, - "embed": { - "header": "Embed this artist work on your website" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Add new", - "erroredUploads": "View errored uploads", - "skippedUploads": "View skipped uploads" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Latest episodes", - "latestTracks": "Latest tracks", - "series": "Series", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", - "uploadsSuccess": "Uploads published successfully" - }, - "meta": { - "progress": "Processed uploads:" - }, - "message": { - "processing": "Your uploads are being processed by Funkwhale and will be live very soon." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Add new" - }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - }, - "placeholder": { - "search": "Filter by name…" - }, - "title": "Subscribed Channels", - "modal": { - "subscription": { - "header": "Subscription" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "details": "Library Details" - }, - "label": { - "size": "Total size of the files in this library" - }, - "button": { - "upload": "Upload" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } used of { max } allowed", - "errored": "Errored files", - "pending": "Pending files", - "skipped": "Skipped files" - }, - "header": { - "currentUsage": "Current usage" - }, - "loading": { - "currentUsage": "Loading usage data…" - }, - "button": { - "purge": "Purge" - }, - "modal": { - "purgeErrored": { - "header": "Purge errored files?", - "content": { - "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } - }, - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - } - }, - "link": { - "viewFiles": "View files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artist", - "duration": "Duration", - "importStatus": "Import status", - "size": "Size", - "title": "Title", - "uploadDate": "Upload date" + "code": "Code", + "link": "Share link" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Delete" + }, + "label": { + "expired": "Expired", + "search": "Search", + "status": "Status", + "unused": "Not used", + "used": "Used" }, "option": { - "status": { - "all": "All", - "draft": "Draft", - "failed": "Failed", - "finished": "Finished", - "pending": "Pending", - "skipped": "Skipped" - } + "all": "All", + "expired": "Expired/used", + "open": "Open" }, + "ordering": { + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, code…" + }, + "table": { + "invitation": { + "header": { + "code": "Code", + "creationDate": "Creation date", + "expirationDate": "Expiry date", + "owner": "Owner", + "status": "Status", + "user": "User" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascending", @@ -3099,397 +2670,579 @@ }, "label": "Ordering" }, - "action": { - "delete": "Delete", - "restartImport": "Restart import" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" }, - "label": { - "importStatus": "Import status", - "search": "Search" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "No tracks have been added to this library yet" + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" }, "placeholder": { - "search": "Search by title, artist, album…" + "search": "Search by username, e-mail address, name…" }, - "button": { - "showStatus": "Show information about the upload status for this track" - }, - "pagination": { - "results": "Showing results { start }-{ end } on { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Create a new library" - }, - "loading": { - "libraries": "Loading Libraries…" - }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, - "header": { - "libraries": "My libraries" - } - }, - "Form": { - "button": { - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library", - "update": "Update library" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library and all its tracks will be deleted. This can not be undone." + "table": { + "user": { + "accountStatus": { + "active": "Active", + "inactive": "Inactive" + }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, + "status": { + "admin": "Admin", + "regular": "Regular user", + "staff": "Staff member" } } - }, - "label": { - "description": "Description", - "name": "Name", - "visibility": "Visibility" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", - "visibility": "You are able to share your library with other people, regardless of its visibility." - }, - "message": { - "libraryCreated": "Library created", - "libraryDeleted": "Library deleted", - "libraryUpdated": "Library updated" - }, - "placeholder": { - "name": "My awesome library", - "description": "This library contains my personal music, I hope you like it." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } track | { n } tracks", - "failedTracks": "Failed tracks:", - "lastUpdate": "Last update:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "By unfollowing this library, you lose access to its content." - }, - "header": "Unfollow this library?" - } - }, - "button": { - "cancel": "Cancel follow request", - "follow": "Follow", - "pending": "Follow request pending approval", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now" - }, - "label": { - "scanFailure": "Problem during scanning", - "scanPending": "Scan pending", - "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors", - "scanProgress": "Scanning… ({ progress }%)", - "sharingLink": "Sharing link" - }, - "message": { - "scanLaunched": "Scan launched", - "scanSkipped": "Scan skipped (previous scan is too recent)" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - } - }, - "ScanForm": { - "header": { - "failure": "Could not fetch remote library" - }, - "placeholder": { - "url": "Enter a library URL" - }, - "label": { - "search": "Search a remote library" - }, - "button": { - "submit": "Submit search" - } - }, - "Home": { - "header": { - "knownLibraries": "Known libraries", - "remoteLibraries": "Remote libraries" - }, - "loading": { - "remoteLibraries": "Loading remote libraries…" - }, - "button": { - "refresh": "Refresh" - }, - "description": { - "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." - } - } - }, - "Home": { - "title": "Add and manage content", - "description": { - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", - "channel": { - "1": "If you are a musician or a podcaster, channels are designed for you!", - "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." - }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." - }, - "header": { - "follow": "Follow remote libraries", - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library" - }, - "button": { - "start": "Get started" - }, - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - } - }, - "Base": { - "title": "Add content", - "link": { - "libraries": "Libraries", - "tracks": "Tracks" - }, - "menu": { - "secondary": "Secondary menu" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } track | { n } tracks" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "moderation": "Open in moderation interface", - "owner": "Owned by { username }", - "tracks": "Tracks", - "domain": "View on { domain }" - }, - "button": { - "edit": "Edit", - "upload": "Upload" - }, - "title": "Library", - "label": { - "private": "Private", - "public": "Public", - "instance": "Restricted", - "sharingLink": "Sharing link" - }, - "description": { - "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely", - "instance": "This library is restricted to users on this pod only" - } - }, - "Edit": { - "button": { - "accept": "Accept", - "reject": "Reject" - }, - "table": { - "action": { - "status": { - "accepted": "Accepted", - "pending": "Pending approval", - "rejected": "Rejected" - }, - "header": { - "action": "Action", - "date": "Date", - "status": "Status", - "user": "User" - } - } - }, - "header": { - "followers": "Followers", - "libraryContents": "Library contents" - }, - "loading": { - "followers": "Loading followers…" - }, - "empty": { - "noFollowers": "Nobody is following this library" - } - }, - "DetailAlbums": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailOverview": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - }, - "DetailTracks": { - "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }'s profile", - "link": { - "activity": "Activity", - "moderation": "Open in moderation interface", - "overview": "Overview", - "domainView": "View on { domain }" - }, - "label": { - "self": "This is you!" - } - }, - "PasswordReset": { - "label": { - "email": "Account's e-mail address" - }, - "button": { - "requestReset": "Ask for a password reset" - }, - "link": { - "back": "Back to login" - }, - "placeholder": { - "email": "Enter the e-mail address linked to your account" - }, - "header": { - "failure": "Error while asking for a password reset", - "reset": "Reset your password" - }, - "title": "Reset your password", - "help": { - "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Add new" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artist channel" - }, - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancel", - "createChannel": "Create channel", - "next": "Next step", - "previous": "Previous step" + "hide": "Hide content" }, "header": { - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries", - "libraries": "User Libraries" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Back to login", - "login": "Proceed to login" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" }, - "title": "Change your password", - "header": { - "failure": "Error while changing your password", - "success": "Password updated successfully" + "help": { + "createFilter": "You can manage your filters any time from your account settings." }, "message": { - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", - "success": "Your password has been updated successfully." + "success": "Content filter successfully added" }, + "warning": { + "createFilter": { + "listIntro": "You will not see tracks, albums and user activity linked to this artist any more:", + "listItem1": "In other users' favourites and listening history", + "listItem2": "In \"Recently added\" widget", + "listItem3": "In artists and album listings", + "listItem4": "In radio suggestions" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "New password" + "category": "Category" }, + "option": { + "all": "All" + } + }, + "ReportModal": { "button": { - "update": "Update your password" - } - }, - "EmailConfirm": { - "title": "Confirm your e-mail address", - "label": { - "confirmationCode": "Confirmation code" + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymised copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" + }, + "error": { + "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { - "failure": "Could not confirm your e-mail address", - "success": "E-mail address confirmed" + "disabled": "Anonymous reports are disabled, please sign in to submit a report.", + "modal": "Do you want to report this object?", + "submissionFailure": "Error while submitting report" }, - "link": { - "login": "Proceed to login", - "back": "Return to login" + "label": { + "email": "Email", + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, "message": { - "success": "You can now use the service without limitations." - } - }, - "Signup": { - "header": { - "createAccount": "Create a Funkwhale account" - }, - "title": "Sign Up" - }, - "Login": { - "title": "Log In", - "header": { - "login": "Log in to your Funkwhale account" - } - }, - "Callback": { - "header": { - "loggingIn": "Logging in…" - } - }, - "Plugins": { - "title": "Manage plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlists", - "recentlyFavorited": "Recently favourited", - "recentlyListened": "Recently listened" + "submissionSuccess": "Report successfully submitted, thank you" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approve", + "markRead": "Mark as read", + "markUnread": "Mark as unread", + "reject": "Reject" + }, + "message": { + "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "Editor": { + "button": { + "addDuplicate": "Add anyway", + "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", + "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" + }, + "error": { + "sync": "An error occurred while saving your changes" + }, + "header": { + "editor": "Playlist editor" + }, + "help": { + "reorder": "Drag and drop rows to reorder tracks in the playlist" + }, + "loading": { + "sync": "Syncing changes to server…" + }, + "message": { + "sync": "Changes synced with server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "This will remove all tracks from this playlist and cannot be undone." + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" + } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" + } + }, + "Form": { + "button": { + "create": "Create playlist", + "update": "Update playlist" + }, + "header": { + "createFailure": "The playlist could not be created", + "createPlaylist": "Create a new playlist", + "createSuccess": "Playlist created", + "updateSuccess": "Playlist updated" + }, + "label": { + "name": "Playlist name", + "visibility": "Playlist visibility" + }, + "placeholder": { + "name": "My awesome playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Add anyway", + "addToPlaylist": "Add to this playlist", + "addTrack": "Add track", + "cancel": "Cancel", + "edit": "Edit" + }, + "empty": { + "noPlaylists": "No playlists have been created yet" + }, + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" + }, + "table": { + "edit": { + "header": { + "edit": "Edit", + "lastModification": "Last modification", + "name": "Name", + "tracks": "Tracks" + } + } + }, + "warning": { + "duplicate": "{ 0 } is already in { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Add to playlist…" + } + }, + "Widget": { + "button": { + "create": "Create playlist", + "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", + "startTagsRadio": "Start tags radio", + "stopArtistsRadio": "Stop artists radio", + "stopPlaylistsRadio": "Stop playlists radio", + "stopRadio": "Stop radio", + "stopTagsRadio": "Stop tags radio" + }, + "Card": { + "button": { + "edit": "Edit" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Show 1 more tag | Show {n} more tags" + } + } + }, + "vui": { + "Pagination": { + "label": "Pagination", + "next": "Next Page", + "previous": "Previous Page" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { + "choices": { + "instance": "Everyone on this instance", + "private": "Nobody except me", + "public": "Everyone, across all instances" + }, + "help": "Determine the visibility level of your activity", + "label": "Activity visibility", + "shortChoices": { + "instance": "Instance", + "private": "Private", + "public": "Everyone" + } + }, + "reportType": { + "choices": { + "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", + "offensiveContent": "Offensive content", + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Accessed date", + "albumTitle": "Album name", + "appliedDate": "Applied date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiry date", + "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", + "lastSeen": "Last seen date", + "modificationDate": "Modification date", + "name": "Name", + "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", + "uploads": "Uploads", + "username": "Username", + "users": "Users" + }, + "scopes": { + "edits": { + "description": "Access to edits", + "label": "Edits" + }, + "favorites": { + "description": "Access to favourites", + "label": "Favourites" + }, + "filters": { + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" + }, + "notifications": { + "description": "Access to notifications", + "label": "Notifications" + }, + "playlists": { + "description": "Access to playlists", + "label": "Playlists" + }, + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" + }, + "reports": { + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorisation", + "label": "Security" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "name": "Name" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "license": "License", + "position": "Position", + "title": "Title" + } + }, + "useReport": { + "account": { + "label": "Report {'@'}{username}", + "typeLabel": "Account" + }, + "album": { + "label": "Report this album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Report this artist…", + "typeLabel": "Artist", + "unknownLabel": "Unknown artist" + }, + "channel": { + "label": "Report this channel…", + "typeLabel": "Channel" + }, + "library": { + "label": "Report this library…", + "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this track…", + "typeLabel": "Track" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, + "channel": { + "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "License", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occurred.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" + } + }, + "init": { + "axios": { + "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in {delay}", + "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" + }, + "sentry": { + "allow": "Allow", + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." + }, + "serviceWorker": { + "actions": { + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." + } + }, + "views": { "Notifications": { + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, + "header": { + "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", + "notifications": "Your notifications" + }, + "label": { + "reminder": "Remind me in:", + "showRead": "Show read notifications" + }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notifications…" + }, + "message": { + "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + }, "option": { "delay": { "30": "30 days", @@ -3498,584 +3251,63 @@ "never": "Never" } }, - "link": { - "help": "Discover other ways to help", - "donate": "Donate" + "title": "Notifications" + }, + "Search": { + "button": { + "submit": "Submit Search Query" }, "header": { - "funkwhaleSupport": "Do you like Funkwhale?", - "instanceSupport": "Support this Funkwhale pod", - "messages": "Your messages", - "notifications": "Your notifications" + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "loading": { - "notifications": "Loading notifications…" - }, - "empty": { - "notifications": "No notification to show." - }, - "title": "Notifications", "label": { - "reminder": "Remind me in:", - "showRead": "Show read notifications" - }, - "message": { - "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Username", - "loginStatus": { - "disabled": "Disabled", - "enabled": "Enabled", - "label": "Login status" - }, - "displayName": "Display name", - "email": "Email address", - "lastActivity": "Last activity", - "lastChecked": "Last checked", - "permissions": "Permissions", - "signupDate": "Sign-up date", - "userType": "Type" - }, - "audioContent": { - "cachedSize": "Cached size", - "megabyte": "MB", - "totalSize": "Total size", - "uploadQuota": "Upload quota" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - } - }, - "header": { - "accountData": "Account data", - "activity": "Activity", - "audioContent": "Audio content", - "localAccount": "Local account", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this account." - }, - "button": { - "addPolicy": "Add a moderation policy" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "domain": "Domain", - "libraries": "Libraries", - "linkedReports": "Linked reports", - "openProfile": "Open profile", - "remoteProfile": "Open remote profile", - "requests": "Requests", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." - }, - "option": { - "permission": { - "library": "Library", - "moderation": "Moderation", - "settings": "Settings" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "accounts": "Accounts", - "domains": "Domains", - "reports": "Reports", - "userRequests": "User Requests" - }, - "title": "Moderation", - "menu": { - "secondary": "Secondary menu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "instanceData": "Instance data", - "activePolicy": "This domain is subject to specific moderation rules", - "noPolicy": "You don't have any rule in place for this domain." - }, - "button": { - "addPolicy": "Add a moderation policy", - "addToAllowList": "Add to allow-list", - "refreshNodeInfo": "Refresh node info", - "removeFromAllowList": "Remove from allow-list" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "knownAccounts": "Known accounts", - "libraries": "Libraries", - "website": "Open website", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "activity": { - "emittedFollows": "Emitted library follows", - "emittedMessages": "Emitted messages", - "firstSeen": "First seen", - "receivedFollows": "Received library follows" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error while fetching node info", - "label": "Status" - }, - "inAllowList": { - "label": "Is present on allow-list", - "false": "No", - "true": "Yes" - }, - "lastChecked": "Last checked", - "domainName": "Name", - "software": { - "label": "Software" - }, - "totalUsers": "Total users" - } - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account." - }, - "notApplicable": "N/A", - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "DomainsList": { - "button": { - "add": "Add" - }, - "label": { - "addDomain": "Add a domain", - "addToAllowList": "Add to allow-list" - }, - "title": "Domains", - "header": { - "domains": "Domains", - "failure": "Error while creating domain" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "All", - "resolved": "Resolved", - "unresolved": "Unresolved" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "title": "Reports", - "header": { - "reports": "Reports" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by account, summary, domain…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "All", - "approved": "Approved", - "pending": "Pending", - "refused": "Refused" - } - }, - "ordering": { - "direction": { - "ascending": "Ascending", - "descending": "Descending", - "label": "Order" - }, - "label": "Ordering" - }, - "label": { - "search": "Search", - "status": "Status" - }, - "placeholder": { - "search": "Search by username…" - }, - "title": "User Requests", - "header": { - "userRequests": "User Requests" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Accessed date", - "firstSeen": "First seen" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cached size", - "duration": "Duration", - "size": "Size", - "track": "Track" - }, - "upload": { - "name": "Name" - } - }, - "link": { - "account": "Account", - "domain": "Domain", - "importStatus": "Import status", - "library": "Library", - "remoteProfile": "Open remote profile", - "type": "Type", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "local": "Local", - "uploadData": "Upload date" - }, - "button": { - "delete": "Delete", - "download": "Download" - }, - "modal": { - "delete": { - "header": "Delete this upload?", - "content": { - "warning": "The upload will be removed. This action is irreversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artists", - "domain": "Domain", - "reports": "Linked reports", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin", - "visibility": "Visibility" - }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "libraryData": "Library data", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "library": { - "description": "Description", - "name": "Name" - }, - "activity": { - "firstSeen": "First seen", - "followers": "Followers" - } - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this library?", - "content": { - "warning": "The library will be removed, as well as associated uploads, and follows. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activity", - "albumData": "Album data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "album": { - "description": "Description", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activity", - "artistData": "Artist data", - "audioContent": "Audio content", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Category", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "tracks": "Tracks", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "artist": { - "description": "Description", - "name": "Name" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be removed, as well as associated uploads, tracks, albums, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "TagDetail": { - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "tagData": "Tag data" - }, - "link": { - "albums": "Albums", - "artists": "Artists", - "localProfile": "Open local profile", - "tracks": "Tracks", - "django": "View in Django's admin" - }, - "button": { - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this tag?", - "content": { - "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "First seen" - }, - "tag": { - "name": "Name" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activity", - "local": "Local", - "trackData": "Track data" - }, - "link": { - "album": "Album", - "albumArtist": "Album artist", - "artist": "Artist", - "domain": "Domain", - "edits": "Edits", - "libraries": "Libraries", - "reports": "Linked reports", - "localProfile": "Open local profile", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", - "uploads": "Uploads", - "django": "View in Django's admin" - }, - "table": { - "trackData": { - "cachedSize": "Cached size", - "totalSize": "Total size" - }, - "track": { - "copyright": "Copyright", - "description": "Description", - "discNumber": "Disc number", - "license": "License", - "position": "Position", - "title": "Title" - }, - "activity": { - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "listenings": "Listenings", - "playlists": "Playlists" - } - }, - "button": { - "delete": "Delete", - "edit": "Edit", - "remoteRefresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." - } - } - }, - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artists", - "channels": "Channels", - "edits": "Edits", - "libraries": "Libraries", - "tags": "Tags", - "tracks": "Tracks", - "uploads": "Uploads" - }, - "title": "Manage library", - "menu": { - "secondary": "Secondary menu" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "View in Django's admin", + "localProfile": "Open local profile" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." + }, + "header": "Delete this channel?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Category", - "description": "Description", - "domain": "Domain", - "name": "Name", - "rss": "RSS Feed", - "url": "URL" + "activity": { + "edits": "Edits", + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "linkedReports": "Linked reports", + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { "albums": "Albums", @@ -4084,40 +3316,16 @@ "tracks": "Tracks", "uploads": "Uploads" }, - "activity": { - "edits": "Edits", - "favorited": "Favourited tracks", - "firstSeen": "First seen", - "linkedReports": "Linked reports", - "listenings": "Listenings", - "playlists": "Playlists" + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS Feed", + "url": "URL" } }, - "header": { - "activity": "Activity", - "audioContent": "Audio content", - "channelData": "Channel data" - }, - "button": { - "delete": "Delete", - "openRemote": "Open remote profile", - "refresh": "Refresh from remote server" - }, - "modal": { - "delete": { - "header": "Delete this channel?", - "content": { - "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, "warning": { "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } @@ -4141,53 +3349,1205 @@ "channels": "Channels", "federation": "Federation", "instanceInfo": "Instance information", - "settings": "Instance settings", "moderation": "Moderation", "music": "Music", "playlists": "Playlists", "sections": "Sections", "security": "Security", + "settings": "Instance Settings", "signups": "Sign-ups", "stats": "Statistics", "subsonic": "Subsonic", "ui": "User Interface" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "albumData": "Album data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be removed, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this album?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favourites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen", + "followers": "Followers" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "TagDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." + }, + "header": "Delete this tag?" + } + }, + "table": { + "activity": { + "firstSeen": "First seen" + }, + "tag": { + "name": "Name" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "local": "Local", + "trackData": "Track data" + }, + "link": { + "album": "Album", + "albumArtist": "Album artist", + "artist": "Artist", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be removed, as well as associated uploads, favourites and listening history. This action is irreversible." + }, + "header": "Delete this track?" + } + }, + "table": { + "activity": { + "favorited": "Favourited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, + "trackData": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "UploadDetail": { + "button": { + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload date" + }, + "link": { + "account": "Account", + "django": "View in Django's admin", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The upload will be removed. This action is irreversible." + }, + "header": "Delete this upload?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Accessed date", + "firstSeen": "First seen" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Add a moderation policy" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Library", + "moderation": "Moderation", + "settings": "Settings" + } + }, + "table": { + "accountData": { + "displayName": "Display name", + "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", + "loginStatus": { + "disabled": "Disabled", + "enabled": "Enabled", + "label": "Login status" + }, + "permissions": "Permissions", + "signupDate": "Sign-up date", + "userType": "Type", + "username": "Username" + }, + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "megabyte": "MB", + "totalSize": "Total size", + "uploadQuota": "Upload quota" + } + }, + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Moderation" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Add a moderation policy", + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" + }, + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" + }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activity", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, + "instanceData": { + "domainName": "Name", + "inAllowList": { + "false": "No", + "label": "Is present on allow-list", + "true": "Yes" + }, + "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Total users" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "DomainsList": { + "button": { + "add": "Add" + }, + "header": { + "domains": "Domains", + "failure": "Error while creating domain" + }, + "label": { + "addDomain": "Add a domain", + "addToAllowList": "Add to allow-list" + }, + "title": "Domains" + }, + "ReportsList": { + "header": { + "reports": "Reports" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "resolved": "Resolved", + "unresolved": "Unresolved" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + }, + "title": "Reports" + }, + "RequestsList": { + "header": { + "userRequests": "User Requests" + }, + "label": { + "search": "Search", + "status": "Status" + }, + "option": { + "status": { + "all": "All", + "approved": "Approved", + "pending": "Pending", + "refused": "Refused" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" + } + }, "users": { "Base": { "link": { "invitations": "Invitations", "users": "Users" }, - "title": "Manage users", "menu": { "secondary": "Secondary menu" + }, + "title": "Manage users" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logging in…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Could not confirm your e-mail address", + "success": "E-mail address confirmed" + }, + "label": { + "confirmationCode": "Confirmation code" + }, + "link": { + "back": "Return to login", + "login": "Proceed to login" + }, + "message": { + "success": "You can now use the service without limitations" + }, + "title": "Confirm your e-mail address" + }, + "Login": { + "header": { + "login": "Log in to your Funkwhale account" + }, + "title": "Log In" + }, + "PasswordReset": { + "button": { + "requestReset": "Ask for a password reset" + }, + "header": { + "failure": "Error while asking for a password reset", + "reset": "Reset your password" + }, + "help": { + "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." + }, + "label": { + "email": "Account's e-mail address" + }, + "link": { + "back": "Back to login" + }, + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Update your password" + }, + "header": { + "failure": "Error while changing your password", + "success": "Password updated successfully" + }, + "label": { + "newPassword": "New password" + }, + "link": { + "back": "Back to login", + "login": "Proceed to login" + }, + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." + }, + "title": "Change your password" + }, + "Plugins": { + "title": "Manage plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlists", + "recentlyFavorited": "Recently favourited", + "recentlyListened": "Recently listened" + } + }, + "ProfileBase": { + "label": { + "self": "This is you!" + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" + }, + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" + }, + "link": { + "addNew": "Add New" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Create a Funkwhale account" + }, + "title": "Sign up" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Delete…", + "edit": "Edit…", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" + }, + "header": { + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "delete": { + "content": { + "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this Channel?" + }, + "embed": { + "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy-paste the following URL in your favourite podcatcher:" + }, + "header": "Subscribe via RSS" + } + } + }, + "title": "Channel" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Latest episodes", + "latestTracks": "Latest tracks", + "series": "Series", + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" + }, + "link": { + "addAlbum": "Add new", + "erroredUploads": "View errored uploads", + "skippedUploads": "View skipped uploads" + }, + "message": { + "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" + }, + "link": { + "addNew": "Add new" + }, + "modal": { + "subscription": { + "header": "Subscription" + } + }, + "placeholder": { + "search": "Filter by name…" + }, + "title": "Subscribed Channels" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Libraries", + "tracks": "Tracks" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" + }, + "Home": { + "button": { + "start": "Get started" + }, + "description": { + "channel": { + "1": "If you are a musician or a podcaster, channels are designed for you!", + "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." + }, + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." + }, + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" + }, + "libraries": { + "Card": { + "button": { + "upload": "Upload" + }, + "label": { + "size": "Total size of the files in this library" + }, + "link": { + "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + } + }, + "FilesTable": { + "action": { + "delete": "Delete", + "restartImport": "Restart import" + }, + "button": { + "showStatus": "Show information about the upload status for this track" + }, + "empty": { + "noTracks": "No tracks have been added to this library yet" + }, + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } + }, + "Form": { + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" + }, + "description": { + "library": "Libraries help you organise and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", + "visibility": "You are able to share your library with other people, regardless of its visibility." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Description", + "name": "Name", + "visibility": "Visibility" + }, + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "Library deleted", + "libraryUpdated": "Library updated" + }, + "modal": { + "delete": { + "content": { + "warning": "The library and all its tracks will be deleted. This can not be undone." + }, + "header": "Delete this library?" + } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" + } + }, + "Home": { + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." + }, + "header": { + "libraries": "My libraries" + }, + "link": { + "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading libraries…" + } + }, + "Quota": { + "button": { + "purge": "Purge" + }, + "header": { + "currentUsage": "Current usage" + }, + "label": { + "currentUsage": "{amount} used on {max} allowed", + "errored": "Errored files", + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" + }, + "link": { + "viewFiles": "View files" + }, + "loading": { + "currentUsage": "Loading usage data…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" + }, + "error": { + "follow": "Cannot follow remote library: {error}", + "unfollow": "Cannot unfollow remote library: {error}" + }, + "label": { + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", + "scanPending": "Scan pending", + "scanProgress": "Scanning ({progress})", + "scanSuccess": "Scanned", + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update:", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "modal": { + "unfollow": { + "content": { + "warning": "By unfollowing this library, you lose access to its content." + }, + "header": "Unfollow this library?" + } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } + }, + "Home": { + "button": { + "refresh": "Refresh" + }, + "description": { + "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." + }, + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote libraries…" + } + }, + "ScanForm": { + "button": { + "submit": "Submit search" + }, + "header": { + "failure": "Could not fetch remote library" + }, + "label": { + "search": "Search a remote library" + }, + "placeholder": { + "url": "Enter a library URL" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artists", - "playlists": "Playlists", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Tags", - "tracks": "Tracks" + "library": { + "DetailAlbums": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "header": { - "search": "Search", - "remote": "Search a remote object", - "rss": "Subscribe to a podcast RSS feed" + "DetailOverview": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } }, - "button": { - "submit": "Submit Search Query" + "DetailTracks": { + "empty": { + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" + } + }, + "Edit": { + "button": { + "accept": "Accept", + "reject": "Reject" + }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, + "loading": { + "followers": "Loading followers…" + }, + "table": { + "action": { + "header": { + "action": "Action", + "date": "Date", + "status": "Status", + "user": "User" + }, + "status": { + "accepted": "Accepted", + "pending": "Pending approval", + "rejected": "Rejected" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edit", + "upload": "Upload" + }, + "description": { + "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." + }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "owner": "Owned by {username}", + "tracks": "Tracks" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" + }, + "header": { + "tracks": "Tracks" + }, + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this playlist and cannot be undone." + }, + "header": "Do you want to delete the playlist {playlist}?" + }, + "embed": { + "header": "Embed this playlist on your website" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Create a playlist", + "manage": "Manage your playlists", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, + "label": { + "search": "Search" + }, "ordering": { "direction": { "ascending": "Ascending", @@ -4196,58 +4556,11 @@ }, "label": "Ordering" }, - "header": { - "browse": "Browsing playlists", - "playlists": "Playlists" - }, - "button": { - "create": "Create a playlist", - "manage": "Manage your playlists", - "search": "Search" - }, - "placeholder": { - "search": "Enter playlist name…" - }, - "empty": { - "noResults": "No results matching your query" - }, "pagination": { "results": "Results per page" }, - "label": { - "search": "Search" - } - }, - "Detail": { - "button": { - "cancel": "Cancel", - "delete": "Delete", - "confirm": "Delete playlist", - "edit": "Edit", - "embed": "Embed", - "playAll": "Play all", - "stopEdit": "Stop Editing" - }, - "modal": { - "delete": { - "header": "Do you want to delete the playlist \"{ playlist }\"?", - "content": { - "warning": "This will completely delete this playlist and cannot be undone." - } - }, - "embed": { - "header": "Embed this playlist on your website" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Playlist containing { n } track, by { username } | Playlist containing { n } tracks, by { username }" - }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - }, - "header": { - "tracks": "Tracks" + "placeholder": { + "search": "Enter playlist name…" } } }, @@ -4255,292 +4568,48 @@ "Detail": { "button": { "confirm": "Delete radio", + "delete": "Delete", "edit": "Edit…" }, - "modal": { - "delete": { - "header": "Do you want to delete the radio \"{ radio }\"?", - "content": { - "warning": "This will completely delete this radio and cannot be undone." - } - } - }, "empty": { "noTracks": "No tracks have been added to this radio yet" }, - "title": "Radio", "header": { + "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } track was added to your queue | { n } tracks were added to your queue" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Access to audio files, libraries, artists, albums and tracks", - "label": "Libraries and uploads" - }, - "filters": { - "description": "Access to content filters", - "label": "Content filters" - }, - "profile": { - "description": "Access to e-mail, username, and profile information", - "label": "Profile" - }, - "edits": { - "description": "Access to edits", - "label": "Edits" - }, - "follows": { - "description": "Access to follows", - "label": "Follows" - }, - "listenings": { - "description": "Access to listening history", - "label": "Listenings" - }, - "reports": { - "description": "Access to moderation reports", - "label": "Reports" - }, - "notifications": { - "description": "Access to notifications", - "label": "Notifications" - }, - "playlists": { - "description": "Access to playlists", - "label": "Playlists" - }, - "radios": { - "description": "Access to radios", - "label": "Radios" - }, - "security": { - "description": "Access to security settings such as password and authorisation", - "label": "Security" - }, - "favorites": { - "label": "Favourites" - } }, - "filters": { - "accessedDate": "Accessed date", - "albumTitle": "Album name", - "artistName": "Artist name", - "bitrate": "Bitrate", - "creationDate": "Creation date", - "domain": "Domain", - "duration": "Duration", - "expirationDate": "Expiry date", - "firstSeen": "First seen date", - "followers": "Followers", - "itemsCount": "Items", - "lastActivity": "Last activity", - "lastSeen": "Last seen date", - "modificationDate": "Modification date", - "name": "Name", - "receivedMessages": "Received messages", - "releaseDate": "Release date", - "dateJoined": "Sign-up date", - "size": "Size", - "trackTitle": "Track name", - "uploads": "Uploads", - "username": "Username", - "users": "Users" - }, - "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visibility level of your activity", - "shortChoices": { - "public": "Everyone", - "instance": "Instance", - "private": "Private" + "modal": { + "delete": { + "content": { + "warning": "This will completely delete this radio and cannot be undone." }, - "choices": { - "instance": "Everyone on this instance", - "public": "Everyone, across all instances", - "private": "Nobody except me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Category", - "choices": { - "illegalContent": "Illegal content", - "invalidMetadata": "Invalid metadata", - "offensiveContent": "Offensive content", - "other": "Other", - "takedownRequest": "Takedown request" - } - }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - } - } - }, - "contentCategory": { - "label": "Content category", - "choices": { - "music": "Music", - "other": "Other", - "podcast": "Podcast" - } + "header": "Do you want to delete the radio {radio}?" } - } + }, + "title": "Radio" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Report this album…" - }, - "artist": { - "typeLabel": "Artist", - "label": "Report this artist…" - }, - "channel": { - "typeLabel": "Channel", - "label": "Report this channel…" - }, - "library": { - "typeLabel": "Library", - "label": "Report this library…" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Report this playlist…" - }, - "track": { - "label": "Report this track…", - "typeLabel": "Track" - } + "ChooseInstance": { + "button": { + "submit": "Submit" }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Release date", - "title": "Title" - }, - "artist": { - "label": "Artist" - }, - "channel": { - "label": "Channel" - }, - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title", - "label": "Track" - }, - "creationDate": { - "label": "Creation date" - }, - "library": { - "description": "Description", - "label": "Library" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Name" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Tags" - }, - "visibility": { - "label": "Visibility" - } + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "License", - "position": "Position", - "title": "Title" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Description" - }, - "artist": { - "name": "Name" - }, - "album": { - "releaseDate": "Release date", - "title": "Title" - }, - "tags": { - "label": "Tags" - } + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" + }, + "label": { + "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } - }, - "useThemeList": { - "darkTheme": "Dark", - "lightTheme": "Light" } - }, - "init": { - "serviceWorker": { - "newAppVersion": "A new version of the app is available.", - "actions": { - "later": "Later", - "update": "Update" - } - }, - "axios": { - "rateLimitDelay": "You sent too many requests and have been rate limited, please try again in { delay }", - "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" - } - }, - "App": { - "loading": "Loading..." } } diff --git a/front/src/locales/en_US.json b/front/src/locales/en_US.json index 4165c63e3..430e5375d 100644 --- a/front/src/locales/en_US.json +++ b/front/src/locales/en_US.json @@ -1,377 +1,354 @@ { "App": { - "loading": "Loading..." + "loading": "Loading…" }, "components": { "About": { - "title": "About", - "header": { - "funkwhale": "A social platform to enjoy and share music", - "signup": "Sign up", - "publicContent": "Browse public content", - "findApp": "Find an app", - "aboutPod": "About this pod" - }, "description": { + "findApp": "Use Funkwhale on other devices with our apps.", "funkwhale": "Funkwhale is a community-driven project that lets you listen and share music and audio within a decentralized, open network.", - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "publicContent": "Listen to public albums and playlists shared on this pod.", - "findApp": "Use Funkwhale on other devices with our apps." + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" }, - "placeholder": { - "noDescription": "No description available" + "header": { + "aboutPod": "About this pod", + "findApp": "Find an app", + "funkwhale": "A social platform to enjoy and share music", + "publicContent": "Browse public content", + "signup": "Sign up" + }, + "help": { + "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "learnMore": "Learn more" }, "message": { "greeting": "Hello {username}", "loggedIn": "You're already signed in!" }, - "link": { - "learnMore": "Learn more", - "findOtherPod": "Find another pod" + "placeholder": { + "noDescription": "No description available" }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "closedRegistrations": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "About" }, "AboutPod": { - "title": "About", - "notApplicable": "N/A", + "feature": { + "allowList": "Allow-list", + "anonymousAccess": "Anonymous access", + "federation": "Federation", + "quota": "Upload quota", + "registrations": "Registrations", + "status": { + "closed": "Closed", + "disabled": "Disabled", + "enabled": "Enabled", + "open": "Open" + }, + "version": "Funkwhale version" + }, "header": { "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", "contact": "Contact", - "statistics": "Statistics" + "features": "Features", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" }, + "link": { + "about": "About this pod", + "features": "Features", + "introduction": "Introduction", + "rules": "Rules", + "statistics": "Statistics", + "terms": "Terms and privacy policy" + }, + "message": { + "contact": "Send us an email: { contactEmail }" + }, + "notApplicable": "N/A", "placeholder": { "noDescription": "No description available", "noRules": "No rules available", "noTerms": "No terms available" }, - "message": { - "contact": "Send us an email: { contactEmail }" - }, - "link": { - "about": "About this pod", - "rules": "Rules", - "terms": "Terms and privacy policy", - "features": "Features", - "statistics": "Statistics", - "introduction": "Introduction" - }, - "feature": { - "version": "Funkwhale version", - "federation": "Federation", - "allowList": "Allow-list", - "anonymousAccess": "Anonymous access", - "registrations": "Registrations", - "quota": "Upload quota", - "status": { - "enabled": "Enabled", - "disabled": "Disabled", - "open": "Open", - "closed": "Closed" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", - "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", - "artistsCount": "0 artists | {n} artist | {n} artists", "albumsCount": "0 albums | {n} album | {n} albums", - "tracksCount": "0 tracks | {n} track | {n} tracks", - "listeningsCount": "0 listenings | {n} listening | {n} listenings" - } + "artistsCount": "0 artists | {n} artist | {n} artists", + "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music", + "listeningsCount": "0 listenings | {n} listening | {n} listenings", + "tracksCount": "0 tracks | {n} track | {n} tracks" + }, + "title": "About" }, "Home": { - "title": "Home", - "header": { - "welcome": "Welcome to {podName}!", - "about": "About this Funkwhale pod", - "statistics": "Statistics", - "contact": "Contact", - "aboutFunkwhale": "About Funkwhale", - "login": "Log in", - "signup": "Sign up", - "links": "Useful links", - "newAlbums": "Recently added albums", - "newChannels": "New channels" - }, "description": { - "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!", - "quota": "Users on this pod also get {quota} of free storage to upload their own content!", "funkwhale": { "paragraph1": "This pod runs Funkwhale, a community-driven project that lets you listen and share music and audio within a decentralized, open network.", "paragraph2": "Funkwhale is free and developed by a friendly community of volunteers." - } + }, + "quota": "Users on this pod also get {quota} of free storage to upload their own content!", + "signup": "Sign up now to keep a track of your favorites, create playlists, discover new content and much more!" + }, + "header": { + "about": "About this Funkwhale pod", + "aboutFunkwhale": "About Funkwhale", + "contact": "Contact", + "links": "Useful links", + "login": "Log in", + "newAlbums": "Recently added albums", + "newChannels": "New channels", + "signup": "Sign up", + "statistics": "Statistics", + "welcome": "Welcome to {podName}!" + }, + "help": { + "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." + }, + "link": { + "findOtherPod": "Find another pod", + "funkwhale": "Visit funkwhale.audio", + "learnMore": "Learn more", + "mobileApps": { + "description": "Use Funkwhale on other devices with our apps", + "label": "Mobile apps" + }, + "publicContent": { + "description": "Listen to public albums and playlists shared on this pod.", + "label": "Browse public content" + }, + "rules": "Server rules", + "userGuides": { + "description": "Discover everything you need to know about Funkwhale and its features", + "label": "User guides" + }, + "viewMore": "View more…" }, "placeholder": { "noDescription": "No description available" }, - "link": { - "learnMore": "Learn more", - "rules": "Server rules", - "funkwhale": "Visit funkwhale.audio", - "findOtherPod": "Find another pod", - "viewMore": "View more…", - "publicContent": { - "label": "Browse public content", - "description": "Listen to public albums and playlists shared on this pod." - }, - "mobileApps": { - "label": "Mobile apps", - "description": "Use Funkwhale on other devices with our apps" - }, - "userGuides": { - "label": "User guides", - "description": "Discover everything you need to know about Funkwhale and its features" - } - }, "stat": { "activeUsers": "No active users | {n} active user | {n} active users", "hoursOfMusic": "0 hours of music | {n} hour of music | {n} hours of music" }, - "help": { - "registrationsClosed": "Registrations are closed on this pod. You can signup on another pod using the link below." - } + "title": "Home" }, "PageNotFound": { - "title": "Page not found", "header": { "pageNotFound": "Page not found!" }, + "link": { + "home": "Go to home page" + }, "message": { "pageNotFound": "Sorry, the page you asked for does not exist:" }, - "link": { - "home": "Go to home page" - } + "title": "Page not found" }, "Queue": { - "label": { - "queue": "Queue", - "populatingRadio": "Fetching radio track...", - "duration": "Duration", - "addArtistContentFilter": "Hide content from this artist…", - "restart": "Restart track", - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play", - "remove": "Remove", - "selectTrack": "Select track", - "favorite": "Favorite track", - "enterFullscreen": "Enter fullscreen mode", - "exitFullscreen": "Exit fullscreen mode", - "showCoverArt": "Show Cover Art", - "showVisualizer": "Show MoonDrop visualizer" + "button": { + "clear": "Clear", + "close": "Close", + "stopRadio": "Stop radio" }, "header": { "failure": "The track cannot be loaded", - "radio": "You have a radio playing", - "noSources": "The track has no available sources." + "noSources": "The track has no available sources.", + "radio": "You have a radio playing" + }, + "label": { + "addArtistContentFilter": "Hide content from this artist…", + "duration": "Duration", + "enterFullscreen": "Enter fullscreen mode", + "exitFullscreen": "Exit fullscreen mode", + "favorite": "Favorite track", + "next": "Next track", + "pause": "Pause", + "play": "Play", + "populatingRadio": "Fetching radio track…", + "previous": "Previous track", + "queue": "Queue", + "remove": "Remove", + "restart": "Restart track", + "selectTrack": "Select track", + "showCoverArt": "Show Cover Art", + "showVisualizer": "Show MoonDrop visualizer" }, "message": { "automaticPlay": "The next track will play automatically in a few seconds…", "radio": "New tracks will be appended here automatically.", "webglUnsupported": "Your browser doesn't appear to support WebGL2." }, - "warning": { - "connectivity": "You may have a connectivity issue." - }, - "button": { - "close": "Close", - "clear": "Clear", - "stopRadio": "Stop radio" - }, "meta": { + "end": "End", "queuePosition": "Track {index} of {length}", "startTime": "00:00", - "unknownArtist": "Unknown Artist", "unknownAlbum": "Unknown Album", - "end": "End" + "unknownArtist": "Unknown Artist" + }, + "warning": { + "connectivity": "You may have a connectivity issue." } }, "RemoteSearchForm": { - "label": { - "rss": { - "title": "Subscribe to a podcast RSS feed", - "fieldLabel": "RSS feed location", - "fieldPlaceholder": "https://website.example.com/rss.xml" - }, - "fediverse": { - "title": "Fediverse object", - "fieldLabel": "Fediverse object", - "fieldPlaceholder": "{'@'}username{'@'}example.com" - } + "button": { + "fediverse": "Fediverse", + "rss": "RSS", + "search": "Search" + }, + "description": { + "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse.", + "rss": "Use this form to subscribe to an RSS feed from its URL." + }, + "error": { + "fetchFailed": "This object cannot be retrieved" }, "header": { "fetchFailed": "Error while fetching object" }, - "description": { - "rss": "Use this form to subscribe to an RSS feed from its URL.", - "fediverse": "Use this form to subscribe to a channel hosted somewhere else on the Fediverse." - }, - "button": { - "search": "Search", - "rss": "RSS", - "fediverse": "Fediverse" - }, - "error": { - "fetchFailed": "This object cannot be retrieved" + "label": { + "fediverse": { + "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}username{'@'}example.com", + "title": "Fediverse object" + }, + "rss": { + "fieldLabel": "RSS feed location", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Subscribe to a podcast RSS feed" + } }, "warning": { "unsupported": "This kind of object isn't supported yet" } }, - "SetInstanceModal": { - "header": { - "chooseInstance": "Choose your instance", - "failure": "It is not possible to connect to the given URL", - "suggestions": "Suggested choices" - }, - "message": { - "newUrl": "You are now using the Funkwhale instance at {url}", - "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted." - }, - "help": { - "serverDown": "The server might be down", - "notFunkwhaleServer": "The given address is not a Funkwhale server", - "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices." - }, - "button": { - "submit": "Submit", - "cancel": "Cancel" - }, - "label": { - "url": "Instance URL" - } - }, "ShortcutsModal": { - "header": { - "modal": "Keyboard shortcuts" - }, "button": { "close": "Close" }, + "header": { + "modal": "Keyboard shortcuts" + }, "shortcut": { + "audio": { + "clearQueue": "Clear queue", + "decreaseVolume": "Decrease volume", + "expandQueue": "Expand queue/player view", + "increaseVolume": "Increase volume", + "label": "Audio player shortcuts", + "playNext": "Play next track", + "playPause": "Pause/play the current track", + "playPrevious": "Play previous track", + "seekBack30": "Seek backwards 30s", + "seekBack5": "Seek backwards 5s", + "seekForward30": "Seek forwards 30s", + "seekForward5": "Seek forwards 5s", + "shuffleQueue": "Shuffle queue", + "toggleFavorite": "Toggle favorite", + "toggleLoop": "Toggle queue looping", + "toggleMute": "Toggle mute" + }, "general": { + "focus": "Focus searchbar", "label": "General shortcuts", "show": "Show available keyboard shortcuts", - "focus": "Focus searchbar", "unfocus": "Unfocus searchbar" - }, - "audio": { - "label": "Audio player shortcuts", - "playPause": "Pause/play the current track", - "seekBack5": "Seek backwards 5s", - "seekForward5": "Seek forwards 5s", - "seekBack30": "Seek backwards 30s", - "seekForward30": "Seek forwards 30s", - "playPrevious": "Play previous track", - "playNext": "Play next track", - "increaseVolume": "Increase volume", - "decreaseVolume": "Decrease volume", - "toggleMute": "Toggle mute", - "expandQueue": "Expand queue/player view", - "toggleLoop": "Toggle queue looping", - "shuffleQueue": "Shuffle queue", - "clearQueue": "Clear queue", - "toggleFavorite": "Toggle favorite" } } }, "Sidebar": { + "header": { + "administration": "Administration", + "explore": "Explore", + "library": "My library", + "main": "Main navigation", + "more": "More" + }, "label": { + "add": "Add content", + "administration": "Administration", + "edits": "Pending review edits", + "follows": "Pending follow requests", + "language": "Language", "main": "Main menu", "play": "Play this track", - "follows": "Pending follow requests", - "edits": "Pending review edits", "reports": "Pending review reports", - "language": "Language", - "theme": "Theme", - "add": "Add content", - "administration": "Administration" - }, - "header": { - "main": "Main navigation", - "explore": "Explore", - "more": "More", - "library": "My library", - "administration": "Administration" + "theme": "Theme" }, "link": { - "home": "Home", - "search": "Search", - "browse": "Browse", - "podcasts": "Podcasts", + "about": "About this pod", "albums": "Albums", "artists": "Artists", - "playlists": "Playlists", - "radios": "Radios", - "favorites": "Favorites", + "browse": "Browse", "channels": "Channels", - "about": "About this pod", - "switchInstance": "Switch instance", - "moderation": "Moderation", - "users": "Users", + "createAccount": "Create account", + "favorites": "Favorites", + "home": "Home", "library": "Library", - "settings": "Settings", "login": "Login", - "createAccount": "Create account" + "moderation": "Moderation", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "search": "Search", + "settings": "Settings", + "switchInstance": "Switch instance", + "users": "Users" } }, "admin": { "SettingsGroup": { + "button": { + "save": "Save" + }, "header": { "error": "Error while saving settings.", "image": "Current image" }, "message": { "success": "Settings updated successfully." - }, - "button": { - "save": "Save" } }, "SignupFormBuilder": { - "label": { - "delete": "Delete", - "moveUp": "Move up", - "moveDown": "Move down", - "additionalField": "Additional field", - "helpText": "Help text", - "additionalFields": "Additional fields" - }, "button": { + "add": "Add a new field", "edit": "Edit form", - "preview": "Preview Form", - "add": "Add a new field" + "preview": "Preview Form" }, "help": { - "helpText": "An optional text to be displayed at the start of the sign-up form.", - "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled." + "additionalFields": "Additional form fields to be displayed in the form. Only shown if manual sign-up validation is enabled.", + "helpText": "An optional text to be displayed at the start of the sign-up form." + }, + "label": { + "additionalField": "Additional field", + "additionalFields": "Additional fields", + "delete": "Delete", + "helpText": "Help text", + "moveDown": "Move down", + "moveUp": "Move up" }, "table": { "additionalFields": { "header": { + "actions": "Actions", "label": "Field label", - "type": "Field type", "required": "Required", - "actions": "Actions" - }, - "type": { - "short": "Short text", - "long": "Long text" + "type": "Field type" }, "required": { - "true": "True", - "false": "False" + "false": "False", + "true": "True" + }, + "type": { + "long": "Long text", + "short": "Short text" } } } @@ -379,11 +356,11 @@ }, "audio": { "ChannelCard": { - "title": "Updated on {date}", "meta": { "episodes": "No episodes | {n} episode | {n} episodes", "tracks": "No tracks | {n} track | {n} tracks" - } + }, + "title": "Updated on {date}" }, "ChannelEntries": { "help": { @@ -391,38 +368,38 @@ } }, "ChannelForm": { - "label": { - "podcast": "Podcasts", - "discography": "Artist Discography", - "name": "Name", - "username": "Fediverse handle", - "image": "Channel Picture", - "tags": "Tags", - "language": "Language", - "description": "Description", - "category": "Category", - "subcategory": "Subcategory", - "email": "Owner e-mail address", - "owner": "Owner name" - }, - "help": { - "podcast": "Host your episodes and keep your community updated.", - "discography": "Publish music you make as a nice discography of albums and singles.", - "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later.", - "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes." - }, - "placeholder": { - "name": "Awesome channel name", - "username": "awesomechannelname" - }, "header": { "error": "Error while saving channel." }, + "help": { + "discography": "Publish music you make as a nice discography of albums and singles.", + "podcast": "Host your episodes and keep your community updated.", + "podcastFields": "Used for the itunes:email and itunes:name field required by certain platforms such as Spotify or iTunes.", + "username": "Used in URLs and to follow this channel in the Fediverse. It cannot be changed later." + }, + "label": { + "category": "Category", + "description": "Description", + "discography": "Artist Discography", + "email": "Owner e-mail address", + "image": "Channel Picture", + "language": "Language", + "name": "Name", + "owner": "Owner name", + "podcast": "Podcasts", + "subcategory": "Subcategory", + "tags": "Tags", + "username": "Fediverse handle" + }, "legend": { "purpose": "What will this channel be used for?" }, "loader": { "loading": "Loading" + }, + "placeholder": { + "name": "Awesome channel name", + "username": "awesomechannelname" } }, "ChannelSerieCard": { @@ -444,8 +421,11 @@ } }, "EmbedWizard": { - "warning": { - "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." + "button": { + "copy": "Copy" + }, + "header": { + "preview": "Preview" }, "help": { "anonymous": "Please contact your admins and ask them to update the corresponding setting.", @@ -453,44 +433,41 @@ "width": "Leave empty for a responsive widget" }, "label": { - "width": "Widget width", + "embed": "Embed code", "height": "Widget height", - "embed": "Embed code" - }, - "button": { - "copy": "Copy" - }, - "header": { - "preview": "Preview" + "width": "Widget width" }, "message": { "copy": "Text copied to clipboard!" + }, + "warning": { + "anonymous": "Sharing will not work because this pod doesn't allow anonymous users to access content." } }, "LibraryFollowButton": { "button": { - "unfollow": "Unfollow", "cancel": "Cancel follow request", - "follow": "Follow" + "follow": "Follow", + "unfollow": "Unfollow" } }, "PlayButton": { "button": { - "playNow": "Play now", - "addToQueue": "Add to current queue", - "playNext": "Play next", - "startRadio": "Play similar songs", - "report": "Report…", "addToPlaylist": "Add to playlist", + "addToQueue": "Add to current queue", + "discretePlay": "Play", + "episodeDetails": "Episode details", "hideArtist": "Hide content from this artist", - "playTrack": "Play track", "playAlbum": "Play album", "playArtist": "Play artist", + "playNext": "Play next", + "playNow": "Play now", "playPlaylist": "Play playlist", + "playTrack": "Play track", "playTracks": "Play tracks", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "discretePlay": "Play" + "report": "Report…", + "startRadio": "Play similar songs", + "trackDetails": "Track details" }, "title": { "more": "More…", @@ -498,70 +475,78 @@ } }, "Player": { + "header": { + "player": "Audio player and controls" + }, "label": { + "addArtistContentFilter": "Hide content from this artist…", "audioPlayer": "Media player", - "previousTrack": "Previous track", - "play": "Play", - "pause": "Pause", - "nextTrack": "Next track", - "unmute": "Unmute", - "mute": "Mute", + "clearQueue": "Clear your queue", "expandQueue": "Expand queue", "loopingDisabled": "Looping disabled. Click to switch to single-track looping.", "loopingSingle": "Looping on a single track. Click to switch to whole queue looping.", "loopingWholeQueue": "Looping on whole queue. Click to disable looping.", + "mute": "Mute", + "nextTrack": "Next track", + "pause": "Pause", + "play": "Play", + "previousTrack": "Previous track", "shuffleQueue": "Shuffle your queue", - "clearQueue": "Clear your queue", - "addArtistContentFilter": "Hide content from this artist…" - }, - "header": { - "player": "Audio player and controls" + "unmute": "Unmute" }, "meta": { "position": "{index} of {length}", - "unknownArtist": "Unknown Artist", - "unknownAlbum": "Unknown Album" + "unknownAlbum": "Unknown Album", + "unknownArtist": "Unknown Artist" + } + }, + "PlayerControls": { + "labels": { + "next": "Next track", + "pause": "Pause", + "play": "Play", + "previous": "Previous track" } }, "Search": { - "header": { - "search": "Search for some music", - "artists": "Artists", - "albums": "Albums" - }, "empty": { - "noArtists": "No artist matched your query", - "noAlbums": "No album matched your query" + "noAlbums": "No album matched your query", + "noArtists": "No artist matched your query" + }, + "header": { + "albums": "Albums", + "artists": "Artists", + "search": "Search for some music" }, "placeholder": { "search": "Artist, album, track…" } }, "SearchBar": { - "placeholder": { - "search": "Search for artists, albums, tracks…" - }, - "label": { - "search": "Search for content", - "artist": "Artist", - "album": "Album", - "track": "Track", - "tag": "Tag", - "category": { - "federation": "Federation", - "podcasts": "Podcasts" - } - }, - "link": { - "rss": "Subscribe to podcast via RSS", - "fediverse": "Search on the fediverse", - "more": "More results 🡒" + "empty": { + "noResults": "Sorry, there are no results for this search" }, "header": { "noResults": "No matches found" }, - "empty": { - "noResults": "Sorry, there are no results for this search" + "label": { + "album": "Album", + "artist": "Artist", + "category": { + "federation": "Federation", + "podcasts": "Podcasts" + }, + "search": "Search for content", + "tag": "Tag", + "track": "Track" + }, + "link": { + "fediverse": "Search on the fediverse", + "more": "More results 🡒", + "rss": "Subscribe to podcast via RSS" + }, + "placeholder": { + "search": "Search for artists, albums, tracks…" } }, "VolumeControl": { @@ -588,8 +573,8 @@ "artist": { "Card": { "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" } }, "Widget": { @@ -607,18 +592,18 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } } }, @@ -631,26 +616,26 @@ "Modal": { "button": { "addToFavorites": "Add to favorites", - "removeFromFavorites": "Remove from favorites", - "episodeDetails": "Episode details", - "trackDetails": "Track details", - "seriesDetails": "View series", - "albumDetails": "View album", - "channelDetails": "View channel", - "artistDetails": "View artist", - "startRadio": "Play radio", - "playNow": "Play now", + "addToPlaylist": "Add to playlist", "addToQueue": "Add to queue", + "albumDetails": "View album", + "artistDetails": "View artist", + "channelDetails": "View channel", + "episodeDetails": "Episode details", "playNext": "Play next", - "addToPlaylist": "Add to playlist" + "playNow": "Play now", + "removeFromFavorites": "Remove from favorites", + "seriesDetails": "View series", + "startRadio": "Play radio", + "trackDetails": "Track details" } }, "Table": { "table": { "header": { - "title": "Title", "album": "Album", - "artist": "Artist" + "artist": "Artist", + "title": "Title" } } }, @@ -662,102 +647,94 @@ "noResults": "Nothing found" } } - }, - "PlayerControls": { - "labels": { - "previous": "Previous track", - "next": "Next track", - "pause": "Pause", - "play": "Play" - } } }, "auth": { "ApplicationEdit": { - "title": "Edit application", - "link": { - "settings": "Back to settings" + "button": { + "regenerateToken": "Regenerate token" }, "header": { "appDetails": "Application Details", - "editApp": "Edit application", - "appSecretWarning": "Keep a copy of this token in a safe place." - }, - "message": { - "appSecretWarning": "You won't be able to see it again once you leave this screen." + "appSecretWarning": "Keep a copy of this token in a safe place.", + "editApp": "Edit application" }, "help": { "appDetails": "Application ID and secret are really sensitive values and must be treated like passwords. Do not share those with anyone else." }, "label": { + "accessToken": "Access token", "appId": "Application ID", - "appSecret": "Application secret", - "accessToken": "Access token" + "appSecret": "Application secret" }, - "button": { - "regenerateToken": "Regenerate token" - } + "link": { + "settings": "Back to settings" + }, + "message": { + "appSecretWarning": "You won't be able to see it again once you leave this screen." + }, + "title": "Edit application" }, "ApplicationForm": { + "button": { + "create": "Create application", + "update": "Update application" + }, "header": { "failure": "We cannot save your changes" }, + "help": { + "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." + }, "label": { "name": "Name", "redirectUri": "Redirect URI", "scopes": { - "label": "Scopes", "description": "Checking the parent \"Read\" or \"Write\" scopes implies access to all the corresponding children scopes.", + "label": "Scopes", "read": { - "label": "Read", - "description": "Read-only access to user data" + "description": "Read-only access to user data", + "label": "Read" }, "write": { - "label": "Write", - "description": "Write-only access to user data" + "description": "Write-only access to user data", + "label": "Write" } } - }, - "button": { - "update": "Update application", - "create": "Create application" - }, - "help": { - "redirectUri": "Use \"urn:ietf:wg:oauth:2.0:oob\" as a redirect URI if your application is not served on the web." } }, "ApplicationNew": { - "title": "Create a new application", "link": { "settings": "Back to settings" - } + }, + "title": "Create a new application" }, "Authorize": { - "title": "Allow application", + "button": { + "authorize": "Authorize {app}" + }, "header": { + "access": "{app_name} wants to access your Funkwhale account", + "allScopes": "Full access", "authorize": "Authorize third-party app", "authorizeFailure": "Error while fetching application data", "fetchFailure": "Error while fetching application data", - "access": "{app_name} wants to access your Funkwhale account", - "writeOnly": "Write-only", "readOnly": "Read-only", - "allScopes": "Full access" + "writeOnly": "Write-only" + }, + "help": { + "copyCode": "You will be shown a code to copy-past in the application", + "pasteCode": "Copy-paste the following code in the application:", + "redirect": "You will be redirected to { 0 }" }, "message": { "unknownPermissions": "The application is also requesting the following unknown permissions:" }, - "button": { - "authorize": "Authorize {app}" - }, - "help": { - "copyCode": "You will be shown a code to copy-past in the application", - "redirect": "You will be redirected to { 0 }", - "pasteCode": "Copy-paste the following code in the application:" - } + "title": "Allow application" }, "LoginForm": { - "placeholder": { - "username": "Enter your username or e-mail address" + "button": { + "login": "Login" }, "header": { "loginFailure": "We cannot log you in" @@ -767,160 +744,156 @@ "invalidCredentials": "Please double-check that your username and password combination is correct and make sure you verified your e-mail address." }, "label": { - "username": "Username or e-mail address", - "password": "Password" - }, - "button": { - "login": "Login" + "password": "Password", + "username": "Username or e-mail address" }, "link": { - "resetPassword": "Reset your password", - "createAccount": "Create an account" + "createAccount": "Create an account", + "resetPassword": "Reset your password" }, "message": { "redirect": "You will be redirected to {domain} to authenticate" + }, + "placeholder": { + "username": "Enter your username or e-mail address" } }, "Logout": { - "title": "Log out", + "button": { + "logout": "Yes, log me out!" + }, "header": { "confirm": "Are you sure you want to log out?", "unauthenticated": "You aren't currently logged in" }, - "button": { - "logout": "Yes, log me out!" - }, "link": { "login": "Log in!" }, "message": { "loggedIn": "You are currently logged in as {username}" - } + }, + "title": "Log out" }, "Plugin": { - "header": { - "failure": "Error while saving plugin" - }, - "link": { - "documentation": "Documentation" - }, "button": { "save": "Save", "scan": "Scan" }, + "description": { + "library": "Library where files should be imported." + }, + "header": { + "failure": "Error while saving plugin" + }, "label": { "library": "Library", "pluginEnabled": "Enabled" }, - "description": { - "library": "Library where files should be imported." + "link": { + "documentation": "Documentation" } }, "Settings": { - "title": "Account Settings", - "message": { - "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", - "currentEmail": "Your current e-mail address is {email}" - }, - "header": { - "accountSettings": "Account settings", - "settingsUpdated": "Settings updated", - "updateFailure": "Your settings can't be updated", - "avatar": "Avatar", - "avatarFailure": "Your avatar cannot be saved", - "changePassword": "Change my password", - "passwordFailure": "Your password cannot be changed", - "contentFilters": "Content filters", - "hiddenArtists": "Hidden artists", - "authorizedApps": "Authorized apps", - "noApps": "You don't have any application connected with your account.", - "yourApps": "Your applications", - "noPersonalApps": "You don't have registered any application yet.", - "plugins": "Plugins", - "changeEmail": "Change my e-mail address", - "emailFailure": "We cannot change your e-mail address", - "deleteAccount": "Delete my account", - "accountFailure": "We cannot delete your account" + "button": { + "delete": "Delete", + "deleteAccount": "Delete my account…", + "deleteAccountConfirm": "Delete my account", + "disableSubsonic": "Disable access", + "edit": "Edit", + "password": "Change password", + "refresh": "Refresh", + "remove": "Remove", + "removeApp": "Remove application", + "revoke": "Revoke", + "revokeAccess": "Revoke access", + "update": "Update", + "updateSettings": "Update settings" }, "description": { + "authorizedApps": "This is the list of applications that have access to your account data.", + "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", "changePassword": { "paragraph1": "Changing your password will also change your Subsonic API password if you have requested one.", "paragraph2": "You will have to update your password on your clients that use this password." }, "contentFilters": "Content filters help you hide content you don't want to see on the service.", - "authorizedApps": "This is the list of applications that have access to your account data.", - "yourApps": "This is the list of applications that you have registered.", + "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation.", "plugins": "Use plugins to extend Funkwhale and get additional features.", - "changeEmail": "Change the e-mail address associated with your account. We will send a confirmation to the new address.", - "deleteAccount": "You can permanently and irreversibly delete your account and all the associated data using the form below. You will be asked for confirmation." + "yourApps": "This is the list of applications that you have registered." }, - "button": { - "update": "Update", - "updateSettings": "Update settings", - "password": "Change password", - "disableSubsonic": "Disable access", - "refresh": "Refresh", - "delete": "Delete", - "revoke": "Revoke", - "revokeAccess": "Revoke access", - "edit": "Edit", - "remove": "Remove", - "removeApp": "Remove application", - "deleteAccount": "Delete my account…", - "deleteAccountConfirm": "Delete my account" + "header": { + "accountFailure": "We cannot delete your account", + "accountSettings": "Account settings", + "authorizedApps": "Authorized apps", + "avatar": "Avatar", + "avatarFailure": "Your avatar cannot be saved", + "changeEmail": "Change my e-mail address", + "changePassword": "Change my password", + "contentFilters": "Content filters", + "deleteAccount": "Delete my account", + "emailFailure": "We cannot change your e-mail address", + "hiddenArtists": "Hidden artists", + "noApps": "You don't have any application connected with your account.", + "noPersonalApps": "You don't have registered any application yet.", + "passwordFailure": "Your password cannot be changed", + "plugins": "Plugins", + "settingsUpdated": "Settings updated", + "updateFailure": "Your settings can't be updated", + "yourApps": "Your applications" }, "help": { "changePassword": "Please double-check your password is correct", "noApps": "If you authorize third-party applications to access your data, those applications will be listed here.", "noPersonalApps": "Register one to integrate Funkwhale with third-party applications." }, - "warning": { - "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." - }, - "link": { - "newApp": "Register a new application", - "managePlugins": "Manage plugins" - }, "label": { "avatar": "Avatar", - "password": "Password", "currentPassword": "Current password", + "newEmail": "New e-mail address", "newPassword": "New password", - "newEmail": "New e-mail address" + "password": "Password" + }, + "link": { + "managePlugins": "Manage plugins", + "newApp": "Register a new application" + }, + "message": { + "confirmDelete": "Your deletion request was submitted, your account and content will be deleted shortly", + "currentEmail": "Your current e-mail address is {email}" }, "modal": { "changePassword": { - "header": "Change your password?", "content": { - "warning": "Changing your password will have the following consequences", "logout": "You will be logged out from this session and have to log in with the new one", - "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password" - } - }, - "revokeApp": { - "header": "Revoke access for application {app}?", - "content": { - "warning": "This will prevent this application from accessing the service on your behalf." - } - }, - "deleteApp": { - "header": "Remove application {app}?", - "content": { - "warning": "This will permanently remove the application and all the associated tokens." - } + "subsonic": "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password", + "warning": "Changing your password will have the following consequences" + }, + "header": "Change your password?" }, "deleteAccount": { - "header": "Do you want to delete your account?", "content": { "warning": "This is irreversible and will permanently remove your data from our servers. You will we immediatly logged out." - } + }, + "header": "Do you want to delete your account?" + }, + "deleteApp": { + "content": { + "warning": "This will permanently remove the application and all the associated tokens." + }, + "header": "Remove application {app}?" + }, + "revokeApp": { + "content": { + "warning": "This will prevent this application from accessing the service on your behalf." + }, + "header": "Revoke access for application {app}?" } }, "table": { "artists": { "header": { - "name": "Name", - "creationDate": "Creation date" + "creationDate": "Creation date", + "name": "Name" } }, "authorizedApps": { @@ -932,50 +905,48 @@ "yourApps": { "header": { "application": "Application", - "scopes": "Scopes", - "creationDate": "Creation date" + "creationDate": "Creation date", + "scopes": "Scopes" } } + }, + "title": "Account Settings", + "warning": { + "deleteAccount": "Your account will be deleted from our servers within a few minutes. We will also notify other servers who may have a copy of some of your data so they can proceed to deletion. Please note that some of these servers may be offline or unwilling to comply though." } }, "SignupForm": { - "placeholder": { - "invitation": "Enter your invitation code (case insensitive)", - "username": "Enter your username", - "email": "Enter your e-mail address" - }, - "message": { - "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", - "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", - "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", - "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + "button": { + "create": "Create my account" }, "header": { "login": "Log in to your Funkwhale account", "signupFailure": "Your account cannot be created." }, "label": { - "username": "Username", "email": "E-mail address", + "invitation": "Invitation code", "password": "Password", - "invitation": "Invitation code" + "username": "Username" }, - "button": { - "create": "Create my account" + "message": { + "accountCreated": "Your account was successfully created. Please verify your e-mail address before trying to login.", + "awaitingReview": "Your account request was successfully submitted. You will be notified by e-mail when our moderation team has reviewed your request.", + "registrationClosed": "Public registrations are not possible on this instance. You will need an invitation code to sign up.", + "requiresReview": "Registrations on this pod are open, but reviewed by moderators before approval." + }, + "placeholder": { + "email": "Enter your e-mail address", + "invitation": "Enter your invitation code (case insensitive)", + "username": "Enter your username" } }, "SubsonicTokenForm": { - "label": { - "subsonicField": "Your subsonic API password" - }, - "message": { - "passwordUpdated": "Password updated", - "accessDisabled": "Access disabled", - "unavailable": "The Subsonic API is not available on this Funkwhale instance." - }, - "header": { - "subsonic": "Subsonic API password", - "error": "Error" + "button": { + "confirmDisable": "Disable access", + "confirmNewPassword": "Request a password", + "disable": "Disable Subsonic access", + "newPassword": "Request a new password" }, "description": { "subsonic": { @@ -984,27 +955,33 @@ "paragraph3": "However, accessing Funkwhale from those clients requires a separate password you can set below." } }, + "header": { + "error": "Error", + "subsonic": "Subsonic API password" + }, + "label": { + "subsonicField": "Your subsonic API password" + }, "link": { "apps": "Discover how to use Funkwhale from other apps" }, - "button": { - "newPassword": "Request a new password", - "confirmNewPassword": "Request a password", - "disable": "Disable Subsonic access", - "confirmDisable": "Disable access" + "message": { + "accessDisabled": "Access disabled", + "passwordUpdated": "Password updated", + "unavailable": "The Subsonic API is not available on this Funkwhale instance." }, "modal": { - "newPassword": { - "header": "Request a new Subsonic API password?", - "content": { - "warning": "This will log you out from existing devices that use the current password." - } - }, "disableSubsonic": { - "header": "Disable Subsonic API access?", "content": { "warning": "This will completely disable access to the Subsonic API using from account." - } + }, + "header": "Disable Subsonic API access?" + }, + "newPassword": { + "content": { + "warning": "This will log you out from existing devices that use the current password." + }, + "header": "Request a new Subsonic API password?" } } } @@ -1019,157 +996,157 @@ } }, "AlbumModal": { - "header": { - "newSeries": "New series", - "newAlbum": "New album" - }, "button": { "cancel": "Cancel", "create": "Create" + }, + "header": { + "newAlbum": "New album", + "newSeries": "New series" } }, "AlbumSelect": { "label": { - "series": "Series", - "album": "Album" - }, - "option": { - "none": "None" + "album": "Album", + "series": "Series" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" + }, + "option": { + "none": "None" } }, "LicenseSelect": { "label": { "license": "Licence" }, - "option": { - "none": "None" - }, "link": { "license": "About this license" + }, + "option": { + "none": "None" } }, "SubscribeButton": { - "title": { - "unsubscribe": "Unsubscribe", - "subscribe": "Subscribe" - }, "help": { "auth": "You need to be logged in to subscribe to this channel" + }, + "title": { + "subscribe": "Subscribe", + "unsubscribe": "Unsubscribe" } }, "UploadForm": { + "button": { + "edit": "Edit", + "ignore": "Ignore", + "remove": "Remove", + "resume": "Resume", + "retry": "Retry" + }, + "description": { + "extensions": "Supported extensions {extensions}" + }, "header": { "error": "Error while publishing" }, + "help": { + "license": "Add a license to your upload to ensure some freedoms to your public." + }, "label": { "channel": "Channel", "openBrowser": "Browse…" }, "message": { - "pending": "You have some draft uploads pending publication.", - "dragAndDrop": "Drag and drop your files here or open the browser to upload your files" + "dragAndDrop": "Drag and drop your files here or open the browser to upload your files", + "pending": "You have some draft uploads pending publication." }, - "button": { - "edit": "Edit", - "ignore": "Ignore", - "resume": "Resume", - "remove": "Remove", - "retry": "Retry" - }, - "help": { - "license": "Add a license to your upload to ensure some freedoms to your public." + "status": { + "errored": "Errored", + "pending": "Pending", + "uploading": "Uploading" }, "warning": { "quota": "You don't have any space left to upload your files. Please contact the moderators." - }, - "status": { - "uploading": "Uploading", - "errored": "Errored", - "pending": "Pending" - }, - "description": { - "extensions": "Supported extensions {extensions}" } }, "UploadMetadataForm": { "label": { - "title": "Title", - "tags": "Tags", - "image": "Track Picture", "description": "Description", - "position": "Position" + "image": "Track Picture", + "position": "Position", + "tags": "Tags", + "title": "Title" } }, "UploadModal": { + "button": { + "cancel": "Cancel", + "close": "Close", + "finishLater": "Finish later", + "next": "Next", + "previous": "Previous step", + "publish": "Publish", + "update": "Update" + }, + "header": { + "processing": "Processing uploads", + "publish": "Publish audio", + "uploadDetails": "Upload details", + "uploadFiles": "Files to upload" + }, "meta": { "files": "no files | {n} file | {n} files", "quota": "Remaining storage space: {space}" - }, - "header": { - "publish": "Publish audio", - "uploadFiles": "Files to upload", - "uploadDetails": "Upload details", - "processing": "Processing uploads" - }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "update": "Update", - "next": "Next", - "publish": "Publish", - "finishLater": "Finish later", - "close": "Close" } } }, "common": { "ActionTable": { - "header": { - "error": "Error while applying action" - }, - "message": { - "needsRefresh": "Content has been updated, click refresh to see up-to-date content", - "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" - }, "button": { - "refresh": "Refresh table content", + "allSelected": "No elements selected | {n} element selected | All {n} elements selected", "go": "Go", "launch": "Launch", + "refresh": "Refresh table content", "select": "Select", - "selected": "{ n } on {total} selected", "selectAll": "Select all items", - "allSelected": "No elements selected | {n} element selected | All {n} elements selected", + "selectCurrentPage": "Select only current page", "selectElement": "Select one element | Select all {n} elements", - "selectCurrentPage": "Select only current page" + "selected": "{ n } on {total} selected" + }, + "header": { + "error": "Error while applying action" }, "label": { "actions": "Actions", "performAction": "Perform actions" }, + "message": { + "needsRefresh": "Content has been updated, click refresh to see up-to-date content", + "success": "Action {action} was launched successfully on {n} element | Action {action} was launched successfully on {n} elements" + }, "modal": { "performAction": { - "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?", "content": { "warning": "This may affect a lot of elements or have irreversible consequences, please double check this is really what you want." - } + }, + "header": "Do you want to launch {action} on {n} element? | Do you want to launch {action} on {n} elements?" } } }, "AttachmentInput": { + "button": { + "remove": "Remove" + }, "header": { "failure": "Your attachment cannot be saved" }, - "label": { - "upload": "Upload New Picture…" - }, "help": { "upload": "PNG or JPG. Dimensions should be between 1400x1400px and 3000x3000px. Maximum file size allowed is 5MB." }, - "button": { - "remove": "Remove" + "label": { + "upload": "Upload New Picture…" }, "loader": { "uploading": "Uploading file…" @@ -1177,23 +1154,23 @@ }, "CollapseLink": { "button": { - "expand": "Expand", - "collapse": "Collapse" + "collapse": "Collapse", + "expand": "Expand" } }, "ContentForm": { - "placeholder": { - "input": "Write a few words here…" - }, "button": { - "write": "Write", - "preview": "Preview" + "preview": "Preview", + "write": "Write" }, "empty": { "noContent": "Nothing to preview" }, "help": { "markdown": "Markdown syntax is supported" + }, + "placeholder": { + "input": "Write a few words here…" } }, "CopyInput": { @@ -1205,12 +1182,12 @@ } }, "DangerousButton": { - "header": { - "confirm": "Do you want to confirm this action?" - }, "button": { "cancel": "Cancel", "confirm": "Confirm" + }, + "header": { + "confirm": "Do you want to confirm this action?" } }, "Duration": { @@ -1234,41 +1211,41 @@ } }, "InlineSearchBar": { - "placeholder": { - "search": "Search…" + "button": { + "clear": "Clear" }, "label": { "search": "Search" }, - "button": { - "clear": "Clear" + "placeholder": { + "search": "Search…" } }, "LoginModal": { + "description": { + "noAccess": "You don't have access" + }, "header": { "unauthenticated": "Unauthenticated" }, "link": { "login": "Log in", "signup": "Sign up" - }, - "description": { - "noAccess": "You don't have access" } }, "RenderedDescription": { "button": { - "more": "Show more", - "less": "Show less", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", + "less": "Show less", + "more": "Show more", "update": "Update description" }, - "header": { - "failure": "Error while updating description" - }, "empty": { "noDescription": "No description available" + }, + "header": { + "failure": "Error while updating description" } }, "UserLink": { @@ -1279,83 +1256,83 @@ "UserMenu": { "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } }, "UserModal": { - "header": { - "options": "Options" - }, "button": { "switchInstance": "Use another instance" }, + "header": { + "options": "Options" + }, "label": { "language": "Change language", - "theme": "Change theme", - "shortcuts": "Keyboard shortcuts" + "shortcuts": "Keyboard shortcuts", + "theme": "Change theme" }, "link": { - "profile": "Profile", - "settings": "Settings", - "logout": "Log out", "about": "About", - "support": "Help", - "forum": "Forum", - "docs": "Documentation", "chat": "Chat room", + "docs": "Documentation", + "forum": "Forum", "git": "Issue tracker", "login": "Log in", + "logout": "Log out", + "notifications": "Notifications", + "profile": "Profile", + "settings": "Settings", "signup": "Sign up", - "notifications": "Notifications" + "support": "Help" } } }, "favorites": { "List": { - "title": "Your favorites", - "header": { - "favorites": "No favorites | {n} favorite | {n} favorites" - }, "empty": { "noFavorites": "No tracks have been added to your favorites yet" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Order", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" + "header": { + "favorites": "No favorites | {n} favorite | {n} favorites" }, "link": { "library": "Browse the library" }, "loader": { "loading": "Loading your favorites…" - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "title": "Your favorites" }, "TrackFavoriteIcon": { "button": { - "remove": "Remove from favorites", - "add": "Add to favorites" + "add": "Add to favorites", + "remove": "Remove from favorites" }, "label": { "inFavorites": "In favorites" @@ -1364,41 +1341,41 @@ }, "federation": { "FetchButton": { - "header": { - "refresh": "Refreshing object from remote server…", - "skipped": "Refresh was skipped", - "success": "Refresh successful", - "failure": "Refresh error", - "pending": "Refresh pending", - "saveFailure": "Error while saving settings" - }, - "description": { - "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", - "success": "Data was refreshed successfully from remote server.", - "failure": "An error occurred while trying to refresh data:", - "pending": "The refresh request hasn't been processed in time by our server. It will be processed later." - }, "button": { "close": "Close", "reload": "Close and reload page" }, + "description": { + "failure": "An error occurred while trying to refresh data:", + "pending": "The refresh request hasn't been processed in time by our server. It will be processed later.", + "skipped": "The remote server answered, but returned data was unsupported by Funkwhale.", + "success": "Data was refreshed successfully from remote server." + }, + "header": { + "failure": "Refresh error", + "pending": "Refresh pending", + "refresh": "Refreshing object from remote server…", + "saveFailure": "Error while saving settings", + "skipped": "Refresh was skipped", + "success": "Refresh successful" + }, "loader": { - "fetchRequest": "Requesting a fetch…", - "awaitingResult": "Waiting for result…" + "awaitingResult": "Waiting for result…", + "fetchRequest": "Requesting a fetch…" }, "table": { "error": { "label": { - "type": "Error type", - "detail": "Error detail" + "detail": "Error detail", + "type": "Error type" }, "value": { - "httpStatus": "The remote server answered with HTTP {status}", - "httpError": "An HTTP error occurred while contacting the remote server", - "timeoutError": "The remote server didn't respond quickly enough", "connectionError": "Impossible to connect to the remote server", - "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "httpError": "An HTTP error occurred while contacting the remote server", + "httpStatus": "The remote server answered with HTTP {status}", "invalidAttributesError": "Data returned by the remote server had invalid or missing attributes", + "invalidJsonError": "The remote server returned invalid JSON or JSON-LD data", + "timeoutError": "The remote server didn't respond quickly enough", "unknownError": "Unknown error" } } @@ -1415,64 +1392,64 @@ }, "forms": { "PasswordInput": { - "title": "Show/hide password", "button": { "copy": "Copy" }, "message": { "copy": "Text copied to clipboard!" - } + }, + "title": "Show/hide password" } }, "library": { "AlbumBase": { - "title": "Album", - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "episodes": "No episodes | {n} episode | {n} episodes" - }, "link": { "addDescription": "Add a description…" - } + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "tracks": "No tracks | {n} track | {n} tracks" + }, + "title": "Album" }, "AlbumDetail": { - "header": { - "episodes": "Episodes", - "tracks": "Tracks", - "libraries": "User libraries" - }, "description": { "libraries": "This album is present in the following libraries:" }, + "header": { + "episodes": "Episodes", + "libraries": "User libraries", + "tracks": "Tracks" + }, "meta": { "volume": "Volume {number}" } }, "AlbumDropdown": { "button": { - "more": "More…", "cancel": "Cancel", - "embed": "Embed", + "delete": "Delete", "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "embed": { - "header": "Embed this album on your website" - }, - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." - } - } + "embed": "Embed", + "more": "More…" }, "link": { - "domain": "View on {domain}", - "musicbrainz": "View on MusicBrainz", "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", "moderation": "Open in moderation interface", - "django": "View in Django's admin" + "musicbrainz": "View on MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "The album will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this album?" + }, + "embed": { + "header": "Embed this album on your website" + } } }, "AlbumEdit": { @@ -1485,83 +1462,83 @@ } }, "Albums": { - "title": "Albums", - "placeholder": { - "search": "Enter album title…" + "button": { + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing albums" }, - "button": { - "search": "Search" - }, "label": { "search": "Search", "tags": "Tags" }, + "link": { + "addMusic": "Add some music" + }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter album title…" }, - "link": { - "addMusic": "Add some music" - } + "title": "Albums" }, "ArtistBase": { - "title": "Artist", - "meta": { - "tracks": "0 tracks in | {count} track in | {count} tracks in", - "albums": "0 albums | {n} album | {n} albums" - }, "button": { - "play": "Play all albums", - "edit": "Edit", "cancel": "Cancel", + "edit": "Edit", "embed": "Embed", - "more": "More…" + "more": "More…", + "play": "Play all albums" }, "link": { - "django": "View in Django's admin", - "musicbrainz": "View on MusicBrainz", - "wikipedia": "Search on Wikipedia", - "domain": "View on {domain}", "discogs": "Search on Discogs", - "moderation": "Open in moderation interface" + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "musicbrainz": "View on MusicBrainz", + "wikipedia": "Search on Wikipedia" + }, + "meta": { + "albums": "0 albums | {n} album | {n} albums", + "tracks": "0 tracks in | {count} track in | {count} tracks in" }, "modal": { "embed": { "header": "Embed this artist work on your website" } - } + }, + "title": "Artist" }, "ArtistDetail": { - "header": { - "album": "Albums by this artist", - "track": "New tracks by this artist", - "library": "User libraries" + "button": { + "filter": "Remove filter", + "more": "Load more…" }, "description": { "library": "This artist is present in the following libraries:" }, - "button": { - "more": "Load more…", - "filter": "Remove filter" - }, - "message": { - "filter": "You are currently hiding content related to this artist." + "header": { + "album": "Albums by this artist", + "library": "User libraries", + "track": "New tracks by this artist" }, "link": { "filter": "Review my filters" + }, + "message": { + "filter": "You are currently hiding content related to this artist." } }, "ArtistEdit": { @@ -1574,44 +1551,57 @@ } }, "Artists": { - "title": "Artists", - "placeholder": { - "search": "Search…" + "button": { + "search": "Search", + "upload": "Add some music" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing artists" }, "label": { + "excludeCompilation": "Exclude Compilation Artists", "search": "Artist name", - "tags": "Tags", - "excludeCompilation": "Exclude Compilation Artists" - }, - "button": { - "search": "Search", - "upload": "Add some music" + "tags": "Tags" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Search…" + }, + "title": "Artists" }, "EditCard": { + "button": { + "approve": "Approve", + "delete": "Delete", + "reject": "Reject" + }, "header": { "modification": "Modification {id}" }, "link": { "track": "Track #{id} - {name}" }, + "modal": { + "content": { + "warning": "The suggestion will be completely removed, this action is irreversible." + }, + "delete": { + "header": "Delete this suggestion?" + } + }, "status": { "applied": "Approved and applied", "approved": "Approved", @@ -1622,117 +1612,104 @@ "update": { "header": { "field": "Field", - "oldValue": "Old value", - "newValue": "New value" + "newValue": "New value", + "oldValue": "Old value" }, "notApplicable": "N/A" } - }, - "button": { - "approve": "Approve", - "reject": "Reject", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this suggestion?" - }, - "content": { - "warning": "The suggestion will be completely removed, this action is irreversible." - } } }, "EditForm": { - "notApplicable": "N/A", - "placeholder": { - "summary": "A short summary describing your changes." - }, - "header": { - "success": "Your edit was successfully submitted.", - "failure": "Error while submitting edit", - "recentEdits": "Recent edits", - "unreviewed": "Restrict to unreviewed edits" - }, "button": { + "cancel": "Cancel", + "clear": "Clear", + "new": "Submit another edit", + "reset": "Reset to initial value", "showAll": "Show all edits", "showUnreviewed": "Restrict to unreviewed edits", - "new": "Submit another edit", - "clear": "Clear", - "reset": "Reset to initial value", "submit": "Submit and apply edit", - "cancel": "Cancel", "suggest": "Submit suggestion" }, "empty": { "suggestEdit": "Suggest a change using the form below" }, + "header": { + "failure": "Error while submitting edit", + "recentEdits": "Recent edits", + "success": "Your edit was successfully submitted.", + "unreviewed": "Restrict to unreviewed edits" + }, "label": { "summary": "Summary (optional)" }, "message": { "noPermission": "You don't have the permission to edit this object, but you can suggest changes. Once submitted, suggestions will be reviewed before approval." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "A short summary describing your changes." } }, "FileUpload": { - "tooltip": { - "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", - "size": "Cannot upload this file, ensure it is not too big", - "network": "A network error occurred while uploading this file", - "timeout": "Upload timeout, please try again", - "retry": "Retry", - "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}" - }, - "message": { - "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", - "local": { - "message": "You are about to upload music to your library. Before proceeding, please ensure that:", - "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", - "tag": "The music files you are uploading are tagged properly.", - "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format" - } - }, - "link": { - "uploading": "Uploading", - "processing": "Processing", - "picard": "We recommend using Picard for that purpose." - }, - "empty": { - "noFiles": "0" - }, - "label": { - "remainingSpace": "Remaining storage space", - "uploadWidget": "Click to select files to upload or drag and drop files or directories", - "extensions": "Supported extensions: {extensions}" - }, - "header": { - "local": "Upload music from '~/your local storage", - "server": "Import music from your server", - "failure": "Error while launching import", - "status": "Import status" - }, - "table": { - "upload": { - "header": { - "filename": "Filename", - "size": "Size", - "status": "Status", - "actions": "Actions" - }, - "status": { - "uploaded": "Uploaded", - "uploading": "Uploading…", - "pending": "Pending" - }, - "progress": "{percent}%" - } - }, "button": { - "retry": "Retry failed uploads", - "cancel": "Cancel" + "cancel": "Cancel", + "retry": "Retry failed uploads" }, "description": { "import": "Import status", "previousImport": "Results of your previous import:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error while launching import", + "local": "Upload music from '~/your local storage", + "server": "Import music from your server", + "status": "Import status" + }, + "label": { + "extensions": "Supported extensions: {extensions}", + "remainingSpace": "Remaining storage space", + "uploadWidget": "Click to select files to upload or drag and drop files or directories" + }, + "link": { + "picard": "We recommend using Picard for that purpose.", + "processing": "Processing", + "uploading": "Uploading" + }, + "message": { + "listener": "This page is asking you to confirm that you want to leave - data you have entered may not be saved.", + "local": { + "copyright": "You are not uploading copyrighted content in a public library, otherwise you may be infringing the law", + "format": "The music files you are uploading are in OGG, Flac, MP3 or AIFF format", + "message": "You are about to upload music to your library. Before proceeding, please ensure that:", + "tag": "The music files you are uploading are tagged properly." + } + }, + "table": { + "upload": { + "header": { + "actions": "Actions", + "filename": "Filename", + "size": "Size", + "status": "Status" + }, + "progress": "{percent}%", + "status": { + "pending": "Pending", + "uploaded": "Uploaded", + "uploading": "Uploading…" + } + } + }, + "tooltip": { + "denied": "Upload denied, ensure the file is not too big and that you have not reached your quota", + "extension": "Invalid file type, ensure you are uploading an audio file. Supported file extensions are {extensions}", + "network": "A network error occurred while uploading this file", + "retry": "Retry", + "size": "Cannot upload this file, ensure it is not too big", + "timeout": "Upload timeout, please try again" } }, "FsBrowser": { @@ -1746,17 +1723,21 @@ } }, "Home": { - "title": "Library", "header": { - "recentlyListened": "Recently listened", - "recentlyFavorited": "Recently favorited", + "newChannels": "New channels", "playlists": "Playlists", "recentlyAdded": "Recently added", - "newChannels": "New channels" - } + "recentlyFavorited": "Recently favorited", + "recentlyListened": "Recently listened" + }, + "title": "Library" }, "ImportStatusModal": { + "button": { + "close": "Close" + }, "error": { + "importFailure": "An error occurred during upload processing. You will find more information below.", "invalidMetadata": { "label": "Invalid metadata", "message": "The metadata included in the file is invalid or some mandatory fields are missing." @@ -1764,39 +1745,41 @@ "unknownError": { "label": "Unknown error", "message": "An unknown error occurred" - }, - "importFailure": "An error occurred during upload processing. You will find more information below." + } }, "header": { "importDetail": "Import detail" }, - "message": { - "importDetail": "Upload is still pending and will soon be processed by the server.", - "importSuccess": "Upload was successfully processed by the server." - }, - "warning": { - "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." - }, - "table": { - "error": { - "errorType": "Error type", - "errorDetail": "Error detail", - "help": "Getting help", - "debug": "Debug information" - } - }, "link": { "documentation": "Read our documentation for this error", "support": "Open a support thread (include the debug information below in your message)" }, - "button": { - "close": "Close" + "message": { + "importDetail": "Upload is still pending and will soon be processed by the server.", + "importSuccess": "Upload was successfully processed by the server." + }, + "table": { + "error": { + "debug": "Debug information", + "errorDetail": "Error detail", + "errorType": "Error type", + "help": "Getting help" + } + }, + "warning": { + "importSkipped": "Upload was skipped because a similar one is already available in one of your libraries." } }, "Podcasts": { - "title": "Podcasts", - "placeholder": { - "search": "Search…" + "button": { + "cancel": "Cancel", + "channel": "Create a Channel", + "feed": "Subscribe to feed", + "search": "Search", + "subscribe": "Subscribe" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing podcasts" @@ -1805,76 +1788,69 @@ "search": "Podcast title", "tags": "Tags" }, - "button": { - "search": "Search", - "cancel": "Cancel", - "subscribe": "Subscribe", - "channel": "Create a Channel", - "feed": "Subscribe to feed" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, - "pagination": { - "results": "Results per page" - }, - "empty": { - "noResults": "No results matching your query" - }, "modal": { "subscription": { "header": "Subscription" } - } + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Results per page" + }, + "placeholder": { + "search": "Search…" + }, + "title": "Podcasts" }, "Radios": { - "title": "Radios", - "placeholder": { - "search": "Enter a radio name…" + "button": { + "add": "Create a radio", + "create": "Create your own radio", + "search": "Search" + }, + "empty": { + "noResults": "No results matching your query" }, "header": { "browse": "Browsing radios", "instance": "Instance radios", "user": "User radios" }, - "link": {}, "label": { "search": "Search" }, - "button": { - "search": "Search", - "create": "Create your own radio", - "add": "Create a radio" - }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" - } + "placeholder": { + "search": "Enter a radio name…" + }, + "title": "Radios" }, "TagDetail": { - "link": { - "moderation": "Open in moderation interface", - "artists": "Artists", - "albums": "Albums" - }, "header": { "channels": "Channels", "tracks": "Tracks" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "moderation": "Open in moderation interface" } }, "TagSelector": { @@ -1883,73 +1859,73 @@ } }, "TrackBase": { - "title": "Track", + "button": { + "cancel": "Cancel", + "delete": "Delete", + "download": "Download", + "edit": "Edit", + "embed": "Embed", + "more": "More…", + "play": "Play" + }, + "link": { + "discogs": "Search on Discogs", + "django": "View in Django's admin", + "domain": "View on {domain}", + "moderation": "Open in moderation interface", + "wikipedia": "Search on Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." + }, + "header": "Delete this track?" + }, + "embed": { + "header": "Embed this track on your website" + } + }, "subtitle": { "with-uploader": "Uploaded by {0} on {1}", "without-uploader": "Uploaded on {0}" }, - "button": { - "download": "Download", - "more": "More…", - "play": "Play", - "cancel": "Cancel", - "embed": "Embed", - "edit": "Edit", - "delete": "Delete" - }, - "link": { - "domain": "View on {domain}", - "wikipedia": "Search on Wikipedia", - "discogs": "Search on Discogs", - "moderation": "Open in moderation interface", - "django": "View in Django's admin" - }, - "modal": { - "embed": { - "header": "Embed this track on your website" - }, - "delete": { - "header": "Delete this track?", - "content": { - "warning": "The track will be deleted, as well as any related files and data. This action is irreversible." - } - } - } + "title": "Track" }, "TrackDetail": { - "notApplicable": "N/A", - "header": { - "track": "Track details", - "episode": "Episode details", - "release": "Release Details", - "playlists": "Related Playlists", - "library": "Related libraries" - }, "description": { "library": "This track is present in the following libraries:" }, + "header": { + "episode": "Episode details", + "library": "Related libraries", + "playlists": "Related Playlists", + "release": "Release Details", + "track": "Track details" + }, "link": { "musicbrainz": "View on MusicBrainz" }, + "notApplicable": "N/A", "table": { + "release": { + "album": "Album", + "artist": "Artist", + "copyright": "Copyright", + "license": "License", + "series": "Serie", + "url": "URL", + "year": "Year" + }, "track": { - "duration": "Duration", - "size": "Size", - "codec": "Codec", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "downloads": "Downloads" - }, - "release": { - "copyright": "Copyright", - "year": "Year", - "license": "License", - "url": "URL", - "artist": "Artist", - "album": "Album", - "series": "Serie" + "codec": "Codec", + "downloads": "Downloads", + "duration": "Duration", + "size": "Size" } } }, @@ -1959,146 +1935,143 @@ "suggest": "Suggest an edit on this track" }, "message": { - "remote": " This object is managed by another server, you cannot edit it." + "remote": "This object is managed by another server, you cannot edit it." } }, "radios": { "Builder": { - "title": "Radio Builder", - "placeholder": { - "name": "My awesome radio", - "description": "My awesome description" - }, - "header": { - "builder": "Builder", - "updated": "Radio updated", - "created": "Radio created", - "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters" + "button": { + "filter": "Add filter", + "save": "Save" }, "description": { "builder": "You can use this interface to build your own custom radio, which will play tracks according to your criteria." }, - "label": { - "name": "Radio name", - "description": "Description", - "public": "Display publicly", - "filter": "Add filters to customize your radio" + "header": { + "builder": "Builder", + "created": "Radio created", + "matches": "0 tracks matching combined filters | {n} track matching combined filters | {n} tracks matching combined filters", + "updated": "Radio updated" }, - "button": { - "save": "Save", - "filter": "Add filter" + "label": { + "description": "Description", + "filter": "Add filters to customize your radio", + "name": "Radio name", + "public": "Display publicly" }, "option": { "filter": "Select a filter" }, + "placeholder": { + "description": "My awesome description", + "name": "My awesome radio" + }, "table": { "filter": { "header": { - "name": "Filter name", - "exclude": "Exclude", - "config": "Config", + "actions": "Actions", "candidates": "Candidates", - "actions": "Actions" + "config": "Config", + "exclude": "Exclude", + "name": "Filter name" } } - } + }, + "title": "Radio Builder" }, "Filter": { + "cancelButton": "Cancel", "excludeLabel": "Exclude", "matchingTracks": "0 tracks matching filter | {n} track matching filter | {n} tracks matching filter", "matchingTracksModalHeader": "Tracks matching filter", - "cancelButton": "Cancel", "removeButton": "Remove" } } }, "manage": { "ChannelsTable": { - "placeholder": { - "search": "Search by domain, name, account…" + "label": { + "category": "Category", + "search": "Search" }, "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search", - "category": "Category" + "local": "Local", + "moderation": "Open in moderation interface" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, account…" }, "table": { "channel": { "header": { - "name": "Name", "account": "Account", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "library": { "AlbumsTable": { - "notApplicable": "N/A", - "placeholder": { - "search": "Search by domain, title, artist, MusicBrainz ID…" - }, - "link": { - "moderation": "Open in moderation interface", - "local": "Local" - }, - "label": { - "search": "Search" - }, "action": { "delete": { "label": "Delete", "warning": "The selected albums will be removed, as well as associated tracks, uploads, favorites and listening history. This action is irreversible." } }, + "label": { + "search": "Search" + }, + "link": { + "local": "Local", + "moderation": "Open in moderation interface" + }, + "notApplicable": "N/A", "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, title, artist, MusicBrainz ID…" }, "table": { "album": { "header": { - "name": "Name", "artist": "Artist", + "creationDate": "Creation date", "domain": "Domain", - "tracks": "Tracks", + "name": "Name", "releaseDate": "Release date", - "creationDate": "Creation date" + "tracks": "Tracks" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "ArtistsTable": { - "placeholder": { - "search": "Search by domain, name, MusicBrainz ID…" - }, "action": { "delete": { "label": "Delete", @@ -2106,68 +2079,68 @@ } }, "label": { - "search": "Search", - "category": "Category" + "category": "Category", + "search": "Search" + }, + "link": { + "local": "Local" }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, name, MusicBrainz ID…" }, "table": { "artist": { "header": { - "name": "Name", - "domain": "Domain", "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" + "creationDate": "Creation date", + "domain": "Domain", + "name": "Name", + "tracks": "Tracks" } } - }, - "link": { - "local": "Local" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "EditsCardList": { - "placeholder": { - "search": "Search by account, summary, domain…" - }, "label": { "search": "Search", "status": "Status" }, "option": { "all": "All", - "pending": "Pending review", "approved": "Approved", + "pending": "Pending review", "rejected": "Rejected" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by account, summary, domain…" } }, "LibrariesTable": { - "placeholder": { - "search": "Search by domain, actor, name, description…" - }, "action": { "delete": { "label": "Delete", @@ -2178,41 +2151,41 @@ "search": "Search", "visibility": "Visibility" }, + "link": { + "local": "Local" + }, "option": { "all": "All" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, - "link": { - "local": "Local" + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, actor, name, description…" }, "table": { "library": { "header": { - "name": "Name", "account": "Account", + "creationDate": "Creation date", "domain": "Domain", - "visibility": "Visibility", - "uploads": "Uploads", "followers": "Followers", - "creationDate": "Creation date" + "name": "Name", + "uploads": "Uploads", + "visibility": "Visibility" } } - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "TagsTable": { - "placeholder": { - "search": "Search by name" - }, "action": { "delete": { "label": "Delete", @@ -2223,33 +2196,32 @@ "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } - }, - "link": {}, - "table": { - "tag": { - "header": { - "name": "Name", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "creationDate": "Creation date" - } - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artists", + "creationDate": "Creation date", + "name": "Name", + "tracks": "Tracks" + } + } } }, "TracksTable": { - "placeholder": { - "search": "Search by domain, title, artist, album, MusicBrainz ID…" - }, "action": { "delete": { "label": "Delete", @@ -2259,38 +2231,38 @@ "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local" }, - "table": { - "track": { - "header": { - "title": "Title", - "album": "Album", - "artist": "Artist", - "domain": "Domain", - "license": "License", - "creationDate": "Creation date" - } - } + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, album, MusicBrainz ID…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artist", + "creationDate": "Creation date", + "domain": "Domain", + "license": "License", + "title": "Title" + } + } + } }, "UploadsTable": { - "placeholder": { - "search": "Search by domain, actor, name, reference, source…" - }, "action": { "delete": { "label": "Delete", @@ -2299,46 +2271,49 @@ }, "label": { "search": "Search", - "visibility": "Visibility", - "status": "Import status" - }, - "option": { - "all": "All", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } + "status": "Import status", + "visibility": "Visibility" }, "link": { "local": "Local" }, - "table": { - "upload": { - "header": { - "name": "Name", - "library": "Library", - "account": "Account", - "domain": "Domain", - "visibility": "Visibility", - "importStatus": "Import status", - "size": "Size", - "creationDate": "Creation date", - "accessedDate": "Accessed date" - } - } + "notApplicable": "N/A", + "option": { + "all": "All", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" + }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, actor, name, reference, source…" + }, + "table": { + "upload": { + "header": { + "accessedDate": "Accessed date", + "account": "Account", + "creationDate": "Creation date", + "domain": "Domain", + "importStatus": "Import status", + "library": "Library", + "name": "Name", + "size": "Size", + "visibility": "Visibility" + } + } + } } }, "moderation": { @@ -2348,99 +2323,95 @@ "label": "Purge" } }, - "placeholder": { - "search": "Search by domain, username, bio…" - }, "label": { "search": "Search" }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "link": { "local": "Local account" }, - "table": { - "account": { - "header": { - "name": "Name", - "domain": "Domain", - "uploads": "Uploads", - "firstSeen": "First seen", - "lastSeen": "Last seen", - "moderationRule": "Under moderation rule" - }, - "moderationRule": "Yes" - } + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" }, "pagination": { "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by domain, username, bio…" + }, + "table": { + "account": { + "header": { + "domain": "Domain", + "firstSeen": "First seen", + "lastSeen": "Last seen", + "moderationRule": "Under moderation rule", + "name": "Name", + "uploads": "Uploads" + }, + "moderationRule": "Yes" + } } }, "DomainsTable": { "action": { - "purge": { - "label": "Purge" - }, "add": { "label": "Add to allow-list" }, + "purge": { + "label": "Purge" + }, "remove": { "label": "Remove from allow-list" } }, - "placeholder": { - "search": "Search by name…" + "empty": { + "noPods": "No other pods found" + }, + "label": { + "inList": "Is present on allow-list", + "search": "Search" }, "link": { "list": "This domain is present in your allow-list" }, - "label": { - "search": "Search", - "inList": "Is present on allow-list" - }, "option": { "all": "All", - "yes": "Yes", - "no": "No" + "no": "No", + "yes": "Yes" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Ordering direction", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing results {start}-{end} on {total}" + }, + "placeholder": { + "search": "Search by name…" }, "table": { "domain": { "header": { - "name": "Name", - "users": "Users", - "receivedMessages": "Received messages", "firstSeen": "First seen", - "moderationRule": "Under moderation rule" + "moderationRule": "Under moderation rule", + "name": "Name", + "receivedMessages": "Received messages", + "users": "Users" }, "moderationRule": "Yes" } - }, - "empty": { - "noPods": "No other pods found" - }, - "pagination": { - "results": "Showing results {start}-{end} on {total}" } }, "InstancePolicyCard": { - "status": { - "enabled": "Enabled", - "paused": "Paused" - }, "button": { "edit": "Edit" }, @@ -2451,73 +2422,77 @@ "blockAll": "Block everything", "muteActivity": "Mute activity", "muteNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "reason": "Reason" + "reason": "Reason", + "rejectMedia": "Reject media" + }, + "status": { + "enabled": "Enabled", + "paused": "Paused" } }, "InstancePolicyForm": { - "tooltip": { - "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place.", - "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", - "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.", - "silenceActivity": "Hide account or domain content, except from followers.", - "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", - "rejectMedia": "Hide account or domain content, except from followers." - }, - "label": { - "silenceActivity": "Mute activity", - "silenceNotifications": "Mute notifications", - "rejectMedia": "Reject media", - "policyEnabled": "Enabled", - "policyDisabled": "Disabled", - "policyReason": "Reason", - "blockAll": "Block everything", - "customizeRule": "Or customize your rule" - }, - "header": { - "editRule": "Edit moderation rule", - "addRule": "Add a new moderation rule", - "failure": "Error while creating rule" - }, "button": { "cancel": "Cancel", - "update": "Update", + "confirm": "Delete moderation rule", "create": "Create", "delete": "Delete", - "confirm": "Delete moderation rule" + "update": "Update" + }, + "header": { + "addRule": "Add a new moderation rule", + "editRule": "Edit moderation rule", + "failure": "Error while creating rule" + }, + "label": { + "blockAll": "Block everything", + "customizeRule": "Or customize your rule", + "policyDisabled": "Disabled", + "policyEnabled": "Enabled", + "policyReason": "Reason", + "rejectMedia": "Reject media", + "silenceActivity": "Mute activity", + "silenceNotifications": "Mute notifications" }, "modal": { "delete": { - "header": "Delete this moderation rule?", "content": { "warning": "This action is irreversible" - } + }, + "header": "Delete this moderation rule?" } + }, + "tooltip": { + "blockAll": "Block everything from this account or domain. This will prevent any interaction with the entity, and purge related content (uploads, libraries, follows, etc.)", + "isActive": "Use this setting to temporarily enable/disable the policy without completely removing it.", + "rejectMedia": "Hide account or domain content, except from followers.", + "silenceActivity": "Hide account or domain content, except from followers.", + "silenceNotifications": "Prevent account or domain from triggering notifications, except from followers.", + "summary": "Explain why you're applying this policy: this will help you remember why you added this rule. Depending on your pod configuration, this may be displayed publicly to help users understand the moderation rules in place." } }, "InstancePolicyModal": { "button": { - "show": "Moderation rules…", - "close": "Close" + "close": "Close", + "show": "Moderation rules…" }, "modal": { "manage": { - "header": "Manage moderation rules for {obj}", "content": { "warning": "This entity is subject to specific moderation rules" - } + }, + "header": "Manage moderation rules for {obj}" } } }, "NoteForm": { - "placeholder": { - "summary": "Describe what actions have been taken, or any other related updates…" + "button": { + "add": "Add note" }, "header": { "failure": "Error while submitting note" }, - "button": { - "add": "Add note" + "placeholder": { + "summary": "Describe what actions have been taken, or any other related updates…" } }, "NotesThread": { @@ -2526,115 +2501,115 @@ }, "modal": { "delete": { - "header": "Delete this note?", "content": { "warning": "The note will be deleted. This action is irreversible." - } + }, + "header": "Delete this note?" } } }, "ReportCard": { - "modal": { - "delete": { - "header": "Delete reported object?", - "content": { - "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." - } - } - }, "button": { + "confirmDelete": "Delete", "delete": "Delete reported object", "resolve": "Resolve", - "unresolve": "Unresolve", - "confirmDelete": "Delete" - }, - "link": { - "report": "Report {id}", - "publicPage": "View public page", - "moderation": "Open in moderation interface" - }, - "table": { - "report": { - "submittedBy": "Submitted by", - "category": "Category", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "resolved": "Resolved", - "unresolved": "Unresolved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" - }, - "object": { - "type": "Type", - "owner": "Owner", - "account": "Account", - "domain": "Domain", - "local": "Local" - } + "unresolve": "Unresolve" }, "header": { + "actions": "Actions", "message": "Message", - "reportedObject": "Reported object", "notes": "Internal notes", - "actions": "Actions" + "reportedObject": "Reported object" }, - "warning": { - "objectDeleted": "The object associated with this report was deleted." - }, - "notApplicable": "N/A" - }, - "UserRequestCard": { "link": { - "request": "Request {id}" + "moderation": "Open in moderation interface", + "publicPage": "View public page", + "report": "Report {id}" }, - "table": { - "request": { - "submittedBy": "Submitted by", - "creationDate": "Creation date" - }, - "status": { - "status": "Status", - "pending": "Pending", - "refused": "Refused", - "approved": "Approved", - "assignedTo": "Assigned to", - "resolutionDate": "Resolution date", - "internalNotes": "Internal notes" + "modal": { + "delete": { + "content": { + "warning": "This will delete the object associated with this report and mark the report as resolved. The deletion is irreversible." + }, + "header": "Delete reported object?" } }, "notApplicable": "N/A", + "table": { + "object": { + "account": "Account", + "domain": "Domain", + "local": "Local", + "owner": "Owner", + "type": "Type" + }, + "report": { + "category": "Category", + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "resolutionDate": "Resolution date", + "resolved": "Resolved", + "status": "Status", + "unresolved": "Unresolved" + } + }, + "warning": { + "objectDeleted": "The object associated with this report was deleted." + } + }, + "UserRequestCard": { + "button": { + "approve": "Approve", + "reject": "Refuse" + }, "header": { - "signup": "Message", "actions": "Actions", - "notes": "Internal notes" + "notes": "Internal notes", + "signup": "Message" + }, + "link": { + "request": "Request {id}" }, "message": { "signup": "This user wants to sign-up on your pod." }, - "button": { - "approve": "Approve", - "reject": "Refuse" + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Creation date", + "submittedBy": "Submitted by" + }, + "status": { + "approved": "Approved", + "assignedTo": "Assigned to", + "internalNotes": "Internal notes", + "pending": "Pending", + "refused": "Refused", + "resolutionDate": "Resolution date", + "status": "Status" + } } } }, "users": { "InvitationForm": { - "placeholder": { - "invitation": "Leave empty for a random code" - }, - "header": { - "failure": "Error while creating invitation" - }, "button": { "clear": "Clear", "new": "Get a new invitation" }, + "header": { + "failure": "Error while creating invitation" + }, "label": { "invite": "Invitation code" }, + "placeholder": { + "invitation": "Leave empty for a random code" + }, "table": { "invitation": { "header": { @@ -2648,41 +2623,56 @@ "action": { "delete": "Delete" }, - "placeholder": { - "search": "Search by username, e-mail address, code…" - }, "label": { + "expired": "Expired", "search": "Search", "status": "Status", - "used": "Used", - "expired": "Expired", - "unused": "Not used" + "unused": "Not used", + "used": "Used" + }, + "option": { + "all": "All", + "expired": "Expired/used", + "open": "Open" }, "ordering": { "label": "Ordering" }, - "option": { - "all": "All", - "open": "Open", - "expired": "Expired/used" + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, + "placeholder": { + "search": "Search by username, e-mail address, code…" }, "table": { "invitation": { "header": { - "owner": "Owner", - "status": "Status", + "code": "Code", "creationDate": "Creation date", "expirationDate": "Expiration date", - "user": "User", - "code": "Code" + "owner": "Owner", + "status": "Status", + "user": "User" } } - }, - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } }, "UsersTable": { + "label": { + "search": "Search" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, + "pagination": { + "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" + }, "permission": { "library": "Library", "moderation": "Moderation", @@ -2691,54 +2681,46 @@ "placeholder": { "search": "Search by username, e-mail address, name…" }, - "label": { - "search": "Search" - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "table": { "user": { - "header": { - "username": "Username", - "email": "Email", - "accountStatus": "Account status", - "signup": "Sign-up", - "lastActivity": "Last activity", - "permissions": "Permissions", - "status": "Status" - }, "accountStatus": { "active": "Active", "inactive": "Inactive" }, + "header": { + "accountStatus": "Account status", + "email": "Email", + "lastActivity": "Last activity", + "permissions": "Permissions", + "signup": "Sign-up", + "status": "Status", + "username": "Username" + }, "status": { "admin": "Admin", - "staff": "Staff member", - "regular": "Regular user" + "regular": "Regular user", + "staff": "Staff member" } } - }, - "notApplicable": "N/A", - "pagination": { - "results": "Showing zero results | Showing one result | Showing results {start} to {end} from {total}" } } } }, "moderation": { "FilterModal": { - "message": { - "success": "Content filter successfully added" + "button": { + "cancel": "Cancel", + "hide": "Hide content" }, "header": { - "modal": "Do you want to hide content from artist \"{name}\"?", - "failure": "Error while creating filter" + "failure": "Error while creating filter", + "modal": "Do you want to hide content from artist \"{name}\"?" + }, + "help": { + "createFilter": "You can manage your filters any time from your account settings." + }, + "message": { + "success": "Content filter successfully added" }, "warning": { "createFilter": { @@ -2748,13 +2730,6 @@ "listItem3": "In artists and album listings", "listItem4": "In radio suggestions" } - }, - "help": { - "createFilter": "You can manage your filters any time from your account settings." - }, - "button": { - "cancel": "Cancel", - "hide": "Hide content" } }, "ReportCategoryDropdown": { @@ -2766,47 +2741,47 @@ } }, "ReportModal": { - "message": { - "submissionSuccess": "Report successfully submitted, thank you" + "button": { + "cancel": "Cancel", + "submit": "Submit report" + }, + "description": { + "email": "We'll use this e-mail address if we need to contact you regarding this report.", + "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element.", + "message": "Use this field to provide additional context to the moderator that will handle your report.", + "modal": "Use this form to submit a report to our moderation team" }, "error": { "nodeinfoFetch": "Cannot fetch Node Info: {error}" }, "header": { + "disabled": "Anonymous reports are disabled, please sign-in to submit a report.", "modal": "Do you want to report this object?", - "submissionFailure": "Error while submitting report", - "disabled": "Anonymous reports are disabled, please sign-in to submit a report." - }, - "description": { - "modal": "Use this form to submit a report to our moderation team", - "email": "We'll use this e-mail address if we need to contact you regarding this report.", - "message": "Use this field to provide additional context to the moderator that will handle your report.", - "forwardToDomain": "Forward an anonymized copy of your report to the server hosting this element." + "submissionFailure": "Error while submitting report" }, "label": { "email": "Email", - "message": "Message", - "forwardToDomain": "Forward to {domain}" + "forwardToDomain": "Forward to {domain}", + "message": "Message" }, - "button": { - "cancel": "Cancel", - "submit": "Submit report" + "message": { + "submissionSuccess": "Report successfully submitted, thank you" } } }, "notifications": { "NotificationRow": { "button": { + "approve": "Approve", "markRead": "Mark as read", "markUnread": "Mark as unread", - "reject": "Reject", - "approve": "Approve" + "reject": "Reject" }, "message": { - "libraryFollow": "{username} followed your library \"{library}\"", "libraryAcceptFollow": "{username} accepted your follow on library \"{library}\"", - "libraryReject": "You rejected {username}'s request to follow \"{library}\"", - "libraryPendingFollow": "{username} wants to follow your library \"{library}\"" + "libraryFollow": "{username} followed your library \"{library}\"", + "libraryPendingFollow": "{username} wants to follow your library \"{library}\"", + "libraryReject": "You rejected {username}'s request to follow \"{library}\"" } } }, @@ -2818,94 +2793,94 @@ }, "Editor": { "button": { - "copy": "Copy the current queue to this playlist", "addDuplicate": "Add anyways", "clear": "Clear playlist", + "copy": "Copy the current queue to this playlist", "insertFromQueue": "Insert from queue ({n} track) | Insert from queue ({n} tracks" }, - "header": { - "editor": "Playlist editor" - }, - "loading": { - "sync": "Syncing changes to server…" - }, "error": { "sync": "An error occurred while saving your changes" }, - "warning": { - "duplicate": "Some tracks in your queue are already in this playlist:" - }, - "message": { - "sync": "Changes synced with server" + "header": { + "editor": "Playlist editor" }, "help": { "reorder": "Drag and drop rows to reorder tracks in the playlist" }, + "loading": { + "sync": "Syncing changes to server…" + }, + "message": { + "sync": "Changes synced with server" + }, "modal": { "clearPlaylist": { - "header": "Do you want to clear the playlist \"{playlist}\"?", "content": { "warning": "This will remove all tracks from this playlist and cannot be undone." - } + }, + "header": "Do you want to clear the playlist \"{playlist}\"?" } + }, + "warning": { + "duplicate": "Some tracks in your queue are already in this playlist:" } }, "Form": { - "placeholder": { - "name": "My awesome playlist" + "button": { + "create": "Create playlist", + "update": "Update playlist" }, "header": { + "createFailure": "The playlist could not be created", "createPlaylist": "Create a new playlist", - "updateSuccess": "Playlist updated", "createSuccess": "Playlist created", - "createFailure": "The playlist could not be created" + "updateSuccess": "Playlist updated" }, "label": { "name": "Playlist name", "visibility": "Playlist visiblity" }, - "button": { - "update": "Update playlist", - "create": "Create playlist" + "placeholder": { + "name": "My awesome playlist" } }, "PlaylistModal": { - "placeholder": { - "filterPlaylist": "Enter playlist name" - }, "button": { + "addDuplicate": "Add anyways", "addToPlaylist": "Add to this playlist", "addTrack": "Add track", "cancel": "Cancel", - "addDuplicate": "Add anyways", "edit": "Edit" }, - "header": { - "addToPlaylist": "Add to playlist", - "track": "{title}, by {artist}", - "manage": "Manage playlists", - "addFailure": "The track can't be added to a playlist", - "available": "Available playlists", - "noResults": "No results matching your filter" + "empty": { + "noPlaylists": "No playlists have been created yet" }, - "warning": { - "duplicate": "{ 0 } is already in { 1 }." + "header": { + "addFailure": "The track can't be added to a playlist", + "addToPlaylist": "Add to playlist", + "available": "Available playlists", + "manage": "Manage playlists", + "noResults": "No results matching your filter", + "track": "{title}, by {artist}" + }, + "label": { + "filter": "Filter" + }, + "placeholder": { + "filterPlaylist": "Enter playlist name" }, "table": { "edit": { "header": { "edit": "Edit", - "name": "Name", "lastModification": "Last modification", + "name": "Name", "tracks": "Tracks" } } }, - "label": { - "filter": "Filter" - }, - "empty": { - "noPlaylists": "No playlists have been created yet" + "warning": { + "duplicate": "{ 0 } is already in { 1 }." } }, "TrackPlaylistIcon": { @@ -2914,25 +2889,25 @@ } }, "Widget": { - "placeholder": { - "noPlaylists": "No playlists have been created yet" - }, "button": { "create": "Create playlist", "more": "Show more" + }, + "placeholder": { + "noPlaylists": "No playlists have been created yet" } } }, "radios": { "Button": { - "stopTagsRadio": "Stop tags radio", + "startArtistsRadio": "Start artists radio", + "startPlaylistsRadio": "Start playlists radio", + "startRadio": "Play radio", "startTagsRadio": "Start tags radio", "stopArtistsRadio": "Stop artists radio", - "startArtistsRadio": "Start artists radio", "stopPlaylistsRadio": "Stop playlists radio", - "startPlaylistsRadio": "Start playlists radio", "stopRadio": "Stop radio", - "startRadio": "Play radio" + "stopTagsRadio": "Stop tags radio" }, "Card": { "button": { @@ -2950,23 +2925,12 @@ "vui": { "Pagination": { "label": "Pagination", - "previous": "Previous Page", - "next": "Next Page" + "next": "Next Page", + "previous": "Previous Page" } } }, "composables": { - "useErrorHandler": { - "unexpectedError": "An unexpected error occurred.", - "errorReportTitle": "An unexpected error occured.", - "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", - "leaveFeedback": "Leave feedback" - }, - "useThemeList": { - "browserDefault": "Browser default", - "lightTheme": "Light", - "darkTheme": "Dark" - }, "audio": { "usePlayOptions": { "addToQueueMessage": "{n} tracks were added to your queue | {n} track was added to your queue | {n} tracks were added to your queue" @@ -2975,169 +2939,169 @@ "locale": { "useSharedLabels": { "fields": { - "privacyLevel": { - "label": "Activity visibility", - "help": "Determine the visiblity level of your activity", + "contentCategory": { + "choices": { + "music": "Music", + "other": "Other", + "podcast": "Podcast" + }, + "label": "Content category" + }, + "importStatus": { + "choices": { + "draft": { + "help": "This track has been uploaded, but hasn't been scheduled for processing yet", + "label": "Draft" + }, + "errored": { + "help": "This track could not be processed, please make sure it is tagged correctly", + "label": "Errored" + }, + "finished": { + "help": "Imported", + "label": "Finished" + }, + "pending": { + "help": "This track has been uploaded, but hasn't been processed by the server yet", + "label": "Pending" + }, + "skipped": { + "help": "This track is already present in one of your libraries", + "label": "Skipped" + } + }, + "label": "Click to display more information about the import process for this upload" + }, + "privacyLevel": { "choices": { - "private": "Nobody except me", "instance": "Everyone on this instance", + "private": "Nobody except me", "public": "Everyone, across all instances" }, + "help": "Determine the visiblity level of your activity", + "label": "Activity visibility", "shortChoices": { - "private": "Private", "instance": "Instance", + "private": "Private", "public": "Everyone" } }, - "importStatus": { - "label": "Click to display more information about the import process for this upload", - "choices": { - "skipped": { - "label": "Skipped", - "help": "This track is already present in one of your libraries" - }, - "draft": { - "label": "Draft", - "help": "This track has been uploaded, but hasn't been scheduled for processing yet" - }, - "pending": { - "label": "Pending", - "help": "This track has been uploaded, but hasn't been processed by the server yet" - }, - "errored": { - "label": "Errored", - "help": "This track could not be processed, please make sure it is tagged correctly" - }, - "finished": { - "label": "Finished", - "help": "Imported" - } - } - }, "reportType": { - "label": "Category", "choices": { - "takedownRequest": "Takedown request", - "invalidMetadata": "Invalid metadata", "illegalContent": "Illegal content", + "invalidMetadata": "Invalid metadata", "offensiveContent": "Offensive content", - "other": "Other" - } + "other": "Other", + "takedownRequest": "Takedown request" + }, + "label": "Category" }, "summary": { "label": "Bio" - }, - "contentCategory": { - "label": "Content category", - "choices": { - "podcast": "Podcast", - "music": "Music", - "other": "Other" - } } }, "filters": { - "creationDate": "Creation date", - "releaseDate": "Release date", "accessedDate": "Accessed date", + "albumTitle": "Album name", "appliedDate": "Applied date", - "handledDate": "Handled date", + "artistName": "Artist name", + "bitrate": "Bitrate", + "creationDate": "Creation date", + "dateJoined": "Sign-up date", + "domain": "Domain", + "duration": "Duration", + "expirationDate": "Expiration date", "firstSeen": "First seen date", + "followers": "Followers", + "handledDate": "Handled date", + "itemsCount": "Items", + "lastActivity": "Last activity", "lastSeen": "Last seen date", "modificationDate": "Modification date", - "expirationDate": "Expiration date", - "trackTitle": "Track name", - "albumTitle": "Album name", - "artistName": "Artist name", "name": "Name", - "itemsCount": "Items", - "size": "Size", - "bitrate": "Bitrate", - "duration": "Duration", - "dateJoined": "Sign-up date", - "lastActivity": "Last activity", - "username": "Username", - "domain": "Domaimn", - "users": "Users", "receivedMessages": "Received messages", + "releaseDate": "Release date", + "size": "Size", + "trackTitle": "Track name", "uploads": "Uploads", - "followers": "Followers" + "username": "Username", + "users": "Users" }, "scopes": { - "profile": { - "label": "Profile", - "description": "Access to e-mail, username, and profile information" - }, - "libraries": { - "label": "Libraries and uploads", - "description": "Access to audio files, libraries, artists, albums and tracks" + "edits": { + "description": "Access to edits", + "label": "Edits" }, "favorites": { - "label": "Favorites", - "description": "Access to favorites" - }, - "listenings": { - "label": "Listenings", - "description": "Access to listening history" - }, - "follows": { - "label": "Follows", - "description": "Access to follows" - }, - "playlists": { - "label": "Playlists", - "description": "Access to playlists" - }, - "radios": { - "label": "Radios", - "description": "Access to radios" + "description": "Access to favorites", + "label": "Favorites" }, "filters": { - "label": "Content filters", - "description": "Access to content filters" + "description": "Access to content filters", + "label": "Content filters" + }, + "follows": { + "description": "Access to follows", + "label": "Follows" + }, + "libraries": { + "description": "Access to audio files, libraries, artists, albums and tracks", + "label": "Libraries and uploads" + }, + "listenings": { + "description": "Access to listening history", + "label": "Listenings" }, "notifications": { - "label": "Notifications", - "description": "Access to notifications" + "description": "Access to notifications", + "label": "Notifications" }, - "edits": { - "label": "Edits", - "description": "Access to edits" + "playlists": { + "description": "Access to playlists", + "label": "Playlists" }, - "security": { - "label": "Security", - "description": "Access to security settings such as password and authorization" + "profile": { + "description": "Access to e-mail, username, and profile information", + "label": "Profile" + }, + "radios": { + "description": "Access to radios", + "label": "Radios" }, "reports": { - "label": "Reports", - "description": "Access to moderation reports" + "description": "Access to moderation reports", + "label": "Reports" + }, + "security": { + "description": "Access to security settings such as password and authorization", + "label": "Security" } } } }, "moderation": { "useEditConfigs": { - "description": { - "label": "Description" - }, - "cover": { - "label": "Cover" - }, - "tags": { - "label": "Tags" + "album": { + "releaseDate": "Release date", + "title": "Title" }, "artist": { "name": "Name" }, - "album": { - "title": "Title", - "releaseDate": "Release date" + "cover": { + "label": "Cover" + }, + "description": { + "label": "Description" + }, + "tags": { + "label": "Tags" }, "track": { - "title": "Title", - "position": "Position", "copyright": "Copyright", - "license": "Licence" + "license": "Licence", + "position": "Position", + "title": "Title" } }, "useReport": { @@ -3145,78 +3109,89 @@ "label": "Report {'@'}{username}", "typeLabel": "Account" }, - "track": { - "label": "Report this track…", - "typeLabel": "Track" - }, "album": { "label": "Report this album…", "typeLabel": "Album" }, - "channel": { - "label": "Report this channel…", - "typeLabel": "Channel" - }, "artist": { "label": "Report this artist…", "typeLabel": "Artist", "unknownLabel": "Unknown artist" }, - "playlist": { - "label": "Report this playlist…", - "typeLabel": "Playlist" + "channel": { + "label": "Report this channel…", + "typeLabel": "Channel" }, "library": { "label": "Report this library…", "typeLabel": "Library" + }, + "playlist": { + "label": "Report this playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Report this track…", + "typeLabel": "Track" } }, "useReportConfigs": { - "tags": { - "label": "Tags" - }, - "name": { - "label": "Name" - }, - "creationDate": { - "label": "Creation date" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "visibility": { - "label": "Visibility" - }, - "artist": { - "label": "Artist" - }, - "album": { - "label": "Album", - "title": "Title", - "releaseDate": "Release date" - }, - "track": { - "label": "Track", - "title": "Title", - "position": "Position", - "copyright": "Copyright", - "license": "Licence" - }, - "library": { - "label": "Library", - "description": "Description" - }, - "playlist": { - "label": "Playlist" - }, "account": { "label": "Account", "summary": "Bio" }, + "album": { + "label": "Album", + "releaseDate": "Release date", + "title": "Title" + }, + "artist": { + "label": "Artist" + }, "channel": { "label": "Channel" + }, + "creationDate": { + "label": "Creation date" + }, + "library": { + "description": "Description", + "label": "Library" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Name" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Tags" + }, + "track": { + "copyright": "Copyright", + "label": "Track", + "license": "Licence", + "position": "Position", + "title": "Title" + }, + "visibility": { + "label": "Visibility" } } + }, + "useErrorHandler": { + "errorReportMessage": "To help us understand why it happened, please attach a detailed description of what you did that has triggered the error.", + "errorReportTitle": "An unexpected error occured.", + "leaveFeedback": "Leave feedback", + "unexpectedError": "An unexpected error occurred." + }, + "useThemeList": { + "browserDefault": "Browser default", + "darkTheme": "Dark", + "lightTheme": "Light" } }, "init": { @@ -3225,33 +3200,46 @@ "rateLimitLater": "You sent too many requests and have been rate limited, please try again later" }, "sentry": { - "title": "To enhance the quality of our services, we would like to collect information about crashes during your session.", - "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", - "funkwhaleInstance": "Funkwhale's official Glitchtip instance", "allow": "Allow", - "deny": "Deny" + "deny": "Deny", + "funkwhaleInstance": "Funkwhale's official Glitchtip instance", + "message": "The stack traces will be shared to { 0 } in order to help us understand how and when the errors occur.", + "title": "To enhance the quality of our services, we would like to collect information about crashes during your session." }, "serviceWorker": { - "newAppVersion": "A new version of the app is available.", "actions": { - "update": "Update", - "later": "Later" - } + "later": "Later", + "update": "Update" + }, + "newAppVersion": "A new version of the app is available." } }, "views": { "Notifications": { - "title": "Notifications", + "button": { + "read": "Mark all as read", + "submit": "Got it!" + }, + "empty": { + "notifications": "No notification to show" + }, "header": { - "messages": "Your messages", - "instanceSupport": "Support this Funkwhale pod", "funkwhaleSupport": "Do you like Funkwhale?", + "instanceSupport": "Support this Funkwhale pod", + "messages": "Your messages", "notifications": "Your notifications" }, "label": { "reminder": "Remind me in:", "showRead": "Show read notifications" }, + "link": { + "donate": "Donate", + "help": "Discover other ways to help" + }, + "loading": { + "notifications": "Loading notifications…" + }, "message": { "funkwhaleSupport": "We noticed you've been here for a while. If Funkwhale is useful to you, we could use your help to make it even better!" }, @@ -3263,96 +3251,83 @@ "never": "Never" } }, - "button": { - "submit": "Got it!", - "read": "Mark all as read" - }, - "link": { - "donate": "Donate", - "help": "Discover other ways to help" - }, - "loading": { - "notifications": "Loading notifications…" - }, - "empty": { - "notifications": "No notification to show" - } + "title": "Notifications" }, "Search": { - "header": { - "search": "Search", - "rss": "Subscribe to a podcast RSS feed", - "remote": "Search a remote object" - }, - "label": { - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "playlists": "Playlists", - "radios": "Radios", - "tags": "Tags", - "podcasts": "Podcasts", - "series": "Series" - }, "button": { "submit": "Submit Search Query" + }, + "header": { + "remote": "Search a remote object", + "rss": "Subscribe to a podcast RSS feed", + "search": "Search" + }, + "label": { + "albums": "Albums", + "artists": "Artists", + "playlists": "Playlists", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Tags", + "tracks": "Tracks" } }, "admin": { "ChannelDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "openRemote": "Open remote profile", + "refresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "channelData": "Channel data" }, "label": { "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin" - }, - "button": { - "refresh": "Refresh from remote server", - "openRemote": "Open remote profile", - "delete": "Delete" + "django": "View in Django's admin", + "localProfile": "Open local profile" }, "modal": { "delete": { - "header": "Delete this channel?", "content": { "warning": "The channel will be removed, as well as associated uploads, tracks, and albums. This action is irreversible." - } + }, + "header": "Delete this channel?" } }, - "header": { - "channelData": "Channel data", - "activity": "Activity", - "audioContent": "Audio content" - }, "table": { - "channelData": { - "name": "Name", - "category": "Category", - "account": "Account", - "domain": "Domain", - "description": "Description", - "url": "URL", - "rss": "RSS feed" - }, "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", + "edits": "Edits", "favorited": "Favorited tracks", - "playlists": "Playlists", + "firstSeen": "First seen", "linkedReports": "Linked reports", - "edits": "Edits" + "listenings": "Listenings", + "playlists": "Playlists" }, "audioContent": { + "albums": "Albums", "cachedSize": "Cached size", "totalSize": "Total size", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" + "tracks": "Tracks", + "uploads": "Uploads" + }, + "channelData": { + "account": "Account", + "category": "Category", + "description": "Description", + "domain": "Domain", + "name": "Name", + "rss": "RSS feed", + "url": "URL" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "CommonList": { @@ -3371,189 +3346,182 @@ }, "Settings": { "header": { - "settings": "Instance Settings", - "instanceInfo": "Instance Information", - "signups": "Sign-ups", - "security": "Security", - "music": "Music", "channels": "Channels", - "playlists": "Playlists", - "moderation": "Moderation", "federation": "Federation", - "subsonic": "Subsonic", + "instanceInfo": "Instance Information", + "moderation": "Moderation", + "music": "Music", + "playlists": "Playlists", + "sections": "Sections", + "security": "Security", + "settings": "Instance Settings", + "signups": "Sign-ups", "stats": "Statistics", - "ui": "User Interface", - "sections": "Sections" + "subsonic": "Subsonic", + "ui": "User Interface" } }, "library": { "AlbumDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { - "local": "Local", + "activity": "Activity", "albumData": "Album data", - "activity": "Activity", - "audioContent": "Audio content" + "audioContent": "Audio content", + "local": "Local" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this album?", - "content": { - "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "album": { - "title": "Title", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "ArtistDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "artistData": "Artist data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { "localProfile": "Open local profile", - "django": "View in Django's admin", "musicbrainz": "Open on MusicBrainz", "remoteProfile": "Open remote profile", - "category": "Category", - "domain": "Domain", "reports": "Linked reports", - "edits": "Edits", - "libraries": "Libraries", - "uploads": "Uploads", - "albums": "Albums", - "tracks": "Tracks" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" - }, - "modal": { - "delete": { - "header": "Delete this artist?", - "content": { - "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } - } - }, - "table": { - "artist": { - "name": "Name", - "description": "Description" - }, - "activity": { - "firstSeen": "First seen", - "listenings": "Listenings", - "favorited": "Favorited tracks", - "playlists": "Playlists" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" - } - } - }, - "Base": { - "title": "Manage Library", - "menu": { - "secondary": "Secondary menu" - }, - "link": { - "edits": "Edits", - "channels": "Channels", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks", - "libraries": "Libraries", - "uploads": "Uploads", - "tags": "Tags" - } - }, - "EditsList": { - "title": "Edits", - "header": { - "edits": "Library edits" - } - }, - "LibraryDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "header": { - "local": "Local", - "libraryData": "Library data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", - "account": "Account", - "reports": "Linked reports", - "domain": "Domain", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks", "uploads": "Uploads" }, - "button": { - "delete": "Delete" - }, "modal": { "delete": { - "header": "Delete this library?", "content": { - "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." - } + "warning": "The album will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this album?" } }, "table": { - "library": { - "name": "Name", - "description": "Description" + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" }, + "album": { + "description": "Description", + "title": "Title" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "ArtistDetail": { + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" + }, + "header": { + "activity": "Activity", + "artistData": "Artist data", + "audioContent": "Audio content", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Category", + "django": "View in Django's admin", + "domain": "Domain", + "edits": "Edits", + "libraries": "Libraries", + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "modal": { + "delete": { + "content": { + "warning": "The artist will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this artist?" + } + }, + "table": { + "activity": { + "favorited": "Favorited tracks", + "firstSeen": "First seen", + "listenings": "Listenings", + "playlists": "Playlists" + }, + "artist": { + "description": "Description", + "name": "Name" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "edits": "Edits", + "libraries": "Libraries", + "tags": "Tags", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Manage Library" + }, + "EditsList": { + "header": { + "edits": "Library edits" + }, + "title": "Edits" + }, + "LibraryDetail": { + "button": { + "delete": "Delete" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "libraryData": "Library data", + "local": "Local" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "domain": "Domain", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "tracks": "Tracks", + "uploads": "Uploads", + "visibility": "Visibility" + }, + "modal": { + "delete": { + "content": { + "warning": "The library will be deleted, as well as associated uploads, tracks, favorites and listening history. This action is irreversible." + }, + "header": "Delete this library?" + } + }, + "table": { "activity": { "firstSeen": "First seen", "followers": "Followers" @@ -3561,158 +3529,188 @@ "audioContent": { "cachedSize": "Cached size", "totalSize": "Total size" + }, + "library": { + "description": "Description", + "name": "Name" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "TagDetail": { - "header": { - "tagData": "Tag data", - "activity": "Activity", - "audioContent": "Audio content" - }, - "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { "delete": "Delete" }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "tagData": "Tag data" + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "django": "View in Django's admin", + "localProfile": "Open local profile", + "tracks": "Tracks" + }, "modal": { "delete": { - "header": "Delete this tag?", "content": { "warning": "The tag will be removed and unlinked from any existing entity. This action is irreversible." - } + }, + "header": "Delete this tag?" } }, "table": { - "tag": { - "name": "Name" - }, "activity": { "firstSeen": "First seen" + }, + "tag": { + "name": "Name" } } }, "TrackDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "delete": "Delete", + "edit": "Edit", + "remoteRefresh": "Refresh from remote server" }, "header": { + "activity": "Activity", "local": "Local", - "trackData": "Track data", - "activity": "Activity" + "trackData": "Track data" }, "link": { - "localProfile": "Open local profile", - "django": "View in Django's admin", - "musicbrainz": "Open on MusicBrainz", - "remoteProfile": "Open remote profile", "album": "Album", + "albumArtist": "Album artist", "artist": "Artist", + "django": "View in Django's admin", "domain": "Domain", - "reports": "Linked reports", "edits": "Edits", "libraries": "Libraries", - "uploads": "Uploads", - "albumArtist": "Album artist" - }, - "button": { - "remoteRefresh": "Refresh from remote server", - "edit": "Edit", - "delete": "Delete" + "localProfile": "Open local profile", + "musicbrainz": "Open on MusicBrainz", + "remoteProfile": "Open remote profile", + "reports": "Linked reports", + "uploads": "Uploads" }, "modal": { "delete": { - "header": "Delete this track?", "content": { "warning": "The track will be deleted, as well as associated uploads, favorites and listening history. This action is irreversible." - } + }, + "header": "Delete this track?" } }, "table": { - "track": { - "title": "Title", - "position": "Position", - "discNumber": "Disc number", - "copyright": "Copyright", - "license": "License", - "description": "Description" - }, "activity": { + "favorited": "Favorited tracks", "firstSeen": "First seen", "listenings": "Listenings", - "favorited": "Favorited tracks", "playlists": "Playlists" }, + "track": { + "copyright": "Copyright", + "description": "Description", + "discNumber": "Disc number", + "license": "License", + "position": "Position", + "title": "Title" + }, "trackData": { "cachedSize": "Cached size", "totalSize": "Total size" } + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" } }, "UploadDetail": { - "header": { - "local": "Local", - "uploadData": "Upload data", - "activity": "Activity", - "audioContent": "Audio content" - }, "button": { - "download": "Download", - "delete": "Delete" + "delete": "Delete", + "download": "Download" + }, + "header": { + "activity": "Activity", + "audioContent": "Audio content", + "local": "Local", + "uploadData": "Upload data" }, "link": { - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "visibility": "Visibility", "account": "Account", + "django": "View in Django's admin", "domain": "Domain", "importStatus": "Import status", "library": "Library", - "type": "Type" + "remoteProfile": "Open remote profile", + "type": "Type", + "visibility": "Visibility" }, "modal": { "delete": { - "header": "Delete this upload?", "content": { "warning": "The upload will be removed. This action is irreversible." - } + }, + "header": "Delete this upload?" } }, + "notApplicable": "N/A", "table": { - "upload": { - "name": "Name" - }, "activity": { - "firstSeen": "First seen", - "accessedDate": "Accessed date" + "accessedDate": "Accessed date", + "firstSeen": "First seen" }, "audioContent": { - "track": "Track", - "cachedSize": "Cached size", - "size": "Size", "bitrate": { "label": "Bitrate", "value": "{bitrate}/s" }, - "duration": "Duration" + "cachedSize": "Cached size", + "duration": "Duration", + "size": "Size", + "track": "Track" + }, + "upload": { + "name": "Name" } - }, - "notApplicable": "N/A" + } } }, "moderation": { "AccountsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + "button": { + "addPolicy": "Add a moderation policy" }, - "tooltip": { - "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + "description": { + "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "accountData": "Account data", + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "localAccount": "Local account", + "noPolicy": "You don't have any rule in place for this account." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "domain": "Domain", + "libraries": "Libraries", + "linkedReports": "Linked reports", + "openProfile": "Open profile", + "remoteProfile": "Open remote profile", + "requests": "Requests", + "tracks": "Tracks", + "uploads": "Uploads" + }, + "notApplicable": "N/A", "option": { "permission": { "library": "Library", @@ -3720,142 +3718,121 @@ "settings": "Settings" } }, - "header": { - "localAccount": "Local account", - "noPolicy": "You don't have any rule in place for this account.", - "activePolicy": "This domain is subject to specific moderation rules", - "accountData": "Account data", - "activity": "Activty", - "audioContent": "Audio content" - }, - "link": { - "openProfile": "Open profile", - "django": "View in Django's admin", - "remoteProfile": "Open remote profile", - "domain": "Domain", - "linkedReports": "Linked reports", - "requests": "Requests", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, - "description": { - "policy": "Moderation policies help you control how your instance interact with a given domain or account" - }, - "button": { - "addPolicy": "Add a moderation policy" - }, "table": { "accountData": { - "username": "Username", "displayName": "Display name", "email": "Email address", + "lastActivity": "Last activity", + "lastChecked": "Last checked", "loginStatus": { - "label": "Login status", + "disabled": "Disabled", "enabled": "Enabled", - "disabled": "Disabled" + "label": "Login status" }, "permissions": "Permissions", - "userType": "Type", - "lastChecked": "Last checked", "signupDate": "Sign-up date", - "lastActivity": "Last activity" + "userType": "Type", + "username": "Username" }, "activity": { - "firstSeen": "First seen", + "emittedFollows": "Emitted library follows", "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" + "firstSeen": "First seen", + "receivedFollows": "Received library follows" }, "audioContent": { "cachedSize": "Cached size", - "uploadQuota": "Upload quota", "megabyte": "MB", - "totalSize": "Total size" + "totalSize": "Total size", + "uploadQuota": "Upload quota" } }, - "notApplicable": "N/A" + "tooltip": { + "uploadQuota": "Determine how much content the user can upload. Leave empty to use the default value of the instance." + }, + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "Base": { - "title": "Moderation", + "link": { + "accounts": "Accounts", + "domains": "Domains", + "reports": "Reports", + "userRequests": "User Requests" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "reports": "Reports", - "userRequests": "User Requests", - "domains": "Domains", - "accounts": "Accounts" - } + "title": "Moderation" }, "DomainsDetail": { - "warning": { - "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" - }, - "link": { - "website": "Open website", - "django": "View in Django's admin", - "knownAccounts": "Known accounts", - "channels": "Channels", - "libraries": "Libraries", - "uploads": "Uploads", - "artists": "Artists", - "albums": "Albums", - "tracks": "Tracks" - }, "button": { - "removeFromAllowList": "Remove from allow-list", - "addToAllowList": "Add to allow-list", "addPolicy": "Add a moderation policy", - "refreshNodeInfo": "Refresh node info" - }, - "header": { - "noPolicy": "You don't have any rule in place for this domain.", - "activePolicy": "This domain is subject to specific moderation rules", - "instanceData": "Instance data", - "activity": "Activty", - "audioContent": "Audio content" + "addToAllowList": "Add to allow-list", + "refreshNodeInfo": "Refresh node info", + "removeFromAllowList": "Remove from allow-list" }, "description": { "policy": "Moderation policies help you control how your instance interact with a given domain or account" }, + "header": { + "activePolicy": "This domain is subject to specific moderation rules", + "activity": "Activty", + "audioContent": "Audio content", + "instanceData": "Instance data", + "noPolicy": "You don't have any rule in place for this domain." + }, + "link": { + "albums": "Albums", + "artists": "Artists", + "channels": "Channels", + "django": "View in Django's admin", + "knownAccounts": "Known accounts", + "libraries": "Libraries", + "tracks": "Tracks", + "uploads": "Uploads", + "website": "Open website" + }, + "notApplicable": "N/A", "table": { + "activity": { + "emittedFollows": "Emitted library follows", + "emittedMessages": "Emitted messages", + "firstSeen": "First seen", + "receivedFollows": "Received library follows" + }, + "audioContent": { + "cachedSize": "Cached size", + "totalSize": "Total size" + }, "instanceData": { + "domainName": "Name", "inAllowList": { + "false": "No", "label": "Is present on allow-list", - "true": "Yes", - "false": "No" + "true": "Yes" }, "lastChecked": "Last checked", + "nodeInfoStatus": { + "label": "Status", + "value": "Error while fetching node info" + }, "software": { "label": "Software", "value": "{name} ({version})" }, - "domainName": "Name", - "totalUsers": "Total users", - "nodeInfoStatus": { - "label": "Status", - "value": "Error while fetching node info" - } - }, - "activity": { - "firstSeen": "First seen", - "emittedMessages": "Emitted messages", - "receivedFollows": "Received library follows", - "emittedFollows": "Emitted library follows" - }, - "audioContent": { - "cachedSize": "Cached size", - "totalSize": "Total size" + "totalUsers": "Total users" } }, - "notApplicable": "N/A" + "warning": { + "stats": "Statistics are computed from known activity and content on your instance, and do not reflect general activity for this object" + } }, "DomainsList": { - "title": "Domains", + "button": { + "add": "Add" + }, "header": { "domains": "Domains", "failure": "Error while creating domain" @@ -3864,18 +3841,12 @@ "addDomain": "Add a domain", "addToAllowList": "Add to allow-list" }, - "button": { - "add": "Add" - } + "title": "Domains" }, "ReportsList": { - "title": "Reports", "header": { "reports": "Reports" }, - "placeholder": { - "search": "Search by account, summary, domain…" - }, "label": { "search": "Search", "status": "Status" @@ -3888,19 +3859,19 @@ } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by account, summary, domain…" + }, + "title": "Reports" }, "RequestsList": { - "title": "User Requests", - "placeholder": { - "search": "Search by username" - }, "header": { "userRequests": "User Requests" }, @@ -3911,31 +3882,35 @@ "option": { "status": { "all": "All", - "pending": "Pending", "approved": "Approved", + "pending": "Pending", "refused": "Refused" } }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" + }, + "placeholder": { + "search": "Search by username" + }, + "title": "User Requests" } }, "users": { "Base": { - "title": "Manage users", + "link": { + "invitations": "Invitations", + "users": "Users" + }, "menu": { "secondary": "Secondary menu" }, - "link": { - "users": "Users", - "invitations": "Invitations" - } + "title": "Manage users" } } }, @@ -3946,7 +3921,6 @@ } }, "EmailConfirm": { - "title": "Confirm your e-mail address", "header": { "failure": "Could not confirm your e-mail address", "success": "E-mail address confirmed" @@ -3960,22 +3934,22 @@ }, "message": { "success": "You can now use the service without limitations" - } + }, + "title": "Confirm your e-mail address" }, "Login": { - "title": "Log in", "header": { "login": "Log in to your Funkwhale account" - } + }, + "title": "Log in" }, "PasswordReset": { - "title": "Reset your password", - "placeholder": { - "email": "Enter the e-mail address linked to your account" + "button": { + "requestReset": "Ask for a password reset" }, "header": { - "reset": "Reset your password", - "failure": "Error while asking for a password reset" + "failure": "Error while asking for a password reset", + "reset": "Reset your password" }, "help": { "form": "Use this form to request a password reset. We will send an e-mail to the given address with instructions to reset your password." @@ -3986,174 +3960,175 @@ "link": { "back": "Back to login" }, - "button": { - "requestReset": "Ask for a password reset" - } + "placeholder": { + "email": "Enter the e-mail address linked to your account" + }, + "title": "Reset your password" }, "PasswordResetConfirm": { - "title": "Change your password", + "button": { + "update": "Update your password" + }, "header": { "failure": "Error while changing your password", "success": "Password updated successfully" }, - "message": { - "success": "Your password has been updated successfully.", - "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes." + "label": { + "newPassword": "New password" }, "link": { "back": "Back to login", "login": "Proceed to login" }, - "label": { - "newPassword": "New password" + "message": { + "requestSent": "If the e-mail address provided in the previous step is valid and linked to a user account, you should receive an e-mail with reset instructions in the next couple of minutes.", + "success": "Your password has been updated successfully." }, - "button": { - "update": "Update your password" - } + "title": "Change your password" }, "Plugins": { "title": "Manage plugins" }, "ProfileActivity": { "header": { - "recentlyListened": "Recently listened", + "playlists": "Playlists", "recentlyFavorited": "Recently favorited", - "playlists": "Playlists" + "recentlyListened": "Recently listened" } }, "ProfileBase": { - "title": "{username}'s profile", - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "overview": "Overview", - "activity": "Activity" - }, "label": { "self": "This is you!" - } + }, + "link": { + "activity": "Activity", + "domainView": "View on {domain}", + "moderation": "Open in moderation interface", + "overview": "Overview" + }, + "title": "{username}'s profile" }, "ProfileOverview": { - "header": { - "libraries": "User Libraries", - "channels": "Channels", - "sharedLibraries": "This user shared the following libraries" + "button": { + "cancel": "Cancel", + "createChannel": "Create channel", + "next": "Next step", + "previous": "Previous step" }, - "modal": { - "createChannel": { - "header": "Create channel", - "podcast": { - "header": "Podcast channel" - }, - "artist": { - "header": "Artist channel" - } - } + "header": { + "channels": "Channels", + "libraries": "User Libraries", + "sharedLibraries": "This user shared the following libraries" }, "link": { "addNew": "Add New" }, - "button": { - "cancel": "Cancel", - "previous": "Previous step", - "next": "Next step", - "createChannel": "Create channel" + "modal": { + "createChannel": { + "artist": { + "header": "Artist channel" + }, + "header": "Create channel", + "podcast": { + "header": "Podcast channel" + } + } } }, "Signup": { - "title": "Sign up", "header": { "createAccount": "Create a Funkwhale account" - } + }, + "title": "Sign up" } }, "channels": { "DetailBase": { - "title": "Channel", - "meta": { - "episodes": "No episodes | {n} episode | {n} episodes", - "tracks": "No tracks | {n} track | {n} tracks", - "subscribers": "No subscribers | {n} subscriber | {n} subscribers", - "listenings": "No listenings | {n} listening | {n} listenings" + "button": { + "cancel": "Cancel", + "confirm": "Delete", + "delete": "Delete…", + "edit": "Edit…", + "embed": "Embed", + "play": "Play", + "updateChannel": "Update channel", + "upload": "Upload" }, "header": { - "podcastChannel": "Podcast channel", - "artistChannel": "Artist channel" + "artistChannel": "Artist channel", + "podcastChannel": "Podcast channel" + }, + "link": { + "channelEpisodes": "All episodes", + "channelOverview": "Overview", + "channelTracks": "Tracks", + "domainView": "View on {domain}", + "mirrored": "Mirrored from {domain}", + "moderation": "Open in moderation interface" + }, + "meta": { + "episodes": "No episodes | {n} episode | {n} episodes", + "listenings": "No listenings | {n} listening | {n} listenings", + "subscribers": "No subscribers | {n} subscriber | {n} subscribers", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { - "subscribe": { - "header": "Subscribe to this channel", - "funkwhale": { - "header": "Subscribe on Funkwhale" - }, - "rss": { - "header": "Subscribe via RSS", - "content": { - "help": "Copy paste the following URL in your favorite podcatcher:" - } - }, - "fediverse": { - "header": "Subscribe on the Fediverse", - "content": { - "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" - } - } - }, "delete": { - "header": "Delete this Channel?", "content": { "warning": "The channel will be deleted, as well as any related files and data. This action is irreversible." - } + }, + "header": "Delete this Channel?" }, "embed": { "header": "Embed this artist work on your website" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "If you're using Mastodon or other fediverse applications, you can subscribe to this account:" + }, + "header": "Subscribe on the Fediverse" + }, + "funkwhale": { + "header": "Subscribe on Funkwhale" + }, + "header": "Subscribe to this channel", + "rss": { + "content": { + "help": "Copy paste the following URL in your favorite podcatcher:" + }, + "header": "Subscribe via RSS" + } } }, - "button": { - "cancel": "Cancel", - "embed": "Embed", - "edit": "Edit…", - "delete": "Delete…", - "upload": "Upload", - "play": "Play", - "updateChannel": "Update channel", - "confirm": "Delete" - }, - "link": { - "domainView": "View on {domain}", - "moderation": "Open in moderation interface", - "mirrored": "Mirrored from {domain}", - "channelOverview": "Overview", - "channelEpisodes": "All episodes", - "channelTracks": "Tracks" - } + "title": "Channel" }, "DetailOverview": { "header": { - "uploadsSuccess": "Uploads published successfully", - "uploadsFailure": "Some uploads couldn't be published", - "uploadsProcessing": "Uploads are being processed", + "albums": "Albums", "latestEpisodes": "Latest episodes", "latestTracks": "Latest tracks", "series": "Series", - "albums": "Albums" - }, - "meta": { - "progress": "Processed uploads: {finished}/{total}" + "uploadsFailure": "Some uploads couldn't be published", + "uploadsProcessing": "Uploads are being processed", + "uploadsSuccess": "Uploads published successfully" }, "link": { - "skippedUploads": "View skipped uploads", + "addAlbum": "Add new", "erroredUploads": "View errored uploads", - "addAlbum": "Add new" + "skippedUploads": "View skipped uploads" }, "message": { "processing": "Your uploads are being processed by Funkwhale and will be live very soon." + }, + "meta": { + "progress": "Processed uploads: {finished}/{total}" } }, "SubscriptionsList": { - "title": "Subscribed Channels", - "placeholder": { - "search": "Filter by name…" + "button": { + "cancel": "Cancel", + "subscribe": "Subscribe" }, "link": { "addNew": "Add new" @@ -4163,58 +4138,58 @@ "header": "Subscription" } }, - "button": { - "cancel": "Cancel", - "subscribe": "Subscribe" - } + "placeholder": { + "search": "Filter by name…" + }, + "title": "Subscribed Channels" } }, "content": { "Base": { - "title": "Add content", - "menu": { - "secondary": "Secondary menu" - }, "link": { "libraries": "Libraries", "tracks": "Tracks" - } + }, + "menu": { + "secondary": "Secondary menu" + }, + "title": "Add content" }, "Home": { - "title": "Add and manage content", - "help": { - "uploadQuota": "This instance offers up to {quota} of storage space for every user." - }, - "header": { - "channel": "Publish your work in a channel", - "upload": "Upload third-party content in a library", - "follow": "Follow remote libraries" + "button": { + "start": "Get started" }, "description": { "channel": { "1": "If you are a musician or a podcaster, channels are designed for you!", "2": "Share your work publicly and get subscribers on Funkwhale, the Fediverse or any podcasting application." }, - "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family.", - "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner." + "follow": "Follow libraries from other users to get access to new music. Public libraries can be followed immediately, while following a private library requires approval from its owner.", + "upload": "Upload your personal music library to Funkwhale to enjoy it from anywhere and share it with friends and family." }, - "button": { - "start": "Get started" - } + "header": { + "channel": "Publish your work in a channel", + "follow": "Follow remote libraries", + "upload": "Upload third-party content in a library" + }, + "help": { + "uploadQuota": "This instance offers up to {quota} of storage space for every user." + }, + "title": "Add and manage content" }, "libraries": { "Card": { - "label": { - "size": "Total size of the files in this library" - }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks" - }, "button": { "upload": "Upload" }, + "label": { + "size": "Total size of the files in this library" + }, "link": { "details": "Library Details" + }, + "meta": { + "tracks": "No tracks | {n} track | {n} tracks" } }, "FilesTable": { @@ -4222,64 +4197,61 @@ "delete": "Delete", "restartImport": "Restart import" }, - "placeholder": { - "search": "Search by domain, title, artist, album…" - }, "button": { "showStatus": "Show information about the upload status for this track" }, - "label": { - "search": "Search", - "importStatus": "Import status" - }, - "option": { - "status": { - "all": "All", - "draft": "Draft", - "pending": "Pending", - "skipped": "Skipped", - "failed": "Failed", - "finished": "Finished" - } - }, - "ordering": { - "label": "Ordering", - "direction": { - "label": "Ordering direction", - "ascending": "Ascending", - "descending": "Descending" - } - }, "empty": { "noTracks": "No tracks have been added to this libray yet" }, - "table": { - "file": { - "header": { - "title": "Title", - "artist": "Artist", - "album": "Album", - "uploadDate": "Upload date", - "importStatus": "Import status", - "duration": "Duration", - "size": "Size" - } + "label": { + "importStatus": "Import status", + "search": "Search" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "All", + "draft": "Draft", + "failed": "Failed", + "finished": "Finished", + "pending": "Pending", + "skipped": "Skipped" } }, + "ordering": { + "direction": { + "ascending": "Ascending", + "descending": "Descending", + "label": "Ordering direction" + }, + "label": "Ordering" + }, "pagination": { "results": "Showing results {start}-{end} on {total}" }, - "notApplicable": "N/A" + "placeholder": { + "search": "Search by domain, title, artist, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artist", + "duration": "Duration", + "importStatus": "Import status", + "size": "Size", + "title": "Title", + "uploadDate": "Upload date" + } + } + } }, "Form": { - "placeholder": { - "description": "This library contains my personal music, I hope you like it.", - "name": "My awesome library" - }, - "message": { - "libraryUpdated": "Library updated", - "libraryCreated": "Library created", - "libraryDeleted": "LIbrary deleted" + "button": { + "confirm": "Delete library", + "create": "Create library", + "delete": "Delete", + "update": "Update library" }, "description": { "library": "Libraries help you organize and share your music collections. You can upload your own music collection to Funkwhale and share it with your friends and family.", @@ -4289,154 +4261,157 @@ "failure": "Error" }, "label": { - "name": "Name", "description": "Description", + "name": "Name", "visibility": "Visibility" }, - "button": { - "update": "Update library", - "create": "Create library", - "delete": "Delete", - "confirm": "Delete library" + "message": { + "libraryCreated": "Library created", + "libraryDeleted": "LIbrary deleted", + "libraryUpdated": "Library updated" }, "modal": { "delete": { - "header": "Delete this library?", "content": { "warning": "The library and all its tracks will be deleted. This can not be undone." - } + }, + "header": "Delete this library?" } + }, + "placeholder": { + "description": "This library contains my personal music, I hope you like it.", + "name": "My awesome library" } }, "Home": { - "loading": { - "libraries": "Loading libraries…" + "empty": { + "noLibrary": "Looks like you don't have a library, it's time to create one." }, "header": { "libraries": "My libraries" }, - "empty": { - "noLibrary": "Looks like you don't have a library, it's time to create one." - }, "link": { "createLibrary": "Create a new library" + }, + "loading": { + "libraries": "Loading libraries…" } }, "Quota": { + "button": { + "purge": "Purge" + }, "header": { "currentUsage": "Current usage" }, - "loading": { - "currentUsage": "Loading usage data…" - }, "label": { - "percentUsed": "{progress}%", "currentUsage": "{amount} used on {max} allowed", - "skipped": "Skipped files", "errored": "Errored files", - "pending": "Pending files" + "pending": "Pending files", + "percentUsed": "{progress}%", + "skipped": "Skipped files" }, "link": { "viewFiles": "View files" }, - "button": { - "purge": "Purge" + "loading": { + "currentUsage": "Loading usage data…" }, "modal": { - "purgePending": { - "header": "Purge pending files?", - "content": { - "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." - } - }, - "purgeSkipped": { - "header": "Purge skipped files?", - "content": { - "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." - } - }, "purgeErrored": { - "header": "Purge errored files?", "content": { "description": "Removes uploaded tracks that could not be processed by the server completely, adding the corresponding data to your quota." - } + }, + "header": "Purge errored files?" + }, + "purgePending": { + "content": { + "description": "Removes uploaded but yet to be processed tracks completely, adding the corresponding data to your quota." + }, + "header": "Purge pending files?" + }, + "purgeSkipped": { + "content": { + "description": "Removes uploaded tracks skipped during the import processes completely, adding the corresponding data to your quota." + }, + "header": "Purge skipped files?" } } } }, "remote": { "Card": { - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "public": "This library is public and you can access its content freely" - }, - "message": { - "scanSkipped": "Scan skipped (previous scan is too recent)", - "scanLaunched": "Scan launched" + "button": { + "cancel": "Cancel follow request", + "follow": "Follow", + "pending": "Follow request pending approval", + "unfollow": "Unfollow" }, "error": { "follow": "Cannot follow remote library: {error}", "unfollow": "Cannot unfollow remote library: {error}" }, - "meta": { - "tracks": "No tracks | {n} track | {n} tracks", - "lastUpdate": "Last update: ", - "failedTracks": "Failed tracks: {tracks}" - }, - "button": { - "follow": "Follow", - "pending": "Follow request pending approval", - "cancel": "Cancel follow request", - "unfollow": "Unfollow" - }, - "link": { - "scanDetails": "Details", - "scan": "Scan now " - }, "label": { - "sharingLink": "Sharing link", + "scanFailure": "Problem during scanning", + "scanPartialSuccess": "Scanned with errors", "scanPending": "Scan pending", "scanProgress": "Scanning ({progress})", - "scanFailure": "Problem during scanning", "scanSuccess": "Scanned", - "scanPartialSuccess": "Scanned with errors" + "sharingLink": "Sharing link" + }, + "link": { + "scan": "Scan now", + "scanDetails": "Details" + }, + "message": { + "scanLaunched": "Scan launched", + "scanSkipped": "Scan skipped (previous scan is too recent)" + }, + "meta": { + "failedTracks": "Failed tracks: {tracks}", + "lastUpdate": "Last update:", + "tracks": "No tracks | {n} track | {n} tracks" }, "modal": { "unfollow": { - "header": "Unfollow this libary?", "content": { "warning": "By unfollowing this library, you loose access to its content." - } + }, + "header": "Unfollow this libary?" } + }, + "tooltip": { + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } }, "Home": { - "loading": { - "remoteLibraries": "Loading remote libraries…" - }, - "header": { - "remoteLibraries": "Remote libraries", - "knownLibraries": "Known libraries" + "button": { + "refresh": "Refresh" }, "description": { "remoteLibraries": "Remote libraries are owned by other users on the network. You can access them as long as they are public or you are granted access." }, - "button": { - "refresh": "Refresh" + "header": { + "knownLibraries": "Known libraries", + "remoteLibraries": "Remote libraries" + }, + "loading": { + "remoteLibraries": "Loading remote libraries…" } }, "ScanForm": { - "placeholder": { - "url": "Enter a library URL" - }, "button": { "submit": "Submit search" }, + "header": { + "failure": "Could not fetch remote library" + }, "label": { "search": "Search a remote library" }, - "header": { - "failure": "Could not fetch remote library" + "placeholder": { + "url": "Enter a library URL" } } } @@ -4444,174 +4419,196 @@ "library": { "DetailAlbums": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailOverview": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "DetailTracks": { "empty": { - "upload": "This library is empty, you should upload something in it!", - "follow": "You may need to follow this library to see its content." + "follow": "You may need to follow this library to see its content.", + "upload": "This library is empty, you should upload something in it!" } }, "Edit": { - "header": { - "libraryContents": "Library contents", - "followers": "Followers" - }, "button": { "accept": "Accept", "reject": "Reject" }, + "empty": { + "noFollowers": "Nobody is following this library" + }, + "header": { + "followers": "Followers", + "libraryContents": "Library contents" + }, "loading": { "followers": "Loading followers…" }, "table": { "action": { "header": { - "user": "User", + "action": "Action", "date": "Date", "status": "Status", - "action": "Action" + "user": "User" }, "status": { - "pending": "Pending approval", "accepted": "Accepted", + "pending": "Pending approval", "rejected": "Rejected" } } - }, - "empty": { - "noFollowers": "Nobody is following this library" } }, "LibraryBase": { - "title": "Library", - "label": { - "private": "Private", - "instance": "Restricted", - "public": "Public", - "sharingLink": "Sharing link" - }, - "tooltip": { - "private": "This library is private and your approval from its owner is needed to access its content", - "instance": "This library is restricted to users on this pod only", - "public": "This library is public and you can access its content freely" + "button": { + "edit": "Edit", + "upload": "Upload" }, "description": { "sharingLink": "Share this link with other users so they can request access to this library by copy-pasting it in their pod search bar." }, + "label": { + "instance": "Restricted", + "private": "Private", + "public": "Public", + "sharingLink": "Sharing link" + }, "link": { + "albums": "Albums", + "artists": "Artists", "domain": "View on {domain}", "moderation": "Open in moderation interface", "owner": "Owned by {username}", - "artists": "Artists", - "albums": "Albums", "tracks": "Tracks" }, "meta": { "tracks": "No tracks | {n} track | {n} tracks" }, - "button": { - "upload": "Upload", - "edit": "Edit" + "title": "Library", + "tooltip": { + "instance": "This library is restricted to users on this pod only", + "private": "This library is private and your approval from its owner is needed to access its content", + "public": "This library is public and you can access its content freely" } } }, "playlists": { "Detail": { - "title": "Playlist", - "meta": { - "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" + "button": { + "cancel": "Cancel", + "confirm": "Delete playlist", + "delete": "Delete", + "edit": "Edit", + "embed": "Embed", + "playAll": "Play all", + "stopEdit": "Stop Editing" + }, + "empty": { + "noTracks": "There are no tracks in this playlist yet" }, "header": { "tracks": "Tracks" }, - "button": { - "playAll": "Play all", - "stopEdit": "Stop Editing", - "edit": "Edit", - "embed": "Embed", - "delete": "Delete", - "cancel": "Cancel", - "confirm": "Delete playlist" + "meta": { + "tracks": "Playlist containing {n} track, by {username} | Playlist containing {n} tracks, by {username}" }, "modal": { "delete": { - "header": "Do you want to delete the playlist {playlist}?", "content": { "warning": "This will completely delete this playlist and cannot be undone." - } + }, + "header": "Do you want to delete the playlist {playlist}?" }, "embed": { "header": "Embed this playlist on your website" } }, - "empty": { - "noTracks": "There are no tracks in this playlist yet" - } + "title": "Playlist" }, "List": { - "header": { - "playlists": "Playlists", - "browse": "Browsing playlists" - }, - "placeholder": { - "search": "Enter playlist name…" - }, "button": { - "manage": "Manage your playlists", "create": "Create a playlist", + "manage": "Manage your playlists", "search": "Search" }, + "empty": { + "noResults": "No results matching your query" + }, + "header": { + "browse": "Browsing playlists", + "playlists": "Playlists" + }, "label": { "search": "Search" }, "ordering": { - "label": "Ordering", "direction": { - "label": "Order", "ascending": "Ascending", - "descending": "Descending" - } + "descending": "Descending", + "label": "Order" + }, + "label": "Ordering" }, "pagination": { "results": "Results per page" }, - "empty": { - "noResults": "No results matching your query" + "placeholder": { + "search": "Enter playlist name…" } } }, "radios": { "Detail": { - "title": "Radio", + "button": { + "confirm": "Delete radio", + "delete": "Delete", + "edit": "Edit…" + }, + "empty": { + "noTracks": "No tracks have been hadded to this radio yet" + }, "header": { "radio": "Radio containing {tracks} tracks, by ", "tracks": "Tracks" }, - "button": { - "edit": "Edit…", - "delete": "Delete", - "confirm": "Delete radio" - }, "modal": { "delete": { - "header": "Do you want to delete the radio {radio}?", "content": { "warning": "This will completely delete this radio and cannot be undone." - } + }, + "header": "Do you want to delete the radio {radio}?" } }, - "empty": { - "noTracks": "No tracks have been hadded to this radio yet" - } + "title": "Radio" + } + }, + "ChooseInstance": { + "button": { + "submit": "Submit" + }, + "header": { + "chooseInstance": "Choose your instance", + "failure": "It is not possible to connect to the given URL", + "suggestions": "Suggested choices" + }, + "help": { + "notFunkwhaleServer": "The given address is not a Funkwhale server", + "selectPod": "To continue, please select the Funkwhale instance you want to connect to. Enter the address directly, or select one of the suggested choices.", + "serverDown": "The server might be down" + }, + "label": { + "url": "Instance URL" + }, + "message": { + "currentConnection": "You are currently connected to { 0 }. If you continue, you will be disconnected from your current instance and all your local data will be deleted.", + "newUrl": "You are now using the Funkwhale instance at {url}" } } } diff --git a/front/src/locales/eo.json b/front/src/locales/eo.json index 4ffd12b1b..46cac0c86 100644 --- a/front/src/locales/eo.json +++ b/front/src/locales/eo.json @@ -2281,19 +2281,6 @@ "modal": "Fulmoklavo" } }, - "SetInstanceModal": { - "button": { - "cancel": "Nuligi", - "submit": "Submeti" - }, - "header": { - "chooseInstance": "Elekti vian instanco", - "suggestions": "Sugestaj elektoj" - }, - "label": { - "url": "Instanca datumo" - } - }, "Queue": { "button": { "clear": "Purigi", @@ -3630,6 +3617,18 @@ "tracks": "Kantoj" } } + }, + "ChooseInstance": { + "button": { + "submit": "Submeti" + }, + "header": { + "chooseInstance": "Elekti vian instanco", + "suggestions": "Sugestaj elektoj" + }, + "label": { + "url": "Instanca datumo" + } } }, "composables": { diff --git a/front/src/locales/es.json b/front/src/locales/es.json index 811cbdc89..30d57282a 100644 --- a/front/src/locales/es.json +++ b/front/src/locales/es.json @@ -2533,20 +2533,6 @@ "modal": "Atajos de teclado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elige tu instancia", - "failure": "No es posible conectarse a la URL indicada", - "suggestions": "Sugerencias" - }, - "label": { - "url": "Datos de Instancia" - } - }, "Queue": { "button": { "clear": "Borrar", @@ -3951,6 +3937,19 @@ "tracks": "Canciones" } } + }, + "ChooseInstance": { + "button": { + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Elige tu instancia", + "failure": "No es posible conectarse a la URL indicada", + "suggestions": "Sugerencias" + }, + "label": { + "url": "Datos de Instancia" + } } }, "composables": { diff --git a/front/src/locales/eu.json b/front/src/locales/eu.json index b511d46be..43224bb83 100644 --- a/front/src/locales/eu.json +++ b/front/src/locales/eu.json @@ -1,1431 +1,66 @@ { + "App": { + "loading": "Kargatzen…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", - "authorize": "Baimendu hirugarrenen aplikazioa", - "authorizeFailure": "Errorea aplikazioa baimentzerakoan", - "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", - "allScopes": "Sarbide osoa", - "readOnly": "Irakurtzeko soilik", - "writeOnly": "Idazteko soilik" - }, - "title": "Baimendu aplikazioa", - "button": { - "authorize": "Baimendu { app }" - }, - "help": { - "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", - "redirect": "{ 0 }(e)ra birbideratua izango zara", - "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu." - }, - "message": { - "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Sarbidea desgaituta", - "passwordUpdated": "Pasahitza eguneratuta", - "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." - }, - "button": { - "confirmDisable": "Sarbidea ezgaitu", - "disable": "Subsonic sarbidea ezgaitu", - "newPassword": "Eskatu pasahitz berria", - "confirmNewPassword": "Eskatu pasahitza" - }, - "modal": { - "disableSubsonic": { - "header": "Subsonic API sarbidea ezgaitu?", - "content": { - "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." - } - }, - "newPassword": { - "header": "Eskatu Subsonic API pasahitz berria?", - "content": { - "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." - } - } - }, - "link": { - "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" - }, - "header": { - "error": "Errorea", - "subsonic": "Subsonic API pasahitza" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", - "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu.", - "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan." - } - }, - "label": { - "subsonicField": "Zure Subsonic API pasahitza" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Sarbide tokena", - "appId": "Aplikazioaren IDa", - "appSecret": "Aplikazioaren sekretua" - }, - "header": { - "appDetails": "Aplikazioaren xehetasunak", - "editApp": "Editatu aplikazioa" - }, - "help": { - "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." - }, - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Editatu aplikazioa", - "button": { - "regenerateToken": "Birsortu tokena" - } - }, - "Settings": { - "title": "Kontuaren ezarpenak", - "header": { - "accountSettings": "Kontuaren ezarpenak", - "authorizedApps": "Baimendutako aplikazioak", - "avatar": "Irudia", - "changeEmail": "Aldatu nire eposta helbidea", - "changePassword": "Nire pasahitza aldatu", - "contentFilters": "Edukien iragazkiak", - "deleteAccount": "Ezabatu nire kontua", - "hiddenArtists": "Ezkutuko artistak", - "plugins": "Pluginak", - "settingsUpdated": "Ezarpenak eguneratuta", - "emailFailure": "Ezin dugu zure eposta helbidea aldatu", - "accountFailure": "Ezin dugu zure kontua ezabatu", - "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", - "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", - "yourApps": "Zure aplikazioak", - "avatarFailure": "Zure avatarra ezin da gorde", - "passwordFailure": "Zure pasahitza ezin da aldatu", - "updateFailure": "Zure ezarpenak ezin dira eguneratu" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikazioa", - "permissions": "Baimenak" - } - }, - "yourApps": { - "header": { - "application": "Aplikazioa", - "creationDate": "Sortze data", - "scopes": "Esparruak" - } - }, - "artists": { - "header": { - "creationDate": "Sortze data", - "name": "Izena" - } - } - }, - "label": { - "avatar": "Irudia", - "currentPassword": "Uneko pasahitza", - "newEmail": "Eposta helbide berria", - "newPassword": "Pasahitz berria", - "password": "Pasahitza" - }, - "button": { - "password": "Pasahitza aldatu", - "delete": "Ezabatu", - "deleteAccountConfirm": "Ezabatu nire kontua", - "deleteAccount": "Ezabatu nire kontua…", - "disableSubsonic": "Sarbidea ezgaitu", - "edit": "Editatu", - "refresh": "Freskatu", - "remove": "Kendu", - "removeApp": "Kendu aplikazioa", - "revoke": "Ezeztatu", - "revokeAccess": "Ezeztatu sarbidea", - "update": "Eguneratu", - "updateSettings": "Eguneratu ezarpenak" - }, - "description": { - "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", - "changePassword": { - "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", - "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." - }, - "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", - "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", - "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda.", - "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", - "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu." - }, - "modal": { - "changePassword": { - "header": "Zure pasahitza aldatu?", - "content": { - "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu:", - "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", - "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz" - } - }, - "deleteAccount": { - "header": "Zure kontua ezabatu nahi duzu?", - "content": { - "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." - } - }, - "deleteApp": { - "header": "\"{ application }\" aplikazioa kendu?", - "content": { - "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." - } - }, - "revokeApp": { - "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?", - "content": { - "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." - } - } - }, - "help": { - "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", - "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", - "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." - }, - "link": { - "managePlugins": "Kudeatu pluginak", - "newApp": "Erregistratu aplikazio berri bat" - }, - "warning": { - "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." - }, - "message": { - "currentEmail": "Zure uneko eposta helbidea { email } da.", - "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira" - } - }, - "Logout": { - "header": { - "confirm": "Ziur al zaude saioa itxi nahi duzula?", - "unauthenticated": "Une honetan ez duzu saioa hasita" - }, - "link": { - "login": "Hasi saioa!" - }, - "title": "Amaitu saioa", - "button": { - "logout": "Bai, amaitu saioa!" - }, - "message": { - "loggedIn": "{ username } moduan saioa hasita" - } - }, - "ApplicationNew": { - "link": { - "settings": "Itzuli ezarpenetara" - }, - "title": "Sortu aplikazio berri bat" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", - "read": { - "label": "Irakurri", - "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara" - }, - "write": { - "label": "Idatzi", - "description": "Idazteko soilik sarbidea erabiltzaile datuetara" - } - }, - "name": "Izena", - "redirectUri": "Birbideratu URIa" - }, - "button": { - "create": "Sortu aplikazioa", - "update": "Eguneratu aplikazioa" - }, - "help": { - "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." - }, - "header": { - "failure": "Ezin ditugu zure aldaketak gorde" - } - }, - "LoginForm": { - "link": { - "createAccount": "Sortu kontua", - "resetPassword": "Berrezarri pasahitza" - }, - "placeholder": { - "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" - }, - "help": { - "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", - "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." - }, - "button": { - "login": "Sartu" - }, - "label": { - "password": "Pasahitza", - "username": "Erabiltzaile-izena edo eposta helbidea" - }, - "header": { - "loginFailure": "Ezin dugu zure saioa hasi" - } - }, - "SignupForm": { - "button": { - "create": "Sortu nire kontua" - }, - "label": { - "email": "Eposta helbidea", - "password": "Pasahitza", - "username": "Erabiltzaile-izena" - }, - "placeholder": { - "email": "Idatzi zure eposta helbidea", - "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", - "username": "Idatzi zure erabiltzaile-izena" - }, - "header": { - "login": "Sartu zure Funkwhale kontura", - "signupFailure": "Ezin da zure kontua sortu." - }, - "message": { - "registrationClosed": "Izena ematea itxita dago instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", - "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik.", - "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", - "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentazioa" - }, - "label": { - "pluginEnabled": "Gaituta", - "library": "Liburutegia" - }, - "header": { - "failure": "Errorea plugina gordetzerakoan" - }, - "description": { - "library": "Fitxategiak ze liburutegitara inportatu behar diren." - }, - "button": { - "save": "Gorde", - "scan": "Eskaneatu" - } - } - }, "About": { - "stat": { - "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "ordu musika | ordu musika" + "description": { + "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", + "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", + "publicContent": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!" }, "header": { - "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", "aboutPod": "Instantzia honi buruz", - "publicContent": "Arakatu eduki publikoa", "findApp": "Bilatu aplikazio bat", + "funkwhale": "Musikaz gozatzeko eta partekatzeko plataforma soziala", + "publicContent": "Arakatu eduki publikoa", "signup": "Erregistratu" }, - "title": "Honi buruz", + "help": { + "closedRegistrations": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, "link": { "findOtherPod": "Bilatu beste instantzia bat", "learnMore": "Ikasi gehiago" }, - "description": { - "funkwhale": "Funkwhale komunitateak bultzatutako proiektua da, eta musika eta audioa sare deszentralizatu eta ireki batean entzuteko eta partekatzeko aukera ematen du.", - "publicContent": "Entzun pod honetan partekatutako album eta erreprodukzio-zerrenda publikoak.", - "signup": "Erregistratu orain zure gogokoenak jarraitzeko, erreprodukzio-zerrendak sortzeko, eduki berriak aurkitzeko eta askoz gehiago!", - "findApp": "Erabili Funkwhale beste gailuetan gure aplikazioekin.", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" + "message": { + "greeting": "Kaixo {username}", + "loggedIn": "Saioa hasita zenuen!" }, "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri" }, - "message": { - "loggedIn": "Saioa hasita zenuen!" - } - }, - "Home": { "stat": { "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", - "hoursOfMusic": "Ordubete musika | { n } ordu musika" + "hoursOfMusic": "ordu musika | ordu musika" }, - "header": { - "aboutFunkwhale": "Funkwhale-ri buruz", - "about": "Funkwhale instantzia honi buruz", - "contact": "Kontaktua", - "login": "Hasi saioa", - "newChannels": "Kanal berriak", - "newAlbums": "Azken aldian gehitutako albumak", - "signup": "Erregistratu", - "statistics": "Estatistikak", - "links": "Esteka erabilgarriak", - "welcome": "Ongi etorri { podName }(e)ra!" - }, - "link": { - "publicContent": { - "label": "Arakatu eduki publikoa", - "description": "Entzun instantzia honetan partekatutako album eta erreprodukzio-zerrenda publikoak" - }, - "userGuides": { - "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", - "label": "Erabiltzaile-gidak" - }, - "findOtherPod": "Bilatu beste instantzia bat", - "learnMore": "Ikasi gehiago", - "mobileApps": { - "label": "Mugikorreko aplikazioak", - "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin" - }, - "rules": "Zerbitzariaren arauak", - "viewMore": "Ikusi gehiago…", - "funkwhale": "Bisitatu funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du.", - "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat." - }, - "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!", - "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!" - }, - "title": "Hasiera", - "placeholder": { - "noDescription": "Ez dago deskribapenik." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "title": "{ date }-(e)an eguneratua" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "Saio { n } | { n } saio" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } - }, - "Widget": { - "button": { - "more": "Erakutsi gehiago" - } - } - }, - "Player": { - "meta": { - "position": "{ index } / { length }" - }, - "header": { - "player": "Audio erreproduzigailua eta kontrolak" - }, - "label": { - "clearQueue": "Garbitu zure ilara", - "expandQueue": "Zabaldu ilara", - "addArtistContentFilter": "Ezkutatu artista honen edukia…", - "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", - "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", - "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", - "audioPlayer": "Multimedia-erreproduzigailua", - "mute": "Isilarazi", - "nextTrack": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previousTrack": "Aurreko pista", - "shuffleQueue": "Nahasi zure ilara", - "unmute": "Aktibatu audioa" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Gehitu uneko ilaran", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "episodeDetails": "Saioaren xehetasunak", - "hideArtist": "Ezkutatu artista honen edukia", - "discretePlay": "Erreproduzitu", - "playAlbum": "Erreproduzitu albuma", - "playArtist": "Erreproduzitu artista", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "playPlaylist": "Erreproduzitu zerrenda", - "startRadio": "Erreproduzitu antzeko kantak", - "playTrack": "Erreproduzitu pista", - "playTracks": "Erreproduzitu pistak", - "report": "Salatu…", - "trackDetails": "Pistaren xehetasunak" - }, - "title": { - "more": "Gehiago…", - "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Gogokoetan sartu", - "addToPlaylist": "Gehitu erreprodukzio-zerrendan…", - "addToQueue": "Gehitu ilaran", - "episodeDetails": "Saioaren xehetasunak", - "playNext": "Erreproduzitu hurrengoa", - "playNow": "Erreproduzitu orain", - "startRadio": "Erreproduzitu irratia", - "removeFromFavorites": "Kendu gogokoetatik", - "trackDetails": "Pistaren xehetasunak", - "albumDetails": "Ikusi albuma", - "artistDetails": "Ikusi artista", - "channelDetails": "Ikusi kanala", - "seriesDetails": "Ikusi serieak" - } - }, - "Table": { - "table": { - "header": { - "album": "Albuma", - "artist": "Artista", - "title": "Izenburua" - } - } - }, - "Widget": { - "empty": { - "noResults": "Ez da ezer aurkitu" - }, - "button": { - "more": "Erakutsi gehiago" - } - }, - "MobileRow": { - "button": { - "actions": "Erakutsi pistako ekintzak" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Doitu bolumena" - }, - "button": { - "mute": "Isilarazi", - "unmute": "Aktibatu audioa" - } - }, - "SearchBar": { - "label": { - "album": "Albuma", - "artist": "Artista", - "category": { - "federation": "Federazioa", - "podcasts": "Podcastak" - }, - "search": "Bilatu edukia", - "tag": "Etiketa", - "track": "Pista" - }, - "link": { - "more": "Emaitza gehiago 🡒", - "fediverse": "Bilatu fedibertsoan", - "rss": "Harpidetu podcastera RSS bidez" - }, - "header": { - "noResults": "Ez da bat datorren emaitzarik aurkitu" - }, - "placeholder": { - "search": "Bilatu artistaren, albumaren, pisten… arabera" - }, - "empty": { - "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" - } - }, - "Search": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "search": "Bilatu musika pixka bat" - }, - "placeholder": { - "search": "Artista, albuma, pista …" - }, - "empty": { - "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", - "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" - } - }, - "ChannelForm": { - "label": { - "discography": "Artistaren diskografia", - "category": "Kategoria", - "image": "Kanalaren irudia", - "description": "Deskribapena", - "username": "Fedibertsoko izena", - "language": "Hizkuntza", - "name": "Izena", - "email": "Jabearen eposta helbidea", - "owner": "Jabearen izena", - "podcast": "Podcastak", - "subcategory": "Azpikategoria", - "tags": "Etiketak" - }, - "placeholder": { - "name": "Kanalaren izen bikaina", - "username": "kanalarenizenbikaina" - }, - "header": { - "error": "Errorea kanala gordetzerakoan" - }, - "help": { - "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", - "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", - "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", - "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." - }, - "loader": { - "loading": "Kargatzen" - }, - "legend": { - "purpose": "Zertarako erabiliko da kanal hau?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "unfollow": "Utzi jarraitzeari" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiatu" - }, - "help": { - "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", - "width": "Utzi hutsik widget moldagarrirako", - "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko." - }, - "label": { - "embed": "Txertatu kodea", - "height": "Widgetaren altuera", - "width": "Widgetaren zabalera" - }, - "header": { - "preview": "Aurrebista" - }, - "warning": { - "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." - }, - "message": { - "copy": "Testua arbelera kopiatu da!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Erakutsi gehiago" - }, - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Erakutsi gehiago" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "addDescription": "Gehitu deskribapena…" - } - }, - "ArtistBase": { - "title": "Artista", - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…", - "play": "Erreproduzitu album denak" - }, - "modal": { - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", - "builder": "Eraikitzailea", - "created": "Irratia sortuta", - "updated": "Irratia eguneratuta" - }, - "table": { - "filter": { - "header": { - "actions": "Akzioak", - "candidates": "Hautagaiak", - "config": "Konfigurazioa", - "exclude": "Baztertu", - "name": "Iragazkiaren izena" - } - } - }, - "button": { - "filter": "Iragazkia sortu", - "save": "Gorde" - }, - "label": { - "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", - "description": "Deskribapena", - "public": "Erakutsi publikoki", - "name": "Irratiaren izena" - }, - "placeholder": { - "description": "Nire deskribapen txundigarria", - "name": "Nire irrati txundigarria" - }, - "title": "Irrati eraikitzailea", - "option": { - "filter": "Aukeratu filtroa" - }, - "description": { - "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." - } - }, - "Filter": { - "cancelButton": "Ezeztatu", - "excludeLabel": "Baztertu", - "removeButton": "Kendu", - "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak" - } - }, - "FileUpload": { - "tooltip": { - "network": "Sare-errorea eman da fitxategi hau igotzerakoan", - "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", - "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", - "retry": "Saiatu berriro", - "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", - "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" - }, - "table": { - "upload": { - "header": { - "actions": "Ekintzak", - "filename": "Fitxategi-izena", - "size": "Tamaina", - "status": "Egoera" - }, - "status": { - "pending": "Zain", - "uploaded": "Igota", - "uploading": "Igotzen…" - } - } - }, - "button": { - "cancel": "Ezeztatu", - "retry": "Saiatu berriro huts egindako igoerekin" - }, - "label": { - "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak", - "remainingSpace": "Gelditzen den biltegiratze-lekua", - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "header": { - "failure": "Errorea inportazioa abiarazterakoan", - "server": "Inportazioaren egoera", - "status": "Inportatu egoera", - "local": "Igo musika zure gailutik" - }, - "link": { - "processing": "Prozesatzen", - "uploading": "Igotzen", - "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu." - }, - "description": { - "import": "Zure inportazioaren emaitzak:", - "previousImport": "Zure aurreko inportazioaren emaitzak:" - }, - "message": { - "local": { - "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", - "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude.", - "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", - "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." - }, - "button": { - "cancel": "Ezeztatu", - "clear": "Garbitu", - "reset": "Berrezarri hasierako baliora", - "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", - "showAll": "Erakutsi edizio guztiak", - "submit": "Bilatu eta aplikatu edizioa", - "new": "Bidali beste edizio bat", - "suggest": "Bidali iradokizuna" - }, - "header": { - "failure": "Errorea aldatutakoa bidaltzerakoan", - "recentEdits": "Azken aldiko edizioak", - "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak", - "success": "Zure edizioa behar bezala bidalita." - }, - "notApplicable": "Daturik gabe", - "empty": { - "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz." - }, - "label": { - "summary": "Laburpena (hautazkoa)" - }, - "message": { - "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." - } - }, - "Albums": { - "link": { - "addMusic": "Gehitu musikaren bat" - }, - "title": "Albumak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Albumak arakatzen" - }, - "placeholder": { - "search": "Idatzi albumaren izena…" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu", - "tags": "Etiketak" - }, - "button": { - "search": "Bilatu" - } - }, - "Artists": { - "button": { - "upload": "Gehitu musikaren bat", - "search": "Bilatu" - }, - "label": { - "search": "Artistaren izena", - "excludeCompilation": "Baztertu bilduma-artistak", - "tags": "Etiketak" - }, - "title": "Artistak", - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Artistak arakatzen" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatu…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Albuma", - "artist": "Artista", - "copyright": "Copyright-a", - "license": "Lizentzia", - "series": "Seriea", - "url": "URL", - "year": "Urtea" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Kodeka", - "downloads": "Deskargak", - "duration": "Iraupena", - "size": "Tamaina" - } - }, - "header": { - "episode": "Saioaren xehetasunak", - "library": "Erlazionatutako liburutegiak", - "playlists": "Erlazionatutako zerrendak", - "release": "Argitalpenaren xehetasunak", - "track": "Pistaren xehetasunak" - }, - "notApplicable": "Daturik gabe", - "description": { - "library": "Pista hau ondorengo liburutegietan dago:" - }, - "link": { - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TagDetail": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean" - }, - "header": { - "channels": "Kanalak", - "tracks": "Pistak" - } - }, - "ArtistDetail": { - "header": { - "album": "Artista honen albumak", - "track": "Artista honen pista berriak", - "library": "Erabiltzaileen liburutegiak" - }, - "button": { - "more": "Kargatu gehiago…", - "filter": "Kendu iragazkia" - }, - "link": { - "filter": "Berrikusi nire iragazkiak" - }, - "description": { - "library": "Artista hau ondorengo liburutegietan dago:" - }, - "message": { - "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", - "unknownError": { - "message": "Errore ezezaguna gertatu da", - "label": "Errore ezezaguna" - }, - "invalidMetadata": { - "label": "Metadatu baliogabeak", - "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." - } - }, - "button": { - "close": "Itxi" - }, - "table": { - "error": { - "debug": "Arazketa informazioa", - "errorDetail": "Errorearen xehetasuna", - "errorType": "Errore mota", - "help": "Lortu laguntza" - } - }, - "header": { - "importDetail": "Inportazioaren xehetasunak" - }, - "link": { - "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)", - "documentation": "Irakurri errori honi buruzko gure dokumentazioa" - }, - "message": { - "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", - "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." - }, - "warning": { - "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." - } - }, - "EditCard": { - "button": { - "approve": "Onartu", - "delete": "Ezabatu", - "reject": "Baztertu" - }, - "status": { - "approved": "Onartuta", - "applied": "Onartuta eta aplikatuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "modal": { - "delete": { - "header": "Iradokizun hau ezabatu nahi duzu?" - }, - "content": { - "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." - } - }, - "table": { - "update": { - "header": { - "field": "Eremua", - "newValue": "Balio berria", - "oldValue": "Balio zaharra" - }, - "notApplicable": "Daturik gabe" - } - }, - "header": { - "modification": "Aldaketa { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "header": { - "browse": "Podcastak arakatzen" - }, - "button": { - "cancel": "Ezeztatu", - "channel": "Sortu kanala", - "search": "Bilatu", - "subscribe": "Harpidetu", - "feed": "Harpidetu RSS jariora" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "label": { - "search": "Podcastaren izenburua", - "tags": "Etiketak" - }, - "title": "Podcastak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "placeholder": { - "search": "Bilatu…" - }, - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "header": { - "browse": "Irratiak arakatzen", - "instance": "Instantziako irratiak", - "user": "Erabiltzaileen irratiak" - }, - "button": { - "add": "Sortu irrati bat", - "create": "Sortu zure irrati propioa" - }, - "placeholder": { - "search": "Idatzi irrati baten izena …" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, - "title": "Irratiak", - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "label": { - "search": "Bilatu" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu…", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu album hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n", - "musicbrainz": "Ikusi MusicBrainz-en" - } - }, - "TrackBase": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu…", - "download": "Deskargatu", - "edit": "Editatu", - "embed": "Txertatu", - "more": "Gehiago…", - "play": "Erreproduzitu" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu pista hau zure webgunean" - } - }, - "link": { - "moderation": "Ireki moderazio interfazean", - "discogs": "Bilatu Discogs-en", - "wikipedia": "Bilatu Wikipedian", - "django": "Ikusi Django-ren administrazioan", - "domain": "Ikusi { domain }(e)n" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Editatu album hau", - "suggest": "Iradoki edizio bat album honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editatu artista hau", - "suggest": "Iradoki edizio bat artista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "TrackEdit": { - "header": { - "edit": "Editatu pista hau", - "suggest": "Iradoki edizio bat pista honetan" - }, - "message": { - "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Saioak", - "tracks": "Pistak", - "libraries": "Erabiltzaileen liburutegiak" - }, - "description": { - "libraries": "Album hau ondorengo liburutegietan dago:" - }, - "meta": { - "volume": "{ number } bolumena" - } - }, - "FsBrowser": { - "button": { - "import": "Inportatu" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Inportazioa ez da hasi oraindik" - } - }, - "Home": { - "title": "Liburutegia", - "header": { - "newChannels": "Kanal berriak", - "playlists": "Zerrendak", - "recentlyAdded": "Azken aldian gehituta", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" - } - }, - "TagSelector": { - "placeholder": { - "search": "Bilatu…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "Gogoko { n } | { n } gogoko" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "link": { - "library": "Arakatu liburutegia" - }, - "loader": { - "loading": "Zure gogokoak kargatzen…" - }, - "empty": { - "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" - }, - "pagination": { - "results": "Emaitzak orrialdeko" - }, - "title": "Zure gogokoak" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Gogokoetan sartu", - "remove": "Kendu gogokoetatik" - }, - "label": { - "inFavorites": "Gogokoetan" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "Fitxategi { n } | { n } fitxategi", - "quota": "Gelditzen den biltegiratze-lekua:" - }, - "button": { - "cancel": "Ezeztatu", - "close": "Itxi", - "finishLater": "Amaitu beranduago", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa", - "publish": "Argitaratu", - "update": "Eguneratu" - }, - "header": { - "uploadFiles": "Fitxategiak kargatzeko", - "processing": "Igoerak prozesatzen", - "publish": "Argitaratu audioa", - "uploadDetails": "Igoeraren xehetasunak" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "label": { - "album": "Albuma", - "series": "Serieak" - }, - "option": { - "none": "Bat ere ez" - } - }, - "LicenseSelect": { - "link": { - "license": "Lizentzia honi buruz" - }, - "label": { - "license": "Lizentzia" - }, - "option": { - "none": "Bat ere ez" - } - }, - "UploadForm": { - "help": { - "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." - }, - "label": { - "openBrowser": "Arakatu…", - "channel": "Kanala" - }, - "message": { - "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", - "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." - }, - "button": { - "edit": "Editatu", - "ignore": "Ez ikusi egin", - "remove": "Kendu", - "resume": "Berrekin", - "retry": "Saiatu berriro" - }, - "header": { - "error": "Errorea argitaratzerakoan" - }, - "status": { - "errored": "Erroreduna", - "pending": "Zain", - "uploading": "Igotzen" - }, - "description": { - "extensions": "Euskarria duten hedapenak: { extensions }" - }, - "warning": { - "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." - } - }, - "AlbumModal": { - "button": { - "cancel": "Ezeztatu", - "create": "Sortu" - }, - "header": { - "newAlbum": "Album berria", - "newSeries": "Serie berria" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Deskribapena", - "position": "Kokapena", - "tags": "Etiketak", - "title": "Izenburua", - "image": "Pistaren irudia" - } - }, - "AlbumForm": { - "header": { - "error": "Errorea sorketan" - }, - "label": { - "albumTitle": "Izenburua" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Harpidetu", - "unsubscribe": "Kendu harpidetza" - }, - "help": { - "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" - } - } + "title": "Honi buruz" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ordu musika | ordu musika", - "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", - "albumsCount": "album | album", - "artistsCount": "artista | artista", - "listeningsCount": "entzunaldi | entzunaldiak", - "tracksCount": "pista | pista" + "feature": { + "allowList": "Baimen-zerrenda", + "anonymousAccess": "Sarbide anonimoa", + "federation": "Federazioa", + "quota": "Igoera muga", + "registrations": "Izen-emateak", + "status": { + "closed": "Itxita", + "disabled": "Desgaituta", + "enabled": "Gaituta", + "open": "Irekita" + }, + "version": "Funkwhale bertsioa" + }, + "header": { + "about": "Instantzia honi buruz", + "contact": "Kontaktua", + "features": "Ezaugarriak", + "rules": "Arauak", + "statistics": "Estatistikak", + "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "title": "Honi buruz", "link": { "about": "Instantzia honi buruz", "features": "Ezaugarriak", @@ -1434,360 +69,219 @@ "statistics": "Estatistikak", "terms": "Erabilera baldintzak eta pribatutasun politika" }, - "header": { - "about": "Instantzia honi buruz", - "contact": "Kontaktua", - "features": "Ezaugarriak", - "rules": "Arauak", - "statistics": "Estatistikak", - "terms": "Erabilera baldintzak eta pribatutasun politika" - }, - "feature": { - "allowList": "Baimen-zerrenda", - "anonymousAccess": "Sarbide anonimoa", - "status": { - "closed": "Itxita", - "disabled": "Desgaituta", - "enabled": "Gaituta", - "open": "Irekita" - }, - "federation": "Federazioa", - "version": "Funkwhale bertsioa", - "registrations": "Izen-emateak", - "quota": "Igoera muga" + "message": { + "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" }, "notApplicable": "Daturik gabe", "placeholder": { - "noDescription": "Ez dago deskribapenik eskuragarri.", - "noRules": "Ez dago araurik erabilgarri.", - "noTerms": "Ez dago baldintzarik eskuragarri." + "noDescription": "Ez dago azalpenik eskuragarri", + "noRules": "Ez dago araurik erabilgarri", + "noTerms": "Ez dago baldintzarik eskuragarri" + }, + "stat": { + "activeUsers": "erabiltzaile aktibo | erabiltzaile aktibo", + "albumsCount": "album | album", + "artistsCount": "artista | artista", + "hoursOfMusic": "ordu musika | ordu musika", + "listeningsCount": "entzunaldi | entzunaldiak", + "tracksCount": "pista | pista" + }, + "title": "Honi buruz" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Instantzia honek Funkwhale erabiltzen du, sare ireki eta deszentralizatu batean musika eta audioak entzun eta partekatzeko aukera ematen duen komunitateak gidatutako proiektu bat.", + "paragraph2": "Funkwhale librea eta doakoa da eta boluntario komunitate jator batek garatzen du." + }, + "quota": "Instantzia honetako erabiltzaileek { quota }eko doako ostatatzea dute beren eduki propioa igotzeko!", + "signup": "Erregistratu orain zure gogokoen jarraipena egiteko, zerrendak sortzeko, eduki berria aurkitzeko eta asko gehiago!" + }, + "header": { + "about": "Funkwhale instantzia honi buruz", + "aboutFunkwhale": "Funkwhale-ri buruz", + "contact": "Kontaktua", + "links": "Esteka erabilgarriak", + "login": "Hasi saioa", + "newAlbums": "Azken aldian gehitutako albumak", + "newChannels": "Kanal berriak", + "signup": "Erregistratu", + "statistics": "Estatistikak", + "welcome": "Ongi etorri { podName }(e)ra!" + }, + "help": { + "registrationsClosed": "Izen-emateak itxita daude instantzia honetan. Beste instantzia batean eman dezakezu izena hurrengo esteka erabiliz." + }, + "link": { + "findOtherPod": "Bilatu beste instantzia bat", + "funkwhale": "Bisitatu funkwhale.audio", + "learnMore": "Ikasi gehiago", + "mobileApps": { + "description": "Erabili Funkwhale beste gailuetan gure aplikazioekin", + "label": "Mugikorreko aplikazioak" + }, + "publicContent": { + "description": "Entzun instantzia honetan partekatutako album eta zerrenda publikoak.", + "label": "Arakatu eduki publikoa" + }, + "rules": "Zerbitzariaren arauak", + "userGuides": { + "description": "Ezagutu Funkwhale eta bere ezaugarriei buruz jakin behar duzun guztia", + "label": "Erabiltzaile-gidak" + }, + "viewMore": "Ikusi gehiago…" + }, + "placeholder": { + "noDescription": "Ez dago azalpenik eskuragarri" + }, + "stat": { + "activeUsers": "Erabiltzaile aktibo { n } | { n } erabiltzaile aktibo", + "hoursOfMusic": "Ordubete musika | { n } ordu musika" + }, + "title": "Hasiera" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Orrialdea ez da aurkitu!" + }, + "link": { + "home": "Joan hasiera orrira" }, "message": { - "contact": "Bidal iezaguzu mezu elektroniko bat: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" + }, + "title": "Orrialdea ez da aurkitu" + }, + "Queue": { + "button": { + "clear": "Garbitu", + "close": "Itxi", + "stopRadio": "Gelditu irratia" + }, + "header": { + "failure": "Pista ezin da kargatu", + "noSources": "Pistak ez du iturburu erabilgarririk.", + "radio": "Irrati bat martxan duzu" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukia…", + "duration": "Iraupena", + "enterFullscreen": "Sartu pantaila osoa moduan", + "exitFullscreen": "Irten pantaila osoa modutik", + "favorite": "Pista gogokoa", + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "populatingRadio": "Irratiaren pista lortzen…", + "previous": "Aurreko pista", + "queue": "Ilara", + "remove": "Kendu", + "restart": "Berrasi pista", + "selectTrack": "Hautatu pista", + "showCoverArt": "Erakutsi azala", + "showVisualizer": "Erakutsi MoonDrop bisualizatzailea" + }, + "message": { + "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barru…", + "radio": "Abesti berriak hemen gehituko dira automatikoki.", + "webglUnsupported": "Badirudi arakatzaileak ez duela onartzen WebGL2." + }, + "meta": { + "end": "Amaiera", + "queuePosition": "Pista { index } / { length }", + "startTime": "00:00", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + }, + "warning": { + "connectivity": "Konexio arazo bat izan dezakezu." } }, - "common": { - "ActionTable": { - "button": { - "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik", - "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", - "go": "Joan", - "launch": "Abiarazi", - "refresh": "Freskatu taularen edukia", - "select": "Hautatu", - "selectAll": "Hautatu elementu guztiak", - "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", - "selectCurrentPage": "Aukeratu orrialde hau bakarrik" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedibertsoa", + "rss": "RSS", + "search": "Bilatu" + }, + "description": { + "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", + "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." + }, + "error": { + "fetchFailed": "Objektu hau ezin da berreskuratu" + }, + "header": { + "fetchFailed": "Errorea objektua eskuratzerakoan" + }, + "label": { + "fediverse": { + "fieldLabel": "Fedibertsoko objektua", + "fieldPlaceholder": "{'@'}erabiltzaile-izena{'@'}adibidea.eus", + "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" }, - "message": { - "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan", - "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko" - }, - "label": { - "actions": "Akzioak", - "performAction": "Burutu ekintzak" - }, - "modal": { - "performAction": { - "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?", - "content": { - "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." - } - } - }, - "header": { - "error": "Errorea akzioa aplikatzen zen bitartean" + "rss": { + "fieldLabel": "RSS jarioaren kokapena", + "fieldPlaceholder": "https://adibidea.eus/rss.xml", + "title": "Harpidetu podcast baten RSS jariora" } }, - "Duration": { - "meta": { - "hours": "{ hours } o { minutes } min", - "minutes": "{ minutes } minutu" - } - }, - "UserMenu": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "docs": "Dokumentazioa", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - } - }, - "UserModal": { - "link": { - "about": "Honi buruz", - "chat": "Txat gela", - "forum": "Foroa", - "support": "Laguntza", - "git": "Arazoen jarraipena", - "login": "Hasi saioa", - "logout": "Amaitu saioa", - "notifications": "Jakinarazpenak", - "profile": "Profila", - "settings": "Ezarpenak", - "signup": "Erregistratu" - }, - "label": { - "shortcuts": "Laster-teklak", - "language": "Hizkuntza", - "theme": "Gaia" - }, - "header": { - "options": "Aukerak" - }, - "button": { - "switchInstance": "Erabili beste instantzia bat" - } - }, - "DangerousButton": { - "button": { - "cancel": "Ezeztatu", - "confirm": "Baieztatu" - }, - "header": { - "confirm": "Nahi duzu akzio hau baieztatzea?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Ezeztatu", - "edit": "Editatu", - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago", - "update": "Eguneratu deskribapena" - }, - "header": { - "failure": "Errorea deskribapena eguneratzerakoan" - }, - "empty": { - "noDescription": "Ez dago deskribapenik" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Garbitu" - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Tolestu", - "expand": "Zabaldu" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiatu" - }, - "message": { - "success": "Testua arbelera kopiatu da!" - } - }, - "LoginModal": { - "link": { - "login": "Hasi saioa", - "signup": "Erregistratu" - }, - "header": { - "unauthenticated": "Autentifikatu gabe" - }, - "description": { - "noAccess": "Ez daukazu sarbiderik!" - } - }, - "ContentForm": { - "help": { - "markdown": "Markdown sintaxia onartzen da." - }, - "empty": { - "noContent": "Aurrebistarako ezer ez." - }, - "button": { - "preview": "Aurrebista", - "write": "Idatzi" - }, - "placeholder": { - "input": "Idatzi hitz batzuk hemen…" - } - }, - "EmptyState": { - "header": { - "noResults": "Ez da emaitzarik aurkitu." - }, - "button": { - "refresh": "Freskatu" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." - }, - "button": { - "remove": "Kendu" - }, - "label": { - "upload": "Igo irudi berria…" - }, - "loader": { - "uploading": "Fitxategia igotzen…" - }, - "header": { - "failure": "Zure eranskina ezin da gorde" - } - }, - "ExpandableDiv": { - "button": { - "less": "Erakutsi gutxiago", - "more": "Erakutsi gehiago" - } + "warning": { + "unsupported": "Objektu mota hau ez da onartzen oraindik" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - } + "ShortcutsModal": { + "button": { + "close": "Itxi" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jada badago { 1 }(e)n." - }, - "button": { - "addDuplicate": "Gehitu halere", - "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", - "addTrack": "Abestia sartu", - "cancel": "Ezeztatu", - "edit": "Editatu" - }, - "header": { - "addToPlaylist": "Gehitu erreprodukzio-zerrendan", - "available": "Zerrendak eskuragarri", - "manage": "Kudeatu zerrendak", - "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", - "addFailure": "Pista ezin da zerrenda batera gehitu" - }, - "table": { - "edit": { - "header": { - "edit": "Editatu", - "lastModification": "Azken aldaketa", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "placeholder": { - "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" - }, - "label": { - "filter": "Iragazkia" - }, - "empty": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } + "header": { + "modal": "Laster-teklak" }, - "Editor": { - "button": { - "addDuplicate": "Gehitu halere", - "clear": "Garbitu zerrenda", - "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", - "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" + "shortcut": { + "audio": { + "clearQueue": "Garbitu ilara", + "decreaseVolume": "Jaitsi bolumena", + "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", + "increaseVolume": "Igo bolumena", + "label": "Audio erreproduzigailuaren laster-teklak", + "playNext": "Erreproduzitu hurrengo pista", + "playPause": "Pausatu/erreproduzitu uneko pista", + "playPrevious": "Erreproduzitu aurreko pista", + "seekBack30": "Bilatu atzeraka 30s", + "seekBack5": "Bilatu atzeraka 5s", + "seekForward30": "Bilatu aurreraka 30s", + "seekForward5": "Bilatu aurreraka 5s", + "shuffleQueue": "Nahasi ilara", + "toggleFavorite": "Txandakatu gogokoa", + "toggleLoop": "Txandakatu ilararen begizta", + "toggleMute": "Txandakatu mututzea" }, - "error": { - "sync": "Errorea gertatu da aldaketak gordetzerakoan" - }, - "message": { - "sync": "Aldaketak zerbitzariarekin sinkronizatuta" - }, - "modal": { - "clearPlaylist": { - "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?", - "content": { - "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." - } - } - }, - "help": { - "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" - }, - "header": { - "editor": "Zerrenda editorea" - }, - "warning": { - "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" - }, - "loading": { - "sync": "Aldaketak zerbitzariarekin sinkronizatzen…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Gehitu erreprodukzio-zerrendan…" - } - }, - "Form": { - "header": { - "createPlaylist": "Zerrenda berria sortu", - "createSuccess": "Zerrenda sortuta", - "updateSuccess": "Zerrenda eguneratuta", - "createFailure": "Ezin izan da zerrenda sortu" - }, - "button": { - "create": "Zerrenda sortu", - "update": "Eguneratu zerrenda" - }, - "placeholder": { - "name": "Nire zerrenda txundigarria" - }, - "label": { - "name": "Zerrenda izena", - "visibility": "Zerrendaren ikusgaitasuna" - } - }, - "Widget": { - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "more": "Erakutsi gehiago" - }, - "placeholder": { - "noPlaylists": "Ez da zerrendarik sortu oraindik" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", - "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", - "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du" - }, - "button": { - "approve": "Onartu", - "markRead": "Markatu irakurrita", - "markUnread": "Markatu irakurri gabe", - "reject": "Baztertu" + "general": { + "focus": "Fokuratu bilaketa-barra", + "label": "Lasterbide orokorrak", + "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", + "unfocus": "Kendu fokua bilaketa-barrari" } } }, "Sidebar": { + "header": { + "administration": "Administrazioa", + "explore": "Arakatu", + "library": "Nire liburutegia", + "main": "Nabigazio nagusia", + "more": "Gehiago" + }, + "label": { + "add": "Edukia sartu", + "administration": "Administrazioa", + "edits": "Berrikuspen edizioak zain", + "follows": "Zain dauden jarraitzeko eskaerak", + "language": "Hizkuntza", + "main": "Menu nagusia", + "play": "Erreproduzitu pista hau", + "reports": "Zain dauden berrikuspen txostenak", + "theme": "Gaia" + }, "link": { "about": "Instantzia honi buruz", "albums": "Albumak", @@ -1805,44 +299,1985 @@ "radios": "Irratiak", "search": "Bilatu", "settings": "Ezarpenak", + "switchInstance": "Aldatu instantzia", "users": "Erabiltzaileak" - }, - "label": { - "add": "Edukia sartu", - "administration": "Administrazioa", - "language": "Hizkuntza", - "main": "Menu nagusia", - "follows": "Zain dauden jarraitzeko eskaerak", - "edits": "Berrikuspen edizioak zain", - "play": "Erreproduzitu pista hau", - "theme": "Gaia" - }, - "header": { - "administration": "Administrazioa", - "explore": "Arakatu", - "main": "Nabigazio nagusia", - "more": "Gehiago", - "library": "Nire liburutegia" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gorde" + }, + "header": { + "error": "Errorea ezarpenak gordetzerakoan.", + "image": "Uneko irudia" + }, + "message": { + "success": "Ezarpenak arrakastaz eguneratuta." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Gehitu eremu berri bat", + "edit": "Editatu formularioa", + "preview": "Formularioaren aurrebista" + }, + "help": { + "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", + "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." + }, + "label": { + "additionalField": "Eremu gehigarria", + "additionalFields": "Eremu gehigarriak", + "delete": "Ezabatu", + "helpText": "Laguntza testua", + "moveDown": "Eraman behera", + "moveUp": "Eraman gora" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Ekintzak", + "label": "Eremuaren etiketa", + "required": "Beharrezkoa", + "type": "Eremu mota" + }, + "required": { + "false": "Ez", + "true": "Bai" + }, + "type": { + "long": "Testu luzea", + "short": "Testu laburra" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "{ date }-(e)an eguneratua" + }, + "ChannelEntries": { + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelForm": { + "header": { + "error": "Errorea kanala gordetzerakoan." + }, + "help": { + "discography": "Argitaratu zuk egindako musika album eta singlez osatutako diskografia eder batean.", + "podcast": "Ostatatu zure saioak eta mantendu zure komunitatea eguneratuta.", + "podcastFields": "Spotify edo iTunes bezalako plataforma batzuetako itunes:email eta itune:name eremuetan erabiltzen da.", + "username": "URLetan eta kanal hau Fedibertsoan jarraitzeko erabiltzen da. Ezin duzu aldatu aurrerago." + }, + "label": { + "category": "Kategoria", + "description": "Deskribapena", + "discography": "Artistaren diskografia", + "email": "Jabearen eposta helbidea", + "image": "Kanalaren irudia", + "language": "Hizkuntza", + "name": "Izena", + "owner": "Jabearen izena", + "podcast": "Podcastak", + "subcategory": "Azpikategoria", + "tags": "Etiketak", + "username": "Fedibertsoko izena" + }, + "legend": { + "purpose": "Zertarako erabiliko da kanal hau?" + }, + "loader": { + "loading": "Kargatzen" + }, + "placeholder": { + "name": "Kanalaren izen bikaina", + "username": "kanalarenizenbikaina" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "Saio { n } | { n } saio" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "help": { + "subscribe": "Bere edukia ikusteko kanal honetara harpidetu beharko duzu behar bada." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Erakutsi gehiago" + } + }, + "EmbedWizard": { + "button": { + "copy": "Kopiatu" + }, + "header": { + "preview": "Aurrebista" + }, + "help": { + "anonymous": "Jarri zure administratzaileekin harremanetan eta eskatu dagokion ezarpena eguneratzeko.", + "embed": "Kopiatu eta itsatsi kode hau zure webguneko HTMLan", + "width": "Utzi hutsik widget moldagarrirako" + }, + "label": { + "embed": "Txertatu kodea", + "height": "Widgetaren altuera", + "width": "Widgetaren zabalera" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "warning": { + "anonymous": "Partekatzeak ez du funtzionatuko instantzia honek ez duelako onartzen erabiltzaile anonimoek edukira sarbidea izatea." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "unfollow": "Utzi jarraitzeari" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu uneko ilaran", + "discretePlay": "Erreproduzitu", + "episodeDetails": "Saioaren xehetasunak", + "hideArtist": "Ezkutatu artista honen edukia", + "playAlbum": "Erreproduzitu albuma", + "playArtist": "Erreproduzitu artista", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "playPlaylist": "Erreproduzitu zerrenda", + "playTrack": "Erreproduzitu pista", + "playTracks": "Erreproduzitu pistak", + "report": "Salatu…", + "startRadio": "Erreproduzitu antzeko kantak", + "trackDetails": "Pistaren xehetasunak" + }, + "title": { + "more": "Gehiago…", + "unavailable": "Pista hau ez dago sarbidea duzun liburutegietan" + } + }, + "Player": { + "header": { + "player": "Audio erreproduzigailua eta kontrolak" + }, + "label": { + "addArtistContentFilter": "Ezkutatu artista honen edukia…", + "audioPlayer": "Multimedia-erreproduzigailua", + "clearQueue": "Garbitu zure ilara", + "expandQueue": "Zabaldu ilara", + "loopingDisabled": "Begizta desgaituta. Egin klik pista bakarreko begiztara aldatzeko.", + "loopingSingle": "Pista bakarreko begiztan. Egin klik ilara osoko begiztara aldatzeko.", + "loopingWholeQueue": "Ilara osoko begiztan. Egin klik begizta desgaitzeko.", + "mute": "Isilarazi", + "nextTrack": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previousTrack": "Aurreko pista", + "shuffleQueue": "Nahasi zure ilara", + "unmute": "Aktibatu audioa" + }, + "meta": { + "position": "{ index } / { length }", + "unknownAlbum": "Album ezezaguna", + "unknownArtist": "Artista ezezaguna" + } + }, + "PlayerControls": { + "labels": { + "next": "Hurrengo pista", + "pause": "Pausatu", + "play": "Erreproduzitu", + "previous": "Aurreko pista" + } + }, + "Search": { + "empty": { + "noAlbums": "Ez dago zure bilaketarekin bat datorren albumik", + "noArtists": "Ez dago zure bilaketarekin bat datorren artistarik" + }, + "header": { + "albums": "Albumak", + "artists": "Artistak", + "search": "Bilatu musika pixka bat" + }, + "placeholder": { + "search": "Artista, albuma, pista …" + } + }, + "SearchBar": { + "empty": { + "noResults": "Sentitzen dugu, ez dago emaitzarik bilaketa honentzat" + }, + "header": { + "noResults": "Ez da bat datorren emaitzarik aurkitu" + }, + "label": { + "album": "Albuma", + "artist": "Artista", + "category": { + "federation": "Federazioa", + "podcasts": "Podcastak" + }, + "search": "Bilatu edukia", + "tag": "Etiketa", + "track": "Pista" + }, + "link": { + "fediverse": "Bilatu fedibertsoan", + "more": "Emaitza gehiago 🡒", + "rss": "Harpidetu podcastera RSS bidez" + }, + "placeholder": { + "search": "Bilatu artistak, albumak, pistak…" + } + }, + "VolumeControl": { + "button": { + "mute": "Isilarazi", + "unmute": "Aktibatu audioa" + }, + "label": { + "slider": "Doitu bolumena" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Erakutsi pistako ekintzak" + } + }, + "Modal": { + "button": { + "addToFavorites": "Gogokoetan sartu", + "addToPlaylist": "Gehitu zerrendan", + "addToQueue": "Gehitu ilaran", + "albumDetails": "Ikusi albuma", + "artistDetails": "Ikusi artista", + "channelDetails": "Ikusi kanala", + "episodeDetails": "Saioaren xehetasunak", + "playNext": "Erreproduzitu hurrengoa", + "playNow": "Erreproduzitu orain", + "removeFromFavorites": "Kendu gogokoetatik", + "seriesDetails": "Ikusi serieak", + "startRadio": "Erreproduzitu irratia", + "trackDetails": "Pistaren xehetasunak" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Albuma", + "artist": "Artista", + "title": "Izenburua" + } + } + }, + "Widget": { + "button": { + "more": "Erakutsi gehiago" + }, + "empty": { + "noResults": "Ez da ezer aurkitu" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Birsortu tokena" + }, + "header": { + "appDetails": "Aplikazioaren xehetasunak", + "appSecretWarning": "Gorde token honen kopia bat leku seguru batean.", + "editApp": "Editatu aplikazioa" + }, + "help": { + "appDetails": "Aplikazioaren IDa eta sekretua balio sentikorrak dira eta pasahitz gisa tratatu behar dira. Ez partekatu beste inorrekin." + }, + "label": { + "accessToken": "Sarbide tokena", + "appId": "Aplikazioaren IDa", + "appSecret": "Aplikazioaren sekretua" + }, + "link": { + "settings": "Itzuli ezarpenetara" + }, + "message": { + "appSecretWarning": "Ezin izango duzu berriro ikusi behin pantaila honetatik irtetean." + }, + "title": "Editatu aplikazioa" + }, + "ApplicationForm": { + "button": { + "create": "Sortu aplikazioa", + "update": "Eguneratu aplikazioa" + }, + "header": { + "failure": "Ezin ditugu zure aldaketak gorde" + }, + "help": { + "redirectUri": "Erabili \"urn:ietf:wg:oauth:2.0:oob\" birbideratzea URI bezala zure aplikazioa ez bada webean zerbitzatzen." + }, + "label": { + "name": "Izena", + "redirectUri": "Birbideratu URIa", + "scopes": { + "description": "Gurasoek \"Irakurri\" edo \"Idatzi\" esparruak egiaztatzeak dagozkien haurren esparru guztietarako sarbidea suposatzen du.", + "label": "Esparruak", + "read": { + "description": "Soilik irakurtzeko sarbidea erabiltzailearen datuetara", + "label": "Irakurri" + }, + "write": { + "description": "Idazteko soilik sarbidea erabiltzaile datuetara", + "label": "Idatzi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Itzuli ezarpenetara" + }, + "title": "Sortu aplikazio berri bat" + }, + "Authorize": { + "button": { + "authorize": "Baimendu { app }" + }, + "header": { + "access": "{ app }-(e)k zure Funkwhale kontura sartu nahi du", + "allScopes": "Sarbide osoa", + "authorize": "Baimendu hirugarrenen aplikazioa", + "authorizeFailure": "Errorea aplikazioa baimentzerakoan", + "fetchFailure": "Errorea aplikazioaren datuak eskuratzerakoan", + "readOnly": "Irakurtzeko soilik", + "writeOnly": "Idazteko soilik" + }, + "help": { + "copyCode": "Aplikazioan kopiatu eta itsasteko kodea erakutsiko zaizu", + "pasteCode": "Kopiatu eta itsatsi honako kodea aplikazioan:", + "redirect": "{ 0 }(e)ra birbideratua izango zara" + }, + "message": { + "unknownPermissions": "Aplikazioak ondorengo baimen ezezagunak ere eskatzen ari da:" + }, + "title": "Baimendu aplikazioa" + }, + "LoginForm": { + "button": { + "login": "Sartu" + }, + "header": { + "loginFailure": "Ezin dugu zure saioa hasi" + }, + "help": { + "approvalRequired": "Duela gutxi erregistratu bazara, baliteke moderazio taldeak zure kontua berrikusi edo zure eposta helbidea egiaztatu arte itxaron behar izatea.", + "invalidCredentials": "Egiaztatu erabiltzaile izena eta pasahitza zuzenak direla eta ziurtatu zure eposta helbidea egiaztatu duzula." + }, + "label": { + "password": "Pasahitza", + "username": "Erabiltzaile-izena edo eposta helbidea" + }, + "link": { + "createAccount": "Sortu kontua", + "resetPassword": "Berrezarri pasahitza" + }, + "message": { + "redirect": "{domain} domeinura birbideratua izango zara autentifikatzeko" + }, + "placeholder": { + "username": "Idatzi zure erabiltzaile-izena edo eposta helbidea" + } + }, + "Logout": { + "button": { + "logout": "Bai, amaitu saioa!" + }, + "header": { + "confirm": "Ziur al zaude saioa itxi nahi duzula?", + "unauthenticated": "Une honetan ez duzu saioa hasita" + }, + "link": { + "login": "Hasi saioa!" + }, + "message": { + "loggedIn": "{ username } moduan saioa hasita" + }, + "title": "Amaitu saioa" + }, + "Plugin": { + "button": { + "save": "Gorde", + "scan": "Eskaneatu" + }, + "description": { + "library": "Fitxategiak ze liburutegitara inportatu behar diren." + }, + "header": { + "failure": "Errorea plugina gordetzerakoan" + }, + "label": { + "library": "Liburutegia", + "pluginEnabled": "Gaituta" + }, + "link": { + "documentation": "Dokumentazioa" + } + }, + "Settings": { + "button": { + "delete": "Ezabatu", + "deleteAccount": "Ezabatu nire kontua…", + "deleteAccountConfirm": "Ezabatu nire kontua", + "disableSubsonic": "Sarbidea ezgaitu", + "edit": "Editatu", + "password": "Pasahitza aldatu", + "refresh": "Freskatu", + "remove": "Kendu", + "removeApp": "Kendu aplikazioa", + "revoke": "Ezeztatu", + "revokeAccess": "Ezeztatu sarbidea", + "update": "Eguneratu", + "updateSettings": "Eguneratu ezarpenak" + }, + "description": { + "authorizedApps": "Hau da zure kontuaren datuetara sarbidea duten aplikazioen zerrenda.", + "changeEmail": "Aldatu zure kontuarekin lotutako eposta helbidea. Berrespena bidaliko dizugu helbide berrira.", + "changePassword": { + "paragraph1": "Zure pasahitza aldatzeak Subsonic APIko pasahitza ere aldatuko du, baten bat eskatuta baduzu.", + "paragraph2": "Pasahitz hau erabiltzen duten bezeroetan pasahitza eguneratu beharko duzu." + }, + "contentFilters": "Edukiaren iragazkiek zerbitzuan ikusi nahi ez duzun edukia ezkutatzen lagunduko dizute.", + "deleteAccount": "Beheko formularioa erabiliz zure kontua eta erlazionatutako datu guztiak ezabatu ditzakezu behin betiko eta atzera bueltarik gabe. Berresteko eskatuko zaizu.", + "plugins": "Erabili pluginak Funkwhale hedatu eta ezaugarri gehigarriak lortzeko.", + "yourApps": "Hau da erregistratu dituzun aplikazioen zerrenda." + }, + "header": { + "accountFailure": "Ezin dugu zure kontua ezabatu", + "accountSettings": "Kontuaren ezarpenak", + "authorizedApps": "Baimendutako aplikazioak", + "avatar": "Irudia", + "avatarFailure": "Zure avatarra ezin da gorde", + "changeEmail": "Aldatu nire eposta helbidea", + "changePassword": "Nire pasahitza aldatu", + "contentFilters": "Edukien iragazkiak", + "deleteAccount": "Ezabatu nire kontua", + "emailFailure": "Ezin dugu zure eposta helbidea aldatu", + "hiddenArtists": "Ezkutuko artistak", + "noApps": "Ez daukazu kontuari konektatutako aplikaziorik.", + "noPersonalApps": "Ez daukazu aplikaziorik erregistratuta oraindik.", + "passwordFailure": "Zure pasahitza ezin da aldatu", + "plugins": "Pluginak", + "settingsUpdated": "Ezarpenak eguneratuta", + "updateFailure": "Zure ezarpenak ezin dira eguneratu", + "yourApps": "Zure aplikazioak" + }, + "help": { + "changePassword": "Mesedez egiaztatu bi aldiz pasahitza zuzena dela", + "noApps": "Hirugarrengoen aplikazioei zure datuetarako sarbidea baimentzen badiezu, aplikazio horiek hemen zerrendatuko dira.", + "noPersonalApps": "Erregistratu bat Funkwhale hirugarrenen aplikazioekin integratzeko." + }, + "label": { + "avatar": "Irudia", + "currentPassword": "Uneko pasahitza", + "newEmail": "Eposta helbide berria", + "newPassword": "Pasahitz berria", + "password": "Pasahitza" + }, + "link": { + "managePlugins": "Kudeatu pluginak", + "newApp": "Erregistratu aplikazio berri bat" + }, + "message": { + "confirmDelete": "Zure ezabatze eskaera bidali da, zure kontua eta edukia laster ezabatuko dira", + "currentEmail": "Zure uneko posta elektronikoa {email} da" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Saio hau amaituko zaizu eta berriarekin hasi beharko duzu", + "subsonic": "Zure Subsonic pasahitza ausazko pasahitz batekin ordezkatuko da, Subsonic pasahitz zaharra erabiltzen duten gailuetan saioa amaituz", + "warning": "Pasahitza aldatzeak hurrengo ondorioak izango ditu" + }, + "header": "Zure pasahitza aldatu?" + }, + "deleteAccount": { + "content": { + "warning": "Hau ezin da desegin eta datuak behin betiko ezabatuko ditu gure zerbitzarietatik. Berehala zure saioa amaitu da." + }, + "header": "Zure kontua ezabatu nahi duzu?" + }, + "deleteApp": { + "content": { + "warning": "Honek behin betiko ezabatuko ditu aplikazioa eta erlazionatutako token guztiak." + }, + "header": "\"{ application }\" aplikazioa kendu?" + }, + "revokeApp": { + "content": { + "warning": "Honek eragotzi egingo dio aplikazio honi zerbitzura zure izenean sartzea." + }, + "header": "\"{ application }\" aplikazioaren sarbidea ezeztatu?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Sortze data", + "name": "Izena" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikazioa", + "permissions": "Baimenak" + } + }, + "yourApps": { + "header": { + "application": "Aplikazioa", + "creationDate": "Sortze data", + "scopes": "Esparruak" + } + } + }, + "title": "Kontuaren ezarpenak", + "warning": { + "deleteAccount": "Zure kontua gure zerbitzarietatik ezabatuko da minutu batzuk barru. Zure datuen kopia eduki dezaketen beste zerbitzariei ere ezabatzeko jakinaraziko diegu. Kontuan izan zerbitzari batzuk lineaz kanpo egon daitezkeela edo ez dutela eskaera osatu nahiko." + } + }, + "SignupForm": { + "button": { + "create": "Sortu nire kontua" + }, + "header": { + "login": "Sartu zure Funkwhale kontura", + "signupFailure": "Ezin da zure kontua sortu." + }, + "label": { + "email": "Eposta helbidea", + "invitation": "Gonbidapen kodea", + "password": "Pasahitza", + "username": "Erabiltzaile-izena" + }, + "message": { + "accountCreated": "Zure kontua arrakastaz sortu da. Egiaztatu zure eposta saio hasten saiatu aurretik.", + "awaitingReview": "Zure kontu-eskaera arrakastaz bidali da. Eposta mezu bat jasoko duzu gure moderazio taldeak zure eskaera berrikusi duenean.", + "registrationClosed": "Izena-emate publikoak itxita daude instantzia honetan. Gonbidapen kode bat beharko duzu izena emateko.", + "requiresReview": "Instantzia honetako izen emateak irekita daude, baina moderatzaileek berrikusi behar dituzte onartu aurretik." + }, + "placeholder": { + "email": "Idatzi zure eposta helbidea", + "invitation": "Idatzi zure gonbidapen kodea (ez ditu maiuskulak eta minuskulak bereizten)", + "username": "Idatzi zure erabiltzaile-izena" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Sarbidea ezgaitu", + "confirmNewPassword": "Eskatu pasahitza", + "disable": "Subsonic sarbidea ezgaitu", + "newPassword": "Eskatu pasahitz berria" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale Subsonic APIa darabilten beste musika erreproduzitzaileekin bateragarria da.", + "paragraph2": "Zure zerrendak eta musika lineaz kanpo gozatzeko erabil ditzakezu, adibidez, zure mugikor edo tabletan.", + "paragraph3": "Hala ere, bezero horietatik Funkwhalera sarbidea lortzeko behean ezar dezakezun aparteko pasahitz bat behar duzu." + } + }, + "header": { + "error": "Errorea", + "subsonic": "Subsonic API pasahitza" + }, + "label": { + "subsonicField": "Zure Subsonic API pasahitza" + }, + "link": { + "apps": "Ezagutu nola erabili Funkwhale beste aplikazio batzuetatik" + }, + "message": { + "accessDisabled": "Sarbidea desgaituta", + "passwordUpdated": "Pasahitza eguneratuta", + "unavailable": "Subsonic APIa ez dago erabilgarri Funkwhale instantzia honetan." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Honek guztiz desgaituko du Subsonic APIrako sarbidea kontu honetatik." + }, + "header": "Subsonic API sarbidea ezgaitu?" + }, + "newPassword": { + "content": { + "warning": "Honek uneko pasahitza erabiltzen duten gailuetako zure saioak amaituko ditu." + }, + "header": "Eskatu Subsonic API pasahitz berria?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errorea sorketan" + }, + "label": { + "albumTitle": "Izenburua" + } + }, + "AlbumModal": { + "button": { + "cancel": "Ezeztatu", + "create": "Sortu" + }, + "header": { + "newAlbum": "Album berria", + "newSeries": "Serie berria" + } + }, + "AlbumSelect": { + "label": { + "album": "Albuma", + "series": "Serieak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "option": { + "none": "Bat ere ez" + } + }, + "LicenseSelect": { + "label": { + "license": "Lizentzia" + }, + "link": { + "license": "Lizentzia honi buruz" + }, + "option": { + "none": "Bat ere ez" + } + }, + "SubscribeButton": { + "help": { + "auth": "Saioa hasi behar duzu kanal honetara harpidetzeko" + }, + "title": { + "subscribe": "Harpidetu", + "unsubscribe": "Kendu harpidetza" + } + }, + "UploadForm": { + "button": { + "edit": "Editatu", + "ignore": "Ez ikusi egin", + "remove": "Kendu", + "resume": "Berrekin", + "retry": "Saiatu berriro" + }, + "description": { + "extensions": "Euskarria duten hedapenak: { extensions }" + }, + "header": { + "error": "Errorea argitaratzerakoan" + }, + "help": { + "license": "Gehitu lizentzia zure igoerari zure entzuleei askatasun batzuk emateko." + }, + "label": { + "channel": "Kanala", + "openBrowser": "Arakatu…" + }, + "message": { + "dragAndDrop": "Arrastatu eta askatu fitxategiak hemen edo ireki nabigatzailea fitxategiak igotzeko", + "pending": "Argitaratu gabeko igoera zirriborro batzuk dauzkazu." + }, + "status": { + "errored": "Erroreduna", + "pending": "Zain", + "uploading": "Igotzen" + }, + "warning": { + "quota": "Ez daukazu fitxategiak kargatzeko leku librerik. Jarri moderatzaileekin harremanetan." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Deskribapena", + "image": "Pistaren irudia", + "position": "Kokapena", + "tags": "Etiketak", + "title": "Izenburua" + } + }, + "UploadModal": { + "button": { + "cancel": "Ezeztatu", + "close": "Itxi", + "finishLater": "Amaitu beranduago", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa", + "publish": "Argitaratu", + "update": "Eguneratu" + }, + "header": { + "processing": "Igoerak prozesatzen", + "publish": "Argitaratu audioa", + "uploadDetails": "Igoeraren xehetasunak", + "uploadFiles": "Fitxategiak kargatzeko" + }, + "meta": { + "files": "Fitxategi { n } | { n } fitxategi", + "quota": "Gelditzen den biltegiratze-lekua: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Elementu bakarra hautatuta | { n } elementu hautatuta", + "go": "Joan", + "launch": "Abiarazi", + "refresh": "Freskatu taularen edukia", + "select": "Hautatu", + "selectAll": "Hautatu elementu guztiak", + "selectCurrentPage": "Aukeratu orrialde hau bakarrik", + "selectElement": "Hautatu elementu { n } | Hautatu { n } elementuak", + "selected": "Aaukeratutako { n },{ total }(e)tik | { n } aukeratutako { total }(e)tik" + }, + "header": { + "error": "Errorea akzioa aplikatzen zen bitartean" + }, + "label": { + "actions": "Akzioak", + "performAction": "Burutu ekintzak" + }, + "message": { + "needsRefresh": "Edukia eguneratu da, sakatu Freskatu eduki eguneratua ikusteko", + "success": "{ action } ekintza arrakastaz gauzatu da elementu batean | { action } ekintza arrakastaz gauzatu da { n } elementutan" + }, + "modal": { + "performAction": { + "content": { + "warning": "Honek elementu askori eragin diezaieke edo ondorio konponezinak eduki, egiaztatu hau den benetan nahi duzuna." + }, + "header": "{ action } abiarazi nahi duzu elementu batean? | { action } abiarazi nahi duzu { n } elementutan?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Kendu" + }, + "header": { + "failure": "Zure eranskina ezin da gorde" + }, + "help": { + "upload": "PNG edo JPG. Neurriak 1400x1400px eta 3000x3000px artekoa izan behar du. Onartzen den gehienezko fitxategi-tamaina 5MB da." + }, + "label": { + "upload": "Igo irudi berria…" + }, + "loader": { + "uploading": "Fitxategia igotzen…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Tolestu", + "expand": "Zabaldu" + } + }, + "ContentForm": { + "button": { + "preview": "Aurrebista", + "write": "Idatzi" + }, + "empty": { + "noContent": "Aurreikusteko ezer" + }, + "help": { + "markdown": "Markdown sintaxia onartzen da" + }, + "placeholder": { + "input": "Idatzi hitz batzuk hemen…" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "success": "Testua arbelera kopiatu da!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Baieztatu" + }, + "header": { + "confirm": "Nahi duzu akzio hau baieztatzea?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } o { minutes } min", + "minutes": "{ minutes } minutu" + } + }, + "EmptyState": { + "button": { + "refresh": "Freskatu" + }, + "header": { + "noResults": "Ez da emaitzarik aurkitu." + } + }, + "ExpandableDiv": { + "button": { + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Garbitu" + }, + "label": { + "search": "Bilatu" + }, + "placeholder": { + "search": "Bilatu…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Ez duzu sarbiderik" + }, + "header": { + "unauthenticated": "Autentifikatu gabe" + }, + "link": { + "login": "Hasi saioa", + "signup": "Erregistratu" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "less": "Erakutsi gutxiago", + "more": "Erakutsi gehiago", + "update": "Eguneratu deskribapena" + }, + "empty": { + "noDescription": "Ez dago deskribapenik" + }, + "header": { + "failure": "Errorea deskribapena eguneratzerakoan" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + }, + "UserModal": { + "button": { + "switchInstance": "Erabili beste instantzia bat" + }, + "header": { + "options": "Aukerak" + }, + "label": { + "language": "Hizkuntza", + "shortcuts": "Laster-teklak", + "theme": "Gaia" + }, + "link": { + "about": "Honi buruz", + "chat": "Txat gela", + "docs": "Dokumentazioa", + "forum": "Foroa", + "git": "Arazoen jarraipena", + "login": "Hasi saioa", + "logout": "Amaitu saioa", + "notifications": "Jakinarazpenak", + "profile": "Profila", + "settings": "Ezarpenak", + "signup": "Erregistratu", + "support": "Laguntza" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Ez da pistarik gehitu oraindik zure gogokoetara" + }, + "header": { + "favorites": "Gogoko { n } | { n } gogoko" + }, + "link": { + "library": "Arakatu liburutegia" + }, + "loader": { + "loading": "Zure gogokoak kargatzen…" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "title": "Zure gogokoak" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Gogokoetan sartu", + "remove": "Kendu gogokoetatik" + }, + "label": { + "inFavorites": "Gogokoetan" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Itxi", + "reload": "Itxi eta freskatu orria" + }, + "description": { + "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", + "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", + "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk.", + "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik." + }, + "header": { + "failure": "Freskatu errorea", + "pending": "Freskatu zain daudenak", + "refresh": "Objektua freskatzen urruneko zerbitzaritik…", + "saveFailure": "Errorea ezarpenak gordetzerakoan", + "skipped": "Freskatzea saltatu da", + "success": "Arrakastaz freskatua" + }, + "loader": { + "awaitingResult": "Erantzunen zain…", + "fetchRequest": "Bilaketa eskatzen…" + }, + "table": { + "error": { + "label": { + "detail": "Errorearen xehetasuna", + "type": "Errore mota" + }, + "value": { + "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", + "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", + "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", + "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", + "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", + "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", + "unknownError": "Errore ezezaguna" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Erakutsi gehiago" + }, + "empty": { + "noMatch": "Ez da bat datorren liburutegirik aurkitu." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiatu" + }, + "message": { + "copy": "Testua arbelera kopiatu da!" + }, + "title": "Erakutsi/ezkutatu pasahitza" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Gehitu deskribapena…" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "tracks": "Pista { n } | { n } pista" + }, + "title": "Albuma" + }, + "AlbumDetail": { + "description": { + "libraries": "Album hau ondorengo liburutegietan dago:" + }, + "header": { + "episodes": "Saioak", + "libraries": "Erabiltzaileen liburutegiak", + "tracks": "Pistak" + }, + "meta": { + "volume": "{ number } bolumena" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu album hau zure webgunean" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editatu album hau", + "suggest": "Iradoki edizio bat album honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Albums": { + "button": { + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Albumak arakatzen" + }, + "label": { + "search": "Bilatu", + "tags": "Etiketak" + }, + "link": { + "addMusic": "Gehitu musikaren bat" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi albumaren izena…" + }, + "title": "Albumak" + }, + "ArtistBase": { + "button": { + "cancel": "Ezeztatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…", + "play": "Erreproduzitu album denak" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "musicbrainz": "Ikusi MusicBrainz-en", + "wikipedia": "Bilatu Wikipedian" + }, + "meta": { + "albums": "0 album | {n} album | {n} album", + "tracks": "0 pista hemen: | {count} pista hemen: | {count} pista hemen:" + }, + "modal": { + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Kendu iragazkia", + "more": "Kargatu gehiago…" + }, + "description": { + "library": "Artista hau ondorengo liburutegietan dago:" + }, + "header": { + "album": "Artista honen albumak", + "library": "Erabiltzaileen liburutegiak", + "track": "Artista honen pista berriak" + }, + "link": { + "filter": "Berrikusi nire iragazkiak" + }, + "message": { + "filter": "Artista honekin erlazionatutako edukia ezkutatzen ari zara une honetan." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editatu artista hau", + "suggest": "Iradoki edizio bat artista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "Artists": { + "button": { + "search": "Bilatu", + "upload": "Gehitu musikaren bat" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Artistak arakatzen" + }, + "label": { + "excludeCompilation": "Baztertu bilduma-artistak", + "search": "Artistaren izena", + "tags": "Etiketak" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatu…" + }, + "title": "Artistak" + }, + "EditCard": { + "button": { + "approve": "Onartu", + "delete": "Ezabatu", + "reject": "Baztertu" + }, + "header": { + "modification": "Aldaketa { id }" + }, + "link": { + "track": "Pista #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Iradokizuna guztiz ezabatuko da, ekintza hau ezin da desegin." + }, + "delete": { + "header": "Iradokizun hau ezabatu nahi duzu?" + } + }, + "status": { + "applied": "Onartuta eta aplikatuta", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "table": { + "update": { + "header": { + "field": "Eremua", + "newValue": "Balio berria", + "oldValue": "Balio zaharra" + }, + "notApplicable": "Daturik gabe" + } + } + }, + "EditForm": { + "button": { + "cancel": "Ezeztatu", + "clear": "Garbitu", + "new": "Bidali beste edizio bat", + "reset": "Berrezarri hasierako baliora", + "showAll": "Erakutsi edizio guztiak", + "showUnreviewed": "Mugatu berrikusi gabeko edizioetara", + "submit": "Bilatu eta aplikatu edizioa", + "suggest": "Bidali iradokizuna" + }, + "empty": { + "suggestEdit": "Iradoki aldaketa bat beheko formularioa erabiliz" + }, + "header": { + "failure": "Errorea aldatutakoa bidaltzerakoan", + "recentEdits": "Azken aldiko edizioak", + "success": "Zure edizioa behar bezala bidalita.", + "unreviewed": "Berrikuspenaren zain dauden azken aldiko edizioak" + }, + "label": { + "summary": "Laburpena (hautazkoa)" + }, + "message": { + "noPermission": "Ez daukazu objektu hau editatzeko baimenik, baina aldaketak iradoki ditzakezu. Bidalitakoan, iradokizunak onartu aurretik berrikusiko dira." + }, + "notApplicable": "Daturik gabe", + "placeholder": { + "summary": "Zure aldaketak deskribatzen dituen laburpentxoa." + } + }, + "FileUpload": { + "button": { + "cancel": "Ezeztatu", + "retry": "Saiatu berriro huts egindako igoerekin" + }, + "description": { + "import": "Inportazioaren egoera", + "previousImport": "Zure aurreko inportazioaren emaitzak:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errorea inportazioa abiarazterakoan", + "local": "Igo musika zure gailutik", + "server": "Inportazioaren egoera", + "status": "Inportatu egoera" + }, + "label": { + "extensions": "Euskarria duten hedapenak: { extensions }", + "remainingSpace": "Gelditzen den biltegiratze-lekua", + "uploadWidget": "Klik egin igotzeko fitxategiak aukeratzeko edo arrastatu eta jaregin fitxategi edo karpetak" + }, + "link": { + "picard": "Helburu horretarako Picard erabiltzea gomendatzen dugu.", + "processing": "Prozesatzen", + "uploading": "Igotzen" + }, + "message": { + "listener": "Orri honek irten nahi duzula berrestea eskatzen du, baliteke sartutako datuak ez gordetzea.", + "local": { + "copyright": "Ez zarela ari copyright duen edukia liburutegi publiko batera igotzen, bestela legea hausten ari zara", + "format": "Igotzen ari zaren audio fitxategiak OGG, Flac, MP3 edo AIFF formatuan daude", + "message": "Zure liburutegira musika igotzera zoaz. Jarraitu aurretik, ziurtatu:", + "tag": "Igotzen ari zaren musika fitxategiak behar bezala etiketatuta daude." + } + }, + "table": { + "upload": { + "header": { + "actions": "Ekintzak", + "filename": "Fitxategi-izena", + "size": "Tamaina", + "status": "Egoera" + }, + "progress": "% {percent}", + "status": { + "pending": "Zain", + "uploaded": "Igota", + "uploading": "Igotzen…" + } + } + }, + "tooltip": { + "denied": "Igoera ukatuta, ziurtatu fitxategia ez dela handiegia eta ez zarela zure mugara iritsi", + "extension": "Fitxategi-mota baliogabea, ziurtatu igotzen ari zarena audio-fitxategi bat dela. Onartzen diren fitxategi-luzapenak: { extensions }", + "network": "Sare-errorea eman da fitxategi hau igotzerakoan", + "retry": "Saiatu berriro", + "size": "Ezin da fitxategi hau igo, ziurtatu ez dela handiegia", + "timeout": "Igoeraren denbora-muga, mesedez saiatu berriro" + } + }, + "FsBrowser": { + "button": { + "import": "Inportatu" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Inportazioa ez da hasi oraindik" + } + }, + "Home": { + "header": { + "newChannels": "Kanal berriak", + "playlists": "Zerrendak", + "recentlyAdded": "Azken aldian gehituta", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + }, + "title": "Liburutegia" + }, + "ImportStatusModal": { + "button": { + "close": "Itxi" + }, + "error": { + "importFailure": "Errore bat gertatu da igoera prozesatzean. Azpian informazio gehiago aurkituko duzu.", + "invalidMetadata": { + "label": "Metadatu baliogabeak", + "message": "Fitxategiaren metadatuak baliogabeak dira edo beharrezko eremuak falta dituzte." + }, + "unknownError": { + "label": "Errore ezezaguna", + "message": "Errore ezezaguna gertatu da" + } + }, + "header": { + "importDetail": "Inportazioaren xehetasunak" + }, + "link": { + "documentation": "Irakurri errori honi buruzko gure dokumentazioa", + "support": "Ireki laguntza haria (sartu arazteko informazioa azpian, zure mezuan)" + }, + "message": { + "importDetail": "Igoera zain dago oraindik eta laster prozesatuko du zerbitzariak.", + "importSuccess": "Igoera behar bezala prozesatu da zerbitzarian." + }, + "table": { + "error": { + "debug": "Arazketa informazioa", + "errorDetail": "Errorearen xehetasuna", + "errorType": "Errore mota", + "help": "Lortu laguntza" + } + }, + "warning": { + "importSkipped": "Igoera saltatu egin da zure liburutegietako batean antzeko bat badagoelako dagoeneko." + } + }, + "Podcasts": { + "button": { + "cancel": "Ezeztatu", + "channel": "Sortu kanala", + "feed": "Harpidetu RSS jariora", + "search": "Bilatu", + "subscribe": "Harpidetu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Podcastak arakatzen" + }, + "label": { + "search": "Podcastaren izenburua", + "tags": "Etiketak" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Bilatu…" + }, + "title": "Podcastak" + }, + "Radios": { + "button": { + "add": "Sortu irrati bat", + "create": "Sortu zure irrati propioa", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Irratiak arakatzen", + "instance": "Instantziako irratiak", + "user": "Erabiltzaileen irratiak" + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak orrialdeko" + }, + "placeholder": { + "search": "Idatzi irrati baten izena …" + }, + "title": "Irratiak" + }, + "TagDetail": { + "header": { + "channels": "Kanalak", + "tracks": "Pistak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "moderation": "Ireki moderazio interfazean" + } + }, + "TagSelector": { + "placeholder": { + "search": "Bilatu…" + } + }, + "TrackBase": { + "button": { + "cancel": "Ezeztatu", + "delete": "Ezabatu", + "download": "Deskargatu", + "edit": "Editatu", + "embed": "Txertatu", + "more": "Gehiago…", + "play": "Erreproduzitu" + }, + "link": { + "discogs": "Bilatu Discogs-en", + "django": "Ikusi Django-ren administrazioan", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "wikipedia": "Bilatu Wikipedian" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu pista hau zure webgunean" + } + }, + "subtitle": { + "with-uploader": "{0} erabiltzaileak igota data honetan: {1}", + "without-uploader": "Igoera-data: {0}" + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Pista hau ondorengo liburutegietan dago:" + }, + "header": { + "episode": "Saioaren xehetasunak", + "library": "Erlazionatutako liburutegiak", + "playlists": "Erlazionatutako zerrendak", + "release": "Argitalpenaren xehetasunak", + "track": "Pistaren xehetasunak" + }, + "link": { + "musicbrainz": "Ikusi MusicBrainz-en" + }, + "notApplicable": "Daturik gabe", + "table": { + "release": { + "album": "Albuma", + "artist": "Artista", + "copyright": "Copyright-a", + "license": "Lizentzia", + "series": "Seriea", + "url": "URL", + "year": "Urtea" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Kodeka", + "downloads": "Deskargak", + "duration": "Iraupena", + "size": "Tamaina" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editatu pista hau", + "suggest": "Iradoki edizio bat pista honetan" + }, + "message": { + "remote": "Objektu hau beste zerbitzari batek kudeatzen du, ezin duzu editatu." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Iragazkia sortu", + "save": "Gorde" + }, + "description": { + "builder": "Zure irizpidearen araberako pistak erreproduzituko dituen irrati pertsonalizatua sortu dezakezu interfaze honekin." + }, + "header": { + "builder": "Eraikitzailea", + "created": "Irratia sortuta", + "matches": "Pista { n } dator bat iragazki konbinatuekin | { n } pista datoz bat iragazki konbinatuekin", + "updated": "Irratia eguneratuta" + }, + "label": { + "description": "Deskribapena", + "filter": "Iragazkiak sortu zure irratia pertsonalizatzeko", + "name": "Irratiaren izena", + "public": "Erakutsi publikoki" + }, + "option": { + "filter": "Aukeratu filtroa" + }, + "placeholder": { + "description": "Nire deskribapen txundigarria", + "name": "Nire irrati txundigarria" + }, + "table": { + "filter": { "header": { - "accessedDate": "Sarbide data", - "account": "Kontua", - "creationDate": "Sortze data", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "name": "Izena", - "size": "Tamaina", - "visibility": "Ikusgaitasuna" + "actions": "Akzioak", + "candidates": "Hautagaiak", + "config": "Konfigurazioa", + "exclude": "Baztertu", + "name": "Iragazkiaren izena" } } }, + "title": "Irrati eraikitzailea" + }, + "Filter": { + "cancelButton": "Ezeztatu", + "excludeLabel": "Baztertu", + "matchingTracks": "iragazkiarekin bat datorren pistarik ez | iragazkiarekin bat datorren {n} pista | iragazkiarekin bat datozen {n} pista", + "matchingTracksModalHeader": "Iragazkiarekin bat datozen pistak", + "removeButton": "Kendu" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren, kontuaren arabera" + }, + "table": { + "channel": { + "header": { + "account": "Kontua", + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala", + "moderation": "Ireki moderazio interfazean" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren arabera" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izenburua", + "releaseDate": "Argitalpen-data", + "tracks": "Pistak" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "category": "Kategoria", + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren arabera" + }, + "table": { + "artist": { + "header": { + "albums": "Albumak", + "creationDate": "Sortze data", + "domain": "Domeinua", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Berrikuspenaren zain", + "rejected": "Baztertuta" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "option": { + "all": "Dena" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, azalpenaren arabera" + }, + "table": { + "library": { + "header": { + "account": "Kontua", + "creationDate": "Sortze data", + "domain": "Domeinua", + "followers": "Jarraitzaileak", + "name": "Izena", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu izenaren arabera" + }, + "table": { + "tag": { + "header": { + "albums": "Albumak", + "artists": "Artistak", + "creationDate": "Sortze data", + "name": "Izena", + "tracks": "Pistak" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren arabera" + }, + "table": { + "track": { + "header": { + "album": "Albuma", + "artist": "Artista", + "creationDate": "Sortze data", + "domain": "Domeinua", + "license": "Lizentzia", + "title": "Izenburua" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Ezabatu", + "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." + } + }, + "label": { + "search": "Bilatu", + "status": "Inportazioaren egoera", + "visibility": "Ikusgaitasuna" + }, + "link": { + "local": "Lokala" + }, + "notApplicable": "Daturik gabe", "option": { "all": "Dena", "failed": "Huts egin du", @@ -1858,396 +2293,68 @@ }, "label": "Ordena" }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako igoerak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu", - "status": "Egoera", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren... arabera" - }, "pagination": { "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "LibrariesTable": { + }, + "placeholder": { + "search": "Bilatu domeinuaren, aktorearen, izenaren, erreferentziaren, iturburuaren arabera" + }, "table": { - "library": { + "upload": { "header": { + "accessedDate": "Sarbide data", "account": "Kontua", "creationDate": "Sortze data", "domain": "Domeinua", - "followers": "Jarraitzaileak", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", "name": "Izena", - "uploads": "Igoerak", + "size": "Tamaina", "visibility": "Ikusgaitasuna" } } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako liburutegia eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "label": { - "search": "Bilatu", - "visibility": "Ikusgaitasuna" - }, - "placeholder": { - "search": "Bilatu domeinuaren, aktorearen, izenaren, deskribapenaren… arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Albuma", - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "license": "Lizentzia", - "title": "Izenburua" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako pistak eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako artista eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumak", - "artists": "Artistak", - "creationDate": "Sortze data", - "name": "Izena", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu izenaren arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "EditsCardList": { - "option": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Berrikuspenaren zain", - "rejected": "Baztertuta" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "label": { - "status": "Egoera" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izenburua", - "releaseDate": "Argitalpen-data", - "tracks": "Pistak" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "action": { - "delete": { - "label": "Ezabatu", - "warning": "Hautatutako albumak eta erlazionatutako pistak, igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "notApplicable": "Daturik gabe", - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenburuaren, artistaren, MusicBrainz IDaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Kontua", - "domain": "Domeinua", - "local": "Lokala", - "owner": "Jabea", - "type": "Mota" - }, - "status": { - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "resolutionDate": "Ebazpenaren data", - "resolved": "Ebatzita", - "status": "Egoera", - "unresolved": "Konpondu gabea" - }, - "report": { - "category": "Kategoria", - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" + "AccountsTable": { + "action": { + "purge": { + "label": "Kendu" } }, - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "message": "Mezua", - "reportedObject": "Salatutako objektua" - }, - "button": { - "confirmDelete": "Ezabatu", - "delete": "Ezabatu salatutako objektua", - "resolve": "Ebatzi", - "unresolve": "Konpondu gabe" - }, - "modal": { - "delete": { - "header": "Salatutako objektua ezabatu nahi duzu?", - "content": { - "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe", - "link": { - "moderation": "Ireki moderazio interfazean", - "report": "Salatu { id }", - "publicPage": "Ikusi orrialde publikoa" - }, - "warning": { - "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." - } - }, - "UserRequestCard": { - "header": { - "actions": "Akzioak", - "notes": "Barne oharrak", - "signup": "Mezua" - }, - "button": { - "approve": "Onartu", - "reject": "Ukatu" - }, - "table": { - "status": { - "approved": "Onartuta", - "assignedTo": "Honi esleituta", - "internalNotes": "Barne oharrak", - "pending": "Zain", - "refused": "Ukatuta", - "status": "Egoera" - }, - "request": { - "creationDate": "Sortze data", - "submittedBy": "Bidaltzailea" - } - }, - "notApplicable": "Daturik gabe", - "link": { - "request": "Eskatu { id }" - }, - "message": { - "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Gehitu moderazio-arau berri bat", - "editRule": "Editatu moderazio-arauak", - "failure": "Errorea araua sortzerakoan" - }, "label": { - "blockAll": "Blokeatu dena", - "policyDisabled": "Desgaituta", - "policyEnabled": "Gaituta", - "silenceActivity": "Isilarazi aktibitatea", - "silenceNotifications": "Isilarazi jakinarazpenak", - "customizeRule": "Edo pertsonalizatu zure araua", - "policyReason": "Arrazoia", - "rejectMedia": "Baztertu multimedia" + "search": "Bilatu" }, - "tooltip": { - "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", - "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", - "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko.", - "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", - "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", - "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe." + "link": { + "local": "Kontu lokala" }, - "button": { - "cancel": "Ezeztatu", - "create": "Sortu", - "delete": "Ezabatu", - "confirm": "Ezabatu moderazio-araua", - "update": "Eguneratu" + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" }, - "modal": { - "delete": { - "header": "Moderazio-arau hau ezabatu nahi duzu?", - "content": { - "warning": "Ekintza hau ezin da desegin." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Gehitu oharra" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { - "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketa…" + "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren arabera" }, - "header": { - "failure": "Errorea oharra bidaltzerakoan" + "table": { + "account": { + "header": { + "domain": "Domeinua", + "firstSeen": "Lehen aldiz ikusia", + "lastSeen": "Ikusi zen azken aldia", + "moderationRule": "Moderazio arauaren pean", + "name": "Izena", + "uploads": "Igoerak" + }, + "moderationRule": "Bai" + } } }, "DomainsTable": { @@ -2262,6 +2369,16 @@ "label": "Kendu baimenendutakoen zerrendatik" } }, + "empty": { + "noPods": "Ez da beste instantziarik aurkitu" + }, + "label": { + "inList": "Onartuen zerrendan dago", + "search": "Bilatu" + }, + "link": { + "list": "Domeinu hau zure onartuen zerrendan dago" + }, "option": { "all": "Dena", "no": "Ez", @@ -2275,76 +2392,32 @@ }, "label": "Ordena" }, - "table": { - "domain": { - "header": { - "firstSeen": "Lehen aldiz ikusia", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "moderationRule": "Moderazio arauaren pean", - "users": "Erabiltzaileak" - }, - "moderationRule": "Bai" - } - }, - "label": { - "inList": "Onartuen zerrendan dago", - "search": "Bilatu" - }, - "empty": { - "noPods": "Ez da beste instantziarik aurkitu" + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" }, "placeholder": { "search": "Bilatu izenaren arabera…" }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - }, - "link": { - "list": "Domeinu hau zure onartuen zerrendan dago" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domeinua", "firstSeen": "Lehen aldiz ikusia", - "lastSeen": "Ikusi zen azken aldia", - "name": "Izena", "moderationRule": "Moderazio arauaren pean", - "uploads": "Igoerak" + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "users": "Erabiltzaileak" }, "moderationRule": "Bai" } - }, - "link": { - "local": "Kontu lokala" - }, - "action": { - "purge": { - "label": "Kendu" - } - }, - "label": { - "search": "Bilatu" - }, - "placeholder": { - "search": "Bilatu domeinuaren, erabiltzaile-izenaren, biografiaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" } }, "InstancePolicyCard": { + "button": { + "edit": "Editatu" + }, + "header": { + "rule": "Araua" + }, "label": { "blockAll": "Blokeatu dena", "muteActivity": "Isilarazi aktibitatea", @@ -2352,15 +2425,49 @@ "reason": "Arrazoia", "rejectMedia": "Baztertu multimedia" }, - "button": { - "edit": "Editatu" - }, "status": { "enabled": "Gaituta", "paused": "Pausatuta" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu moderazio-araua", + "create": "Sortu", + "delete": "Ezabatu", + "update": "Eguneratu" }, "header": { - "rule": "Araua" + "addRule": "Gehitu moderazio-arau berri bat", + "editRule": "Editatu moderazio-arauak", + "failure": "Errorea araua sortzerakoan" + }, + "label": { + "blockAll": "Blokeatu dena", + "customizeRule": "Edo pertsonalizatu zure araua", + "policyDisabled": "Desgaituta", + "policyEnabled": "Gaituta", + "policyReason": "Arrazoia", + "rejectMedia": "Baztertu multimedia", + "silenceActivity": "Isilarazi aktibitatea", + "silenceNotifications": "Isilarazi jakinarazpenak" + }, + "modal": { + "delete": { + "content": { + "warning": "Ekintza hau ezin da desegin" + }, + "header": "Moderazio-arau hau ezabatu nahi duzu?" + } + }, + "tooltip": { + "blockAll": "Blokeatu kontu edo domeinu honetako guztia. Erakundearekin edozein harreman ekidingo du, eta lotutako edukiak ezabatu (igoerak, liburutegiak, jarraitzeak, etab.)", + "isActive": "Erabili ezarpen hau gidalerroa aldi baterako gaitu/desgaitzeko, guztiz kendu gabe.", + "rejectMedia": "Ez deskargatu multimedia fitxategirik (audioa, albumaren azala, kontuaren avatarra...) kontu edo domeinu honetatik.", + "silenceActivity": "Ezkutatu kontua edo domeinuaren edukia, jarraitzaileentzat ezik.", + "silenceNotifications": "Eragotzi kontu edo domeinuak jakinarazpenak abiaraztea, jarraitzaileengandik izan ezik.", + "summary": "Azaldu zergatik aplikatzen duzun gidalerro hau: arau hau zergatik gehitu duzun gogoratzen lagunduko dizu. Zure instantziaren konfigurazioaren arabera publikoki erakutsi liteke erabiltzaileei zein moderazio-arau dauden ulertzen laguntzeko." } }, "InstancePolicyModal": { @@ -2370,161 +2477,130 @@ }, "modal": { "manage": { - "header": "Kudeatu { obj }(r)en moderazio arauak", "content": { "warning": "Entitate honek moderazio arau espezifikoak ditu" - } + }, + "header": "Kudeatu { obj }(r)en moderazio arauak" } } }, + "NoteForm": { + "button": { + "add": "Gehitu oharra" + }, + "header": { + "failure": "Errorea oharra bidaltzerakoan" + }, + "placeholder": { + "summary": "Deskribatu zer ekintza egin diren edo horiekin lotutako beste edozein eguneraketa…" + } + }, "NotesThread": { "button": { "delete": "Ezabatu" }, "modal": { "delete": { - "header": "Ohar hau ezabatu nahi duzu?", "content": { "warning": "Oharra ezabatuko da. Ekintza hau ezin da desegin." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Kontua", - "albums": "Albumak", - "creationDate": "Sortze data", - "domain": "Domeinua", - "name": "Izena", - "tracks": "Pistak" + }, + "header": "Ohar hau ezabatu nahi duzu?" } } }, - "option": { - "all": "Dena" - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" + "ReportCard": { + "button": { + "confirmDelete": "Ezabatu", + "delete": "Ezabatu salatutako objektua", + "resolve": "Ebatzi", + "unresolve": "Konpondu gabe" }, - "label": "Ordena" + "header": { + "actions": "Akzioak", + "message": "Mezua", + "notes": "Barne oharrak", + "reportedObject": "Salatutako objektua" + }, + "link": { + "moderation": "Ireki moderazio interfazean", + "publicPage": "Ikusi orrialde publikoa", + "report": "Salatu { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek txostenarekin erlazionatutako objektua ezabatuko du. Ezabaketa ezin da desegin." + }, + "header": "Salatutako objektua ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "object": { + "account": "Kontua", + "domain": "Domeinua", + "local": "Lokala", + "owner": "Jabea", + "type": "Mota" + }, + "report": { + "category": "Kategoria", + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "resolutionDate": "Ebazpenaren data", + "resolved": "Ebatzita", + "status": "Egoera", + "unresolved": "Konpondu gabea" + } + }, + "warning": { + "objectDeleted": "Txosten honekin lotutako objektua ezabatu da." + } }, - "label": { - "category": "Kategoria", - "search": "Bilatu" - }, - "link": { - "local": "Lokala", - "moderation": "Ireki moderazio interfazean" - }, - "placeholder": { - "search": "Bilatu domeinuaren, izenaren, kontuaren... arabera" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + "UserRequestCard": { + "button": { + "approve": "Onartu", + "reject": "Ukatu" + }, + "header": { + "actions": "Akzioak", + "notes": "Barne oharrak", + "signup": "Mezua" + }, + "link": { + "request": "Eskatu { id }" + }, + "message": { + "signup": "Erabiltzaile honek zure instantzian erregistratu nahi du." + }, + "notApplicable": "Daturik gabe", + "table": { + "request": { + "creationDate": "Sortze data", + "submittedBy": "Bidaltzailea" + }, + "status": { + "approved": "Onartuta", + "assignedTo": "Honi esleituta", + "internalNotes": "Barne oharrak", + "pending": "Zain", + "refused": "Ukatuta", + "resolutionDate": "Ebazpen-data", + "status": "Egoera" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Kontuaren egoera", - "email": "Eposta", - "lastActivity": "Azken jarduera", - "permissions": "Baimenak", - "signup": "Erregistratu", - "status": "Egoera", - "username": "Erabiltzaile-izena" - }, - "accountStatus": { - "active": "Aktibo", - "inactive": "Ez-aktiboa" - }, - "status": { - "admin": "Admin", - "regular": "Erabiltzaile arrunta", - "staff": "Taldeko kidea" - } - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordenazio norabidea" - }, - "label": "Ordena" - }, - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - }, - "notApplicable": "Daturik gabe", - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenaren… arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Dena", - "expired": "Iraungita/erabilita", - "open": "Ireki" - }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "creationDate": "Sortze data", - "expirationDate": "Iraungitze data", - "owner": "Jabea", - "status": "Egoera" - } - } - }, - "action": { - "delete": "Ezabatu" - }, - "label": { - "expired": "Iraungita", - "unused": "Ez da erabiltzen", - "search": "Bilatu", - "status": "Egoera", - "used": "Erabilita" - }, - "ordering": { - "label": "Ordena" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearen… arabera" - }, - "pagination": { - "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" - } - }, "InvitationForm": { "button": { "clear": "Garbitu", "new": "Lortu gonbidapen berria" }, - "table": { - "invitation": { - "header": { - "code": "Kodea", - "link": "Partekatu esteka" - } - } - }, "header": { "failure": "Errorea gonbidapena sortzerakoan" }, @@ -2533,523 +2609,59 @@ }, "placeholder": { "invitation": "Utzi hutsik ausazko kode batentzat" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Ekintzak", - "label": "Eremuaren etiketa", - "type": "Eremu mota", - "required": "Beharrezkoa" - }, - "type": { - "long": "Testu luzea", - "short": "Testu laburra" - }, - "required": { - "false": "Ez", - "true": "Bai" - } - } - }, - "button": { - "add": "Gehitu eremu berri bat", - "edit": "Editatu formularioa", - "preview": "Formularioaren aurrebista" - }, - "label": { - "additionalField": "Eremu gehigarria", - "additionalFields": "Eremu gehigarriak", - "delete": "Ezabatu", - "helpText": "Laguntza testua", - "moveDown": "Eraman behera", - "moveUp": "Eraman gora" - }, - "help": { - "additionalFields": "Formularioan erakusteko eremu gehigarriak. Soili eskuzko izen-emate baliozkotzea gaituta badago erakutsiko da.", - "helpText": "Izena emateko formularioaren hasieran bistaratuko den aukerako testua." - } - }, - "SettingsGroup": { - "header": { - "image": "Uneko irudia", - "error": "Errorea ezarpenak gordetzerakoan" - }, - "button": { - "save": "Gorde" - }, - "message": { - "success": "Ezarpenak arrakastaz eguneratuta." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Dena" - }, - "label": { - "category": "Kategoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", - "modal": "Objektu hau salatu nahi al duzu?", - "submissionFailure": "Errorea salaketa bidaltzerakoan" - }, - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali txostena" - }, - "label": { - "email": "Eposta", - "forwardToDomain": "Bidali { domain} domeinura", - "message": "Mezua" - }, - "description": { - "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", - "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", - "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko.", - "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu." - }, - "message": { - "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" - } - }, - "FilterModal": { - "button": { - "cancel": "Ezeztatu", - "hide": "Ezkutatu edukia" - }, - "message": { - "success": "Edukien iragazkia behar bezala gehitu da" - }, - "header": { - "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?", - "failure": "Errorea iragazkia sortzerakoan" - }, - "warning": { - "createFilter": { - "listItem2": "\"Azken aldian gehituta\" widget-ean", - "listItem3": "Artista eta albumen zerrendetan", - "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", - "listItem4": "Irratien iradokizunetan", - "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:" - } - }, - "help": { - "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Errore bat gertatu da datuak freskatzen saiatzean:", - "success": "Datuak behar bezala freskatu dira urruneko zerbitzaritik.", - "pending": "Freskatze eskaera ez da garaiz prozesatu gure zerbitzarian. Beranduago prozesatuko da.", - "skipped": "Urruneko zerbitzariak erantzun du, baina Funkwhalek ez du itzulitako datuen euskarririk." - }, - "table": { - "error": { - "value": { - "httpError": "HTTP errorea gertatu da urruneko zerbitzariarekin harremanetan jartzean", - "invalidAttributesError": "Urruneko zerbitzariak itzulitako datuek atributu baliogabeak edo faltan ditu", - "connectionError": "Ezin izan da urruneko zerbitzarira konektatu", - "httpStatus": "Urruneko zerbitzariak HTTP { status } egoerarekin erantzun du", - "timeoutError": "Urruneko zerbitzariak ez du behar bezain azkar erantzun", - "invalidJsonError": "Urruneko zerbitzariak baliogabeko JSON edo JSON-LD datuak itzuli ditu", - "unknownError": "Errore ezezaguna" - }, - "label": { - "detail": "Errorearen xehetasuna", - "type": "Errore mota" - } - } - }, - "button": { - "close": "Itxi", - "reload": "Itxi eta freskatu orria" - }, - "header": { - "saveFailure": "Errorea ezarpenak gordetzerakoan", - "failure": "Freskatu errorea", - "pending": "Freskatu zain daudenak", - "success": "Arrakastaz freskatua", - "skipped": "Freskatzea saltatu da", - "refresh": "Objektua freskatzen urruneko zerbitzaritik…" - }, - "loader": { - "fetchRequest": "Bilaketa eskatzen…", - "awaitingResult": "Erantzunen zain…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Ez da bat datorren liburutegirik aurkitu." - }, - "button": { - "showMore": "Erakutsi gehiago" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Audio erreproduzigailuaren laster-teklak", - "clearQueue": "Garbitu ilara", - "decreaseVolume": "Jaitsi bolumena", - "expandQueue": "Zabaldu ilara/erreproduzigailu ikuspegia", - "increaseVolume": "Igo bolumena", - "playPause": "Pausatu/erreproduzitu uneko pista", - "playNext": "Erreproduzitu hurrengo pista", - "playPrevious": "Erreproduzitu aurreko pista", - "seekBack30": "Bilatu atzeraka 30s", - "seekBack5": "Bilatu atzeraka 5s", - "seekForward30": "Bilatu aurreraka 30s", - "seekForward5": "Bilatu aurreraka 5s", - "shuffleQueue": "Nahasi ilara", - "toggleFavorite": "Txandakatu gogokoa", - "toggleMute": "Txandakatu mututzea", - "toggleLoop": "Txandakatu ilararen begizta" - }, - "general": { - "focus": "Fokuratu bilaketa-barra", - "label": "Lasterbide orokorrak", - "show": "Erakutsi erabilgarri dauden laster-tekla guztiak", - "unfocus": "Kendu fokua bilaketa-barrari" - } - }, - "button": { - "close": "Itxi" - }, - "header": { - "modal": "Laster-teklak" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Ezeztatu", - "submit": "Bidali" - }, - "header": { - "chooseInstance": "Zure instantzia hautatu", - "failure": "Ezin da konektatu emandako URLarekin", - "suggestions": "Iradokitako aukerak" - }, - "label": { - "url": "Instantziaren URLa" - }, - "help": { - "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", - "serverDown": "Zerbitzaria erorita egon daiteke", - "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat." - }, - "message": { - "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" - } - }, - "Queue": { - "button": { - "clear": "Garbitu", - "close": "Itxi", - "stopRadio": "Gelditu irratia" - }, - "label": { - "duration": "Iraupena", - "addArtistContentFilter": "Ezkutatu artista honen edukia…", - "next": "Hurrengo pista", - "pause": "Pausatu", - "play": "Erreproduzitu", - "previous": "Aurreko pista", - "queue": "Ilara", - "remove": "Kendu", - "restart": "Berrasi pista" - }, - "message": { - "radio": "Abesti berriak hemen gehituko dira automatikoki.", - "automaticPlay": "Hurrengo pista automatikoki erreproduzituko da segundo batzuk barru…" - }, - "header": { - "failure": "Pista ezin da kargatu", - "radio": "Irrati bat martxan duzu" - }, - "meta": { - "queuePosition": "Pista { index } / { length }" - }, - "warning": { - "connectivity": "Konexio arazo bat izan dezakezu." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Kopiatu" - }, - "title": "Erakutsi/ezkutatu pasahitza", - "message": { - "copy": "Testua arbelera kopiatu da!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editatu" - } - }, - "Button": { - "startRadio": "Erreproduzitu irratia", - "stopRadio": "Gelditu irratia" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errorea objektua eskuratzerakoan" - }, - "button": { - "fediverse": "Fedibertsoa", - "rss": "RSS", - "search": "Bilatu" - }, - "label": { - "fediverse": { - "fieldLabel": "Fedibertsoko objektua", - "title": "Harpidetu Fedibertsoan ostatatutako podcast batera" - }, - "rss": { - "fieldPlaceholder": "https://adibidea.eus/rss.xml", - "fieldLabel": "RSS jarioaren kokapena", - "title": "Harpidetu podcast baten RSS jariora" - } - }, - "warning": { - "unsupported": "Objektu mota hau ez da onartzen oraindik" - }, - "error": { - "fetchFailed": "Objektu hau ezin da berreskuratu" - }, - "description": { - "fediverse": "Erabili formulario hau fedibertsoan ostatatutako kanal batera harpidetzeko.", - "rss": "Erabili formulario hau RSS jario batera bere URLaren bidez harpidetzeko." - } - }, - "PageNotFound": { - "link": { - "home": "Joan hasiera orrira" - }, - "title": "Orrialdea ez da aurkitu", - "header": { - "pageNotFound": "Orrialdea ez da aurkitu!" - }, - "message": { - "pageNotFound": "Sentitzen dugu, eskatu duzun orria ez da existitzen:" - } - }, - "vui": { - "Pagination": { - "next": "Hurrengo orria", - "label": "Orrialdekatzea", - "previous": "Aurreko orria" - } - }, - "tags": { - "List": { - "button": { - "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "Saio { n } | { n } saio", - "listenings": "Entzunaldi { n } | { n } entzunaldi", - "subscribers": "Harpidetu { n } | { n } harpidetu", - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "channelEpisodes": "Saio guztiak", - "mirrored": "{ domain } domeinutik ispilatua", - "moderation": "Ireki moderazio interfazean", - "channelOverview": "Informazio orokorra", - "channelTracks": "Pistak", - "domainView": "Ikusi { domain }(e)n" - }, - "header": { - "artistChannel": "Artistaren kanala", - "podcastChannel": "Podcast kanala" - }, - "button": { - "cancel": "Ezeztatu", - "confirm": "Ezabatu", - "delete": "Ezabatu…", - "edit": "Editatu…", - "embed": "Txertatu", - "play": "Erreproduzitu", - "updateChannel": "Eguneratu kanala", - "upload": "Igo" - }, - "title": "Kanala", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" - }, - "header": "Harpidetu RSS bidez" - }, - "fediverse": { - "content": { - "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" - }, - "header": "Harpidetu Fedibertsoan" - }, - "funkwhale": { - "header": "Harpidetu Funkwhalen" - }, - "header": "Harpidetu kanal honetara" }, - "delete": { - "header": "Kanal hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - }, - "embed": { - "header": "Txertatu artista honen lana zure webgunean" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Gehitu berria", - "erroredUploads": "Ikusi huts egindako igoerak", - "skippedUploads": "Ikusi saltatutako igoerak" - }, - "header": { - "albums": "Albumak", - "latestEpisodes": "Azken saioak", - "latestTracks": "Azken abestiak", - "series": "Serieak", - "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", - "uploadsProcessing": "Igoerak prozesatzen", - "uploadsSuccess": "Igoerak arrakastaz argitaratuta" - }, - "meta": { - "progress": "Prozesatutako igoerak:" - }, - "message": { - "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Gehitu berria" - }, - "button": { - "cancel": "Ezeztatu", - "subscribe": "Harpidetu" - }, - "placeholder": { - "search": "Iragazi izenaren arabera…" - }, - "title": "Harpidetutako kanalak", - "modal": { - "subscription": { - "header": "Harpidetza" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "details": "Liburutegiaren xehetasunak" - }, - "label": { - "size": "Liburutegi honetako fitxategien guztizko tamaina" - }, - "button": { - "upload": "Igo" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", - "errored": "Erroredun fitxategiak", - "pending": "Fitxategiak faltan", - "skipped": "Saltatutako fitxategiak" - }, - "header": { - "currentUsage": "Oraingo erabilera" - }, - "loading": { - "currentUsage": "Erabilpen datuak kargatzen…" - }, - "button": { - "purge": "Kendu" - }, - "modal": { - "purgeErrored": { - "header": "Erroreak emandako fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgePending": { - "header": "Zain dauden fitxategiak kendu?", - "content": { - "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - }, - "purgeSkipped": { - "header": "Saltatutako fitxategiak kendu?", - "content": { - "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." - } - } - }, - "link": { - "viewFiles": "Ikusi fitxategiak" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Albuma", - "artist": "Artista", - "duration": "Iraupena", - "importStatus": "Inportazioaren egoera", - "size": "Tamaina", - "title": "Izenburua", - "uploadDate": "Igoera data" + "code": "Kodea", + "link": "Partekatu esteka" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Ezabatu" + }, + "label": { + "expired": "Iraungita", + "search": "Bilatu", + "status": "Egoera", + "unused": "Ez da erabiltzen", + "used": "Erabilita" }, "option": { - "status": { - "all": "Dena", - "draft": "Zirriborroa", - "failed": "Huts egin du", - "finished": "Amaituta", - "pending": "Zain", - "skipped": "Saltatuta" - } + "all": "Dena", + "expired": "Iraungita/erabilita", + "open": "Ireki" }, + "ordering": { + "label": "Ordena" + }, + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, kodearen arabera" + }, + "table": { + "invitation": { + "header": { + "code": "Kodea", + "creationDate": "Sortze data", + "expirationDate": "Iraungitze data", + "owner": "Jabea", + "status": "Egoera", + "user": "Erabiltzailea" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", "ordering": { "direction": { "ascending": "Gorantza", @@ -3058,397 +2670,579 @@ }, "label": "Ordena" }, - "action": { - "delete": "Ezabatu", - "restartImport": "Hasi berriro inportazioa" + "pagination": { + "results": "Emaitza bat bistaratzen | { start } - { end } emaitzak bistaratzen, guztira { total }" }, - "label": { - "importStatus": "Inportazioaren egoera", - "search": "Bilatu" - }, - "notApplicable": "Daturik gabe", - "empty": { - "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" }, "placeholder": { - "search": "Bilatu izenburuaren, artistaren, albumaren… arabera" + "search": "Bilatu erabiltzaile-izenaren, helbide elektronikoaren, izenaren arabera" }, - "button": { - "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" - }, - "pagination": { - "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" - } - }, - "Home": { - "link": { - "createLibrary": "Liburutegi berria sortu" - }, - "loading": { - "libraries": "Liburutegiak kargatzen…" - }, - "empty": { - "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." - }, - "header": { - "libraries": "Nire liburutegiak" - } - }, - "Form": { - "button": { - "create": "Liburutegia sortu", - "delete": "Ezabatu", - "confirm": "Liburutegia ezabatu", - "update": "Eguneratu liburutegia" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + "table": { + "user": { + "accountStatus": { + "active": "Aktibo", + "inactive": "Ez-aktiboa" + }, + "header": { + "accountStatus": "Kontuaren egoera", + "email": "Eposta", + "lastActivity": "Azken jarduera", + "permissions": "Baimenak", + "signup": "Erregistratu", + "status": "Egoera", + "username": "Erabiltzaile-izena" + }, + "status": { + "admin": "Admin", + "regular": "Erabiltzaile arrunta", + "staff": "Taldeko kidea" } } - }, - "label": { - "description": "Deskribapena", - "name": "Izena", - "visibility": "Ikusgaitasuna" - }, - "header": { - "failure": "Errorea" - }, - "description": { - "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", - "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." - }, - "message": { - "libraryCreated": "Liburutegia sortuta", - "libraryDeleted": "Liburutegia ezabatuta", - "libraryUpdated": "Liburutegia eguneratuta" - }, - "placeholder": { - "name": "Nire liburutegi txundigarria", - "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "Pista { n } | { n } pista", - "failedTracks": "Erroredun pistak:", - "lastUpdate": "Azken eguneraketa:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." - }, - "header": "Liburutegi hau jarraitzeari utzi?" - } - }, - "button": { - "cancel": "Utzi jarraitzeko eskaera", - "follow": "Jarraitu", - "pending": "Jarraipen-eskaera onarpenaren zain", - "unfollow": "Utzi jarraitzeari" - }, - "link": { - "scanDetails": "Xehetasunak", - "scan": "Eskaneatu orain" - }, - "label": { - "scanFailure": "Arazoa eskaneatzean", - "scanPending": "Eskaneatzeko zain", - "scanSuccess": "Eskaneatzea amaituta", - "scanPartialSuccess": "Erroreak eskaneatzean", - "scanProgress": "Eskaneatzen… ({ progress }%)", - "sharingLink": "Esteka partekatzen" - }, - "message": { - "scanLaunched": "Eskaneatzea abiarazita", - "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" - } - }, - "ScanForm": { - "header": { - "failure": "Ezin izan da eskuratu urruneko liburutegia" - }, - "placeholder": { - "url": "Idatzi liburutegiaren URLa" - }, - "label": { - "search": "Bilatu urruneko liburutegia" - }, - "button": { - "submit": "Bidali bilaketa" - } - }, - "Home": { - "header": { - "knownLibraries": "Liburutegi ezagunak", - "remoteLibraries": "Urruneko liburutegiak" - }, - "loading": { - "remoteLibraries": "Urruneko liburutegiak kargatzen…" - }, - "button": { - "refresh": "Freskatu" - }, - "description": { - "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." - } - } - }, - "Home": { - "title": "Gehitu eta kudeatu edukia", - "description": { - "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", - "channel": { - "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", - "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." - }, - "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." - }, - "header": { - "follow": "Jarraitu urruneko liburutegiak", - "channel": "Argitaratu zure lana kanal batean", - "upload": "Igo hirugarrengoen edukia liburutegi batera" - }, - "button": { - "start": "Hasi erabiltzen" - }, - "help": { - "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." - } - }, - "Base": { - "title": "Edukia sartu", - "link": { - "libraries": "Liburutegiak", - "tracks": "Pistak" - }, - "menu": { - "secondary": "Bigarren mailako menua" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "Pista { n } | { n } pista" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "moderation": "Ireki moderazio interfazean", - "owner": "Jabea { username } da", - "tracks": "Pistak", - "domain": "Ikusi { domain }(e)n" - }, - "button": { - "edit": "Editatu", - "upload": "Igo" - }, - "title": "Liburutegia", - "label": { - "private": "Pribatua", - "public": "Publikoa", - "instance": "Mugatuta", - "sharingLink": "Esteka partekatzen" - }, - "description": { - "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." - }, - "tooltip": { - "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", - "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu", - "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago" - } - }, - "Edit": { - "button": { - "accept": "Onartu", - "reject": "Baztertu" - }, - "table": { - "action": { - "status": { - "accepted": "Onartuta", - "pending": "Onarpenaren zain", - "rejected": "Baztertuta" - }, - "header": { - "action": "Akzioa", - "date": "Data", - "status": "Egoera", - "user": "Erabiltzailea" - } - } - }, - "header": { - "followers": "Jarraitzaileak", - "libraryContents": "Liburutegiaren edukiak" - }, - "loading": { - "followers": "Jarraitzaileak kargatzen…" - }, - "empty": { - "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailOverview": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - }, - "DetailTracks": { - "empty": { - "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!", - "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada." - } - } - }, - "auth": { - "ProfileBase": { - "title": "{ username }-(r)en profila", - "link": { - "activity": "Jarduera", - "moderation": "Ireki moderazio interfazean", - "overview": "Informazio orokorra", - "domainView": "Ikusi { domain }(e)n" - }, - "label": { - "self": "Hau zu zara!" - } - }, - "PasswordReset": { - "label": { - "email": "Kontuaren eposta" - }, - "button": { - "requestReset": "Eskatu pasahitza berrezartzeko" - }, - "link": { - "back": "Itzuli sarrerara" - }, - "placeholder": { - "email": "Idatzi zure kontuarekin lotutako eposta helbidea" - }, - "header": { - "failure": "Errorea pasahitza berrezartzerakoan", - "reset": "Berrezarri pasahitza" - }, - "title": "Berrezarri pasahitza", - "help": { - "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Gehitu berria" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Artistaren kanala" - }, - "header": "Sortu kanala", - "podcast": { - "header": "Podcast kanala" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Ezeztatu", - "createChannel": "Sortu kanala", - "next": "Hurrengo pausoa", - "previous": "Aurreko pausoa" + "hide": "Ezkutatu edukia" }, "header": { - "channels": "Kanalak", - "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu", - "libraries": "Erabiltzaileen liburutegiak" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Itzuli sarrerara", - "login": "Jarraitu saio hasierara" + "failure": "Errorea iragazkia sortzerakoan", + "modal": "\"{ name }\" artistaren edukia ezkutatu nahi duzu?" }, - "title": "Zure pasahitza aldatu", - "header": { - "failure": "Errorea zure pasahitza aldatzerakoan", - "success": "Pasahitza arrakastaz eguneratu da" + "help": { + "createFilter": "Zure iragazkiak nahi duzunean kudeatu eta eguneratu ditzakezu kontuaren ezarpenetan." }, "message": { - "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", - "success": "Pasahitza arrakastaz eguneratu da." + "success": "Edukien iragazkia behar bezala gehitu da" }, + "warning": { + "createFilter": { + "listIntro": "Artista honen pista, album eta erabiltzaile aktibitatea ez dituzu ikusiko hemendik aurrera:", + "listItem1": "Beste erabiltzaileen gogokoetan eta entzundakoen historian", + "listItem2": "\"Azken aldian gehituta\" widget-ean", + "listItem3": "Artista eta albumen zerrendetan", + "listItem4": "Irratien iradokizunetan" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Pasahitz berria" + "category": "Kategoria" }, + "option": { + "all": "Dena" + } + }, + "ReportModal": { "button": { - "update": "Eguneratu zure pasahitza" - } - }, - "EmailConfirm": { - "title": "Egiaztatu zure e-posta helbidea", - "label": { - "confirmationCode": "Berrespen kodea" + "cancel": "Ezeztatu", + "submit": "Bidali txostena" + }, + "description": { + "email": "Eposta helbide hau erabiliko dugu salaketa hau dela eta zurekin harremanetan jarri behar badugu.", + "forwardToDomain": "Bidali zure txostenaren kopia anonimatua elementu hau hartzen duen zerbitzarira.", + "message": "Erabili eremu hau moderatzaileari zure txostenari buruzko informazio gehigarria emateko.", + "modal": "Erabili formulario hau moderazio taldeari txosten bat bidaltzeko" + }, + "error": { + "nodeinfoFetch": "Ezin da lortu nodoaren informazioa: {error}" }, "header": { - "failure": "Ezin izan da berretsi zure helbide elektronikoa", - "success": "E-posta helbidea egiaztatu da" + "disabled": "Salaketa anonimoak desgaituta daude. Hasi saioa salaketa bidaltzeko.", + "modal": "Objektu hau salatu nahi al duzu?", + "submissionFailure": "Errorea salaketa bidaltzerakoan" }, - "link": { - "login": "Jarraitu saio hasierara", - "back": "Itzuli saio hasierara" + "label": { + "email": "Eposta", + "forwardToDomain": "Bidali { domain} domeinura", + "message": "Mezua" }, "message": { - "success": "Zerbitzua mugarik gabe erabil dezakezu orain." - } - }, - "Signup": { - "header": { - "createAccount": "Sortu Funkwhale kontua" - }, - "title": "Erregistratu" - }, - "Login": { - "title": "Hasi saioa", - "header": { - "login": "Sartu zure Funkwhale kontura" - } - }, - "Callback": { - "header": { - "loggingIn": "Saioa hasten…" - } - }, - "Plugins": { - "title": "Kudeatu pluginak" - }, - "ProfileActivity": { - "header": { - "playlists": "Zerrendak", - "recentlyFavorited": "Azken aldian gogokoa", - "recentlyListened": "Azken aldian entzuna" + "submissionSuccess": "Salaketa arrakastaz bidali da, esker aunitz" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Onartu", + "markRead": "Markatu irakurrita", + "markUnread": "Markatu irakurri gabe", + "reject": "Baztertu" + }, + "message": { + "libraryAcceptFollow": "{ username }-(e)k zure jarraipen-eskaera onartu du \"{ library }\" liburutegian", + "libraryFollow": "{ username } zure \"{ library }\" liburutegia jarraitzen hasi da", + "libraryPendingFollow": "{ username }-(e)k zure \"{ library }\" liburutegia jarraitu nahi du", + "libraryReject": "{username} erabiltzailearen \"{liburutegia}\" jarraitzeko eskaera ukatu duzu" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "Editor": { + "button": { + "addDuplicate": "Gehitu halere", + "clear": "Garbitu zerrenda", + "copy": "Kopiatu uneko ilara erreprodukzio-zerrenda honetara", + "insertFromQueue": "Gehitu ilaratik (abesti { n }) | Gehitu ilaratik ({ n } abesti)" + }, + "error": { + "sync": "Errorea gertatu da aldaketak gordetzerakoan" + }, + "header": { + "editor": "Zerrenda editorea" + }, + "help": { + "reorder": "Arrastatu eta jaregin lerroak abestiak zerrendan berrordenatzeko" + }, + "loading": { + "sync": "Aldaketak zerbitzariarekin sinkronizatzen…" + }, + "message": { + "sync": "Aldaketak zerbitzariarekin sinkronizatuta" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Honek zerrenda honetako pista guztiak kenduko ditu eta ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda garbitzea?" + } + }, + "warning": { + "duplicate": "Zure ilarako pista batzuk zerrenda honetan daude dagoeneko:" + } + }, + "Form": { + "button": { + "create": "Zerrenda sortu", + "update": "Eguneratu zerrenda" + }, + "header": { + "createFailure": "Ezin izan da zerrenda sortu", + "createPlaylist": "Zerrenda berria sortu", + "createSuccess": "Zerrenda sortuta", + "updateSuccess": "Zerrenda eguneratuta" + }, + "label": { + "name": "Zerrenda izena", + "visibility": "Zerrendaren ikusgaitasuna" + }, + "placeholder": { + "name": "Nire zerrenda txundigarria" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Gehitu halere", + "addToPlaylist": "Gehitu erreprodukzio-zerrenda honetan", + "addTrack": "Abestia sartu", + "cancel": "Ezeztatu", + "edit": "Editatu" + }, + "empty": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + }, + "header": { + "addFailure": "Pista ezin da zerrenda batera gehitu", + "addToPlaylist": "Gehitu erreprodukzio-zerrendan", + "available": "Zerrendak eskuragarri", + "manage": "Kudeatu zerrendak", + "noResults": "Ez dago zure iragazkiarekin bat datorren emaitzarik", + "track": "{title}, honen eskutik: {artist}" + }, + "label": { + "filter": "Iragazkia" + }, + "placeholder": { + "filterPlaylist": "Idatzi erreprodukzio-zerrendaren izena" + }, + "table": { + "edit": { + "header": { + "edit": "Editatu", + "lastModification": "Azken aldaketa", + "name": "Izena", + "tracks": "Pistak" + } + } + }, + "warning": { + "duplicate": "{ 0 } jada badago { 1 }(e)n." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Gehitu erreprodukzio-zerrendan…" + } + }, + "Widget": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "more": "Erakutsi gehiago" + }, + "placeholder": { + "noPlaylists": "Ez da zerrendarik sortu oraindik" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Hasi artisten irratia", + "startPlaylistsRadio": "Hasi zerrenden irratia", + "startRadio": "Erreproduzitu irratia", + "startTagsRadio": "Hasi etiketen irratia", + "stopArtistsRadio": "Gelditu artisten irratia", + "stopPlaylistsRadio": "Gelditu zerrenden irratia", + "stopRadio": "Gelditu irratia", + "stopTagsRadio": "Gelditu etiketen irratia" + }, + "Card": { + "button": { + "edit": "Editatu" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Erakutsi etiketa 1 gehiago | Erakutsi { n } etiketa gehiago" + } + } + }, + "vui": { + "Pagination": { + "label": "Orrialdekatzea", + "next": "Hurrengo orria", + "previous": "Aurreko orria" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musika", + "other": "Beste bat", + "podcast": "Podcasta" + }, + "label": "Edukien kategoria" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik", + "label": "Zirriborroa" + }, + "errored": { + "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela", + "label": "Erroreduna" + }, + "finished": { + "help": "Inportatuta", + "label": "Amaituta" + }, + "pending": { + "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik", + "label": "Zain" + }, + "skipped": { + "help": "Pista hau zure liburutegietako batean dago jadanik", + "label": "Saltatuta" + } + }, + "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko" + }, + "privacyLevel": { + "choices": { + "instance": "Instantzia honetako edonork", + "private": "Soilik ni", + "public": "Edonork, instantzia guztietan zehar" + }, + "help": "Zehaztu zure jardueraren ikusgarritasun maila", + "label": "Jardueraren ikusgarritasuna", + "shortChoices": { + "instance": "Instantzia", + "private": "Pribatua", + "public": "Edonork" + } + }, + "reportType": { + "choices": { + "illegalContent": "Eduki ilegala", + "invalidMetadata": "Metadatu baliogabeak", + "offensiveContent": "Eduki mingarria", + "other": "Beste bat", + "takedownRequest": "Edukia kentzeko eskaera" + }, + "label": "Kategoria" + }, + "summary": { + "label": "Biografia" + } + }, + "filters": { + "accessedDate": "Atzitutako datuak", + "albumTitle": "Albumaren izena", + "appliedDate": "Aplikatu zeneko data", + "artistName": "Artistaren izena", + "bitrate": "Bit-tasa", + "creationDate": "Sortze data", + "dateJoined": "Erregistroaren data", + "domain": "Domeinua", + "duration": "Iraupena", + "expirationDate": "Iraungitze data", + "firstSeen": "Lehen aldiz ikusi zeneko data", + "followers": "Jarraitzaileak", + "handledDate": "Kudeaketa data", + "itemsCount": "Elementuak", + "lastActivity": "Azken jarduera", + "lastSeen": "Azkenekoz ikusi zeneko data", + "modificationDate": "Aldatze data", + "name": "Izena", + "receivedMessages": "Jasotako mezuak", + "releaseDate": "Argitalpen-data", + "size": "Tamaina", + "trackTitle": "Pistaren izena", + "uploads": "Igoerak", + "username": "Erabiltzaile-izena", + "users": "Erabiltzaileak" + }, + "scopes": { + "edits": { + "description": "Edizioetara sarbidea", + "label": "Edizioak" + }, + "favorites": { + "description": "Sartu gogokoenetara", + "label": "Gogokoak" + }, + "filters": { + "description": "Eduki-iragazkietara sarbidea", + "label": "Edukien iragazkiak" + }, + "follows": { + "description": "Jarraitutakoetara sarbidea", + "label": "Jarraitutakoak" + }, + "libraries": { + "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", + "label": "Liburutegiak eta igoerak" + }, + "listenings": { + "description": "Entzunaldi-historiarako sarbidea", + "label": "Entzunaldiak" + }, + "notifications": { + "description": "Jakinarazpenetarako sarbidea", + "label": "Jakinarazpenak" + }, + "playlists": { + "description": "Erreprodukzio-zerrendetarako sarbidea", + "label": "Zerrendak" + }, + "profile": { + "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", + "label": "Profila" + }, + "radios": { + "description": "Irratietarako sarbidea", + "label": "Irratiak" + }, + "reports": { + "description": "Moderazio-salaketetarako sarbidea", + "label": "Salaketak" + }, + "security": { + "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", + "label": "Segurtasuna" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "name": "Izena" + }, + "cover": { + "label": "Azala" + }, + "description": { + "label": "Deskribapena" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + } + }, + "useReport": { + "account": { + "label": "Salatu {'@'}{username}", + "typeLabel": "Kontua" + }, + "album": { + "label": "Salatu album hau…", + "typeLabel": "Albuma" + }, + "artist": { + "label": "Salatu artista hau…", + "typeLabel": "Artista", + "unknownLabel": "Artista ezezaguna" + }, + "channel": { + "label": "Salatu kanal hau…", + "typeLabel": "Kanala" + }, + "library": { + "label": "Salatu liburutegi hau…", + "typeLabel": "Liburutegia" + }, + "playlist": { + "label": "Salatu erreprodukzio-zerrenda hau…", + "typeLabel": "Zerrenda" + }, + "track": { + "label": "Salatu pista hau…", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Kontua", + "summary": "Biografia" + }, + "album": { + "label": "Albuma", + "releaseDate": "Argitalpen-data", + "title": "Izenburua" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Kanala" + }, + "creationDate": { + "label": "Sortze data" + }, + "library": { + "description": "Deskribapena", + "label": "Liburutegia" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Izena" + }, + "playlist": { + "label": "Zerrenda" + }, + "tags": { + "label": "Etiketak" + }, + "track": { + "copyright": "Copyright-a", + "label": "Pista", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "visibility": { + "label": "Ikusgaitasuna" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Zergatik gertatu den uler dezagun laguntzeko, erantsi errorea abiarazteko egin duzunaren azalpen xehatu bat.", + "errorReportTitle": "Ustekabeko errore bat gertatu da.", + "leaveFeedback": "Eman iritzia", + "unexpectedError": "Ustekabeko errore bat gertatu da." + }, + "useThemeList": { + "browserDefault": "Arakatzaileak lehenetsitakoa", + "darkTheme": "Iluna", + "lightTheme": "Argia" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", + "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" + }, + "sentry": { + "allow": "Onartu", + "deny": "Ukatu", + "funkwhaleInstance": "Funkwhale-ren Glitchtip instantzia ofiziala", + "message": "Erroreak nola eta noiz gertatzen diren uler dezagun laguntzeko, piloaren aztarnak honekin partekatuko dira: { 0 }", + "title": "Gure zerbitzuen kalitatea hobetzeko, saioan gerta litezkeen akatsen informazioa biltzea gustatuko litzaiguke." + }, + "serviceWorker": { + "actions": { + "later": "Geroago", + "update": "Eguneratu" + }, + "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago." + } + }, + "views": { "Notifications": { + "button": { + "read": "Markatu dena irakurrita", + "submit": "Ulertuta!" + }, + "empty": { + "notifications": "Ez dago jakinarazpenik erakusteko" + }, + "header": { + "funkwhaleSupport": "Gustuko al duzu Funkwhale?", + "instanceSupport": "Babestu Funkwhale instantzia hau", + "messages": "Zure mezuak", + "notifications": "Zure jakinarazpenak" + }, + "label": { + "reminder": "Gogorarazi hau barru:", + "showRead": "Erakutsi irakurritako jakinarazpenak" + }, + "link": { + "donate": "Dohaintza egin", + "help": "Ezagutu laguntzeko beste modu batzuk" + }, + "loading": { + "notifications": "Jakinarazpenak kargatzen…" + }, + "message": { + "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + }, "option": { "delay": { "30": "30 egun", @@ -3457,584 +3251,63 @@ "never": "Inoiz ez" } }, - "link": { - "help": "Ezagutu laguntzeko beste modu batzuk", - "donate": "Dohaintza egin" + "title": "Jakinarazpenak" + }, + "Search": { + "button": { + "submit": "Bidali bilaketaren kontsulta" }, "header": { - "funkwhaleSupport": "Gustuko al duzu Funkwhale?", - "instanceSupport": "Babestu Funkwhale instantzia hau", - "messages": "Zure mezuak", - "notifications": "Zure jakinarazpenak" + "remote": "Bilatu urruneko objektu bat", + "rss": "Harpidetu podcast baten RSS jariora", + "search": "Bilatu" }, - "button": { - "submit": "Ulertuta!", - "read": "Markatu dena irakurrita" - }, - "loading": { - "notifications": "Jakinarazpenak kargatzen…" - }, - "empty": { - "notifications": "Ez dago jakinarazpenik erakusteko." - }, - "title": "Jakinarazpenak", "label": { - "reminder": "Gogorarazi hau barru:", - "showRead": "Erakutsi irakurritako jakinarazpenak" - }, - "message": { - "funkwhaleSupport": "Denbora pixkat daramazu hemen. Funkwhale erabilgarria iruditzen bazaizu, oraindik hobea egiten lagun gaitzakezu!" + "albums": "Albumak", + "artists": "Artistak", + "playlists": "Zerrendak", + "podcasts": "Podcastak", + "radios": "Irratiak", + "series": "Serieak", + "tags": "Etiketak", + "tracks": "Pistak" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Erabiltzaile-izena", - "loginStatus": { - "disabled": "Desgaituta", - "enabled": "Gaituta", - "label": "Saioaren egoera" - }, - "displayName": "Bistaratzeko izena", - "email": "Eposta helbidea", - "lastActivity": "Azken jarduera", - "lastChecked": "Azken egiaztapena", - "permissions": "Baimenak", - "signupDate": "Erregistroaren data", - "userType": "Mota" - }, - "audioContent": { - "cachedSize": "Cachearen tamaina", - "megabyte": "MB", - "totalSize": "Tamaina guztira", - "uploadQuota": "Igoera muga" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - } - }, - "header": { - "accountData": "Kontuaren datuak", - "activity": "Jarduera", - "audioContent": "Audio edukia", - "localAccount": "Kontu lokala", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik kontu honetan oraindik." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "domain": "Domeinua", - "libraries": "Liburutegiak", - "linkedReports": "Estekatutako txostenak", - "openProfile": "Ireki profila", - "remoteProfile": "Ireki urruneko profila", - "requests": "Eskaerak", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "tooltip": { - "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." - }, - "option": { - "permission": { - "library": "Liburutegia", - "moderation": "Moderazioa", - "settings": "Ezarpenak" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "accounts": "Kontuak", - "domains": "Domeinuak", - "reports": "Salaketak", - "userRequests": "Erabiltzaileen eskaerak" - }, - "title": "Moderazioa", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "DomainsDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "instanceData": "Instantziaren datuak", - "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", - "noPolicy": "Ez daukazu araurik domeinu honentzat." - }, - "button": { - "addPolicy": "Gehitu moderazio-gidalerroa", - "addToAllowList": "Gehitu baimen-zerrendan", - "refreshNodeInfo": "Freskatu nodoaren informazioa", - "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "knownAccounts": "Kontu ezagunak", - "libraries": "Liburutegiak", - "website": "Ireki webgunea", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "activity": { - "emittedFollows": "Eskatutako liburutegi-jarraitzeak", - "emittedMessages": "Bidalitako mezuak", - "firstSeen": "Lehen aldiz ikusia", - "receivedFollows": "Jasotako liburutegiaren jarraipenak" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errorea nodoaren informazioa eskuratzerakoan", - "label": "Egoera" - }, - "inAllowList": { - "label": "Onartuen zerrendan dago", - "false": "Ez", - "true": "Bai" - }, - "lastChecked": "Azken egiaztapena", - "domainName": "Izena", - "software": { - "label": "Softwarea" - }, - "totalUsers": "Erabiltzaileak guztira" - } - }, - "description": { - "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute." - }, - "notApplicable": "Daturik gabe", - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "DomainsList": { - "button": { - "add": "Gehitu" - }, - "label": { - "addDomain": "Gehitu domeinua", - "addToAllowList": "Gehitu baimen-zerrendan" - }, - "title": "Domeinuak", - "header": { - "domains": "Domeinuak", - "failure": "Errorea domeinua sortzerakoan" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Dena", - "resolved": "Ebatzita", - "unresolved": "Konpondu gabea" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "title": "Salaketak", - "header": { - "reports": "Salaketak" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu kontuaren, laburpenaren, domeinuaren... arabera" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Dena", - "approved": "Onartuta", - "pending": "Zain", - "refused": "Ukatuta" - } - }, - "ordering": { - "direction": { - "ascending": "Gorantza", - "descending": "Beheranzkoa", - "label": "Ordena" - }, - "label": "Ordena" - }, - "label": { - "search": "Bilatu", - "status": "Egoera" - }, - "placeholder": { - "search": "Bilatu erabiltzaile-izenaren arabera…" - }, - "title": "Erabiltzaileen eskaerak", - "header": { - "userRequests": "Erabiltzaileen eskaerak" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Sarbide data", - "firstSeen": "Lehen aldiz ikusia" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Cachearen tamaina", - "duration": "Iraupena", - "size": "Tamaina", - "track": "Pista" - }, - "upload": { - "name": "Izena" - } - }, - "link": { - "account": "Kontua", - "domain": "Domeinua", - "importStatus": "Inportazioaren egoera", - "library": "Liburutegia", - "remoteProfile": "Ireki urruneko profila", - "type": "Mota", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "local": "Lokala", - "uploadData": "Igoera data" - }, - "button": { - "delete": "Ezabatu", - "download": "Deskargatu" - }, - "modal": { - "delete": { - "header": "Igoera hau ezabatu nahi duzu?", - "content": { - "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." - } - } - }, - "notApplicable": "Daturik gabe" - }, - "LibraryDetail": { - "link": { - "account": "Kontua", - "albums": "Albumak", - "artists": "Artistak", - "domain": "Domeinua", - "reports": "Estekatutako txostenak", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan", - "visibility": "Ikusgaitasuna" - }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "libraryData": "Liburutegiaren datuak", - "local": "Lokala" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "library": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "firstSeen": "Lehen aldiz ikusia", - "followers": "Jarraitzaileak" - } - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu?", - "content": { - "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "AlbumDetail": { - "header": { - "activity": "Jarduera", - "albumData": "Albumaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "album": { - "description": "Deskribapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Album hau ezabatu nahi duzu?", - "content": { - "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "ArtistDetail": { - "header": { - "activity": "Jarduera", - "artistData": "Artistaren datuak", - "audioContent": "Audio edukia", - "local": "Lokala" - }, - "link": { - "albums": "Albumak", - "category": "Kategoria", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "tracks": "Pistak", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "audioContent": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "artist": { - "description": "Deskribapena", - "name": "Izena" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Artista hau ezabatu nahi duzu?", - "content": { - "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "TagDetail": { - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "tagData": "Etiketaren datuak" - }, - "link": { - "albums": "Albumak", - "artists": "Artistak", - "localProfile": "Ireki profil lokala", - "tracks": "Pistak", - "django": "Ikusi Django-ren administrazioan" - }, - "button": { - "delete": "Ezabatu" - }, - "modal": { - "delete": { - "header": "Etiketa hau ezabatu nahi duzu?", - "content": { - "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." - } - } - }, - "table": { - "activity": { - "firstSeen": "Lehen aldiz ikusia" - }, - "tag": { - "name": "Izena" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Jarduera", - "local": "Lokala", - "trackData": "Pistaren datuak" - }, - "link": { - "album": "Albuma", - "albumArtist": "Artista honen albumak", - "artist": "Artista", - "domain": "Domeinua", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "reports": "Estekatutako txostenak", - "localProfile": "Ireki profil lokala", - "musicbrainz": "Ireki MusicBrainz-en", - "remoteProfile": "Ireki urruneko profila", - "uploads": "Igoerak", - "django": "Ikusi Django-ren administrazioan" - }, - "table": { - "trackData": { - "cachedSize": "Cachearen tamaina", - "totalSize": "Tamaina guztira" - }, - "track": { - "copyright": "Copyright-a", - "description": "Deskribapena", - "discNumber": "Disko zenbakia", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "activity": { - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" - } - }, - "button": { - "delete": "Ezabatu", - "edit": "Editatu", - "remoteRefresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Pista hau ezabatu nahi duzu?", - "content": { - "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "warning": { - "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" - } - }, - "Base": { - "link": { - "albums": "Albumak", - "artists": "Artistak", - "channels": "Kanalak", - "edits": "Edizioak", - "libraries": "Liburutegiak", - "tags": "Etiketak", - "tracks": "Pistak", - "uploads": "Igoerak" - }, - "title": "Kudeatu liburutegia", - "menu": { - "secondary": "Bigarren mailako menua" - } - }, - "EditsList": { - "title": "Edizioak", - "header": { - "edits": "Liburutegiaren edizioak" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Ezabatu", + "openRemote": "Ireki urruneko profila", + "refresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "channelData": "Kanalaren datuak" + }, + "label": { + "local": "Lokala" + }, + "link": { + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu nahi duzu?" + } + }, "table": { - "channelData": { - "account": "Kontua", - "category": "Kategoria", - "description": "Deskribapena", - "domain": "Domeinua", - "name": "Izena", - "rss": "RSS jarioa", - "url": "URL" + "activity": { + "edits": "Edizioak", + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "linkedReports": "Estekatutako txostenak", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" }, "audioContent": { "albums": "Albumak", @@ -4043,40 +3316,16 @@ "tracks": "Pistak", "uploads": "Igoerak" }, - "activity": { - "edits": "Edizioak", - "favorited": "Gogoko pistak", - "firstSeen": "Lehen aldiz ikusia", - "linkedReports": "Estekatutako txostenak", - "listenings": "Entzunaldiak", - "playlists": "Zerrendak" + "channelData": { + "account": "Kontua", + "category": "Kategoria", + "description": "Deskribapena", + "domain": "Domeinua", + "name": "Izena", + "rss": "RSS jarioa", + "url": "URL" } }, - "header": { - "activity": "Jarduera", - "audioContent": "Audio edukia", - "channelData": "Kanalaren datuak" - }, - "button": { - "delete": "Ezabatu", - "openRemote": "Ireki urruneko profila", - "refresh": "Freskatu urruneko zerbitzaritik" - }, - "modal": { - "delete": { - "header": "Liburutegi hau ezabatu nahi duzu?", - "content": { - "warning": "Kanal hau eta erlazionatutako igoerak, pistak eta albumak ezabatu egingo dira. Ekintza hau ezin da desegin." - } - } - }, - "label": { - "local": "Lokala" - }, - "link": { - "localProfile": "Ireki profil lokala", - "django": "Ikusi Django-ren administrazioan" - }, "warning": { "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" } @@ -4100,53 +3349,1205 @@ "channels": "Kanalak", "federation": "Federazioa", "instanceInfo": "Instantziaren informazioa", - "settings": "Instantziaren ezarpenak", "moderation": "Moderazioa", "music": "Musika", "playlists": "Zerrendak", "sections": "Atalak", "security": "Segurtasuna", + "settings": "Instantziaren ezarpenak", "signups": "Erregistroak", "stats": "Estatistikak", "subsonic": "Subsonic", "ui": "Erabiltzaile interfazea" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "albumData": "Albumaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Album hau eta erlazionatutako igoerak, pistak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Album hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "album": { + "description": "Deskribapena", + "title": "Izenburua" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "ArtistDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "artistData": "Artistaren datuak", + "audioContent": "Audio edukia", + "local": "Lokala" + }, + "link": { + "albums": "Albumak", + "category": "Kategoria", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Artista hau eta erlazionatutako igoerak, pistak, albumak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Artista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "artist": { + "description": "Deskribapena", + "name": "Izena" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "tags": "Etiketak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu liburutegia" + }, + "EditsList": { + "header": { + "edits": "Liburutegiaren edizioak" + }, + "title": "Edizioak" + }, + "LibraryDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "libraryData": "Liburutegiaren datuak", + "local": "Lokala" + }, + "link": { + "account": "Kontua", + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "tracks": "Pistak", + "uploads": "Igoerak", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegi hau eta erlazionatutako igoerak eta jarraipenak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia", + "followers": "Jarraitzaileak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "library": { + "description": "Deskribapena", + "name": "Izena" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "TagDetail": { + "button": { + "delete": "Ezabatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "tagData": "Etiketaren datuak" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "django": "Ikusi Django-ren administrazioan", + "localProfile": "Ireki profil lokala", + "tracks": "Pistak" + }, + "modal": { + "delete": { + "content": { + "warning": "Etiketa ezabatu egingo da eta edukiarekiko esteka kenduko da, baldin balego. Ekintza hau ezin da desegin." + }, + "header": "Etiketa hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "firstSeen": "Lehen aldiz ikusia" + }, + "tag": { + "name": "Izena" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Ezabatu", + "edit": "Editatu", + "remoteRefresh": "Freskatu urruneko zerbitzaritik" + }, + "header": { + "activity": "Jarduera", + "local": "Lokala", + "trackData": "Pistaren datuak" + }, + "link": { + "album": "Albuma", + "albumArtist": "Artista honen albumak", + "artist": "Artista", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "edits": "Edizioak", + "libraries": "Liburutegiak", + "localProfile": "Ireki profil lokala", + "musicbrainz": "Ireki MusicBrainz-en", + "remoteProfile": "Ireki urruneko profila", + "reports": "Estekatutako txostenak", + "uploads": "Igoerak" + }, + "modal": { + "delete": { + "content": { + "warning": "Pista eta erlazionatutako igoerak, gogokoak eta entzunaldien historia ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Pista hau ezabatu nahi duzu?" + } + }, + "table": { + "activity": { + "favorited": "Gogoko pistak", + "firstSeen": "Lehen aldiz ikusia", + "listenings": "Entzunaldiak", + "playlists": "Zerrendak" + }, + "track": { + "copyright": "Copyright-a", + "description": "Deskribapena", + "discNumber": "Disko zenbakia", + "license": "Lizentzia", + "position": "Kokapena", + "title": "Izenburua" + }, + "trackData": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "UploadDetail": { + "button": { + "delete": "Ezabatu", + "download": "Deskargatu" + }, + "header": { + "activity": "Jarduera", + "audioContent": "Audio edukia", + "local": "Lokala", + "uploadData": "Igoera data" + }, + "link": { + "account": "Kontua", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "importStatus": "Inportazioaren egoera", + "library": "Liburutegia", + "remoteProfile": "Ireki urruneko profila", + "type": "Mota", + "visibility": "Ikusgaitasuna" + }, + "modal": { + "delete": { + "content": { + "warning": "Igoera ezabatu egingo da. Ekintza hau ezin da desegin." + }, + "header": "Igoera hau ezabatu nahi duzu?" + } + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "accessedDate": "Sarbide data", + "firstSeen": "Lehen aldiz ikusia" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Cachearen tamaina", + "duration": "Iraupena", + "size": "Tamaina", + "track": "Pista" + }, + "upload": { + "name": "Izena" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "accountData": "Kontuaren datuak", + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "localAccount": "Kontu lokala", + "noPolicy": "Ez daukazu araurik kontu honetan oraindik." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "domain": "Domeinua", + "libraries": "Liburutegiak", + "linkedReports": "Estekatutako txostenak", + "openProfile": "Ireki profila", + "remoteProfile": "Ireki urruneko profila", + "requests": "Eskaerak", + "tracks": "Pistak", + "uploads": "Igoerak" + }, + "notApplicable": "Daturik gabe", + "option": { + "permission": { + "library": "Liburutegia", + "moderation": "Moderazioa", + "settings": "Ezarpenak" + } + }, + "table": { + "accountData": { + "displayName": "Bistaratzeko izena", + "email": "Eposta helbidea", + "lastActivity": "Azken jarduera", + "lastChecked": "Azken egiaztapena", + "loginStatus": { + "disabled": "Desgaituta", + "enabled": "Gaituta", + "label": "Saioaren egoera" + }, + "permissions": "Baimenak", + "signupDate": "Erregistroaren data", + "userType": "Mota", + "username": "Erabiltzaile-izena" + }, + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "megabyte": "MB", + "totalSize": "Tamaina guztira", + "uploadQuota": "Igoera muga" + } + }, + "tooltip": { + "uploadQuota": "Zehaztu erabiltzaileak zenbat eduki igo dezakeen. Utzi hutsik instantziaren balio lehenetsia erabiltzeko." + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "Base": { + "link": { + "accounts": "Kontuak", + "domains": "Domeinuak", + "reports": "Salaketak", + "userRequests": "Erabiltzaileen eskaerak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Moderazioa" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Gehitu moderazio-gidalerroa", + "addToAllowList": "Gehitu baimen-zerrendan", + "refreshNodeInfo": "Freskatu nodoaren informazioa", + "removeFromAllowList": "Kendu baimenendutakoen zerrendatik" + }, + "description": { + "policy": "Moderazio politikek zure instantziak domeinu edo kontu batekin dituen elkarrekintzak kontrolatzen laguntzen dizute" + }, + "header": { + "activePolicy": "Domeinu honek moderazio arau espezifikoak ditu", + "activity": "Jarduera", + "audioContent": "Audio edukia", + "instanceData": "Instantziaren datuak", + "noPolicy": "Ez daukazu araurik domeinu honentzat." + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "channels": "Kanalak", + "django": "Ikusi Django-ren administrazioan", + "knownAccounts": "Kontu ezagunak", + "libraries": "Liburutegiak", + "tracks": "Pistak", + "uploads": "Igoerak", + "website": "Ireki webgunea" + }, + "notApplicable": "Daturik gabe", + "table": { + "activity": { + "emittedFollows": "Eskatutako liburutegi-jarraitzeak", + "emittedMessages": "Bidalitako mezuak", + "firstSeen": "Lehen aldiz ikusia", + "receivedFollows": "Jasotako liburutegiaren jarraipenak" + }, + "audioContent": { + "cachedSize": "Cachearen tamaina", + "totalSize": "Tamaina guztira" + }, + "instanceData": { + "domainName": "Izena", + "inAllowList": { + "false": "Ez", + "label": "Onartuen zerrendan dago", + "true": "Bai" + }, + "lastChecked": "Azken egiaztapena", + "nodeInfoStatus": { + "label": "Egoera", + "value": "Errorea nodoaren informazioa eskuratzerakoan" + }, + "software": { + "label": "Softwarea", + "value": "{name} ({version})" + }, + "totalUsers": "Erabiltzaileak guztira" + } + }, + "warning": { + "stats": "Estatistikak aktibitate ezagunetik eta zure instantziako edukitik kalkulatzen dira eta ez dute objektu honen aktibitate orokorra islatzen" + } + }, + "DomainsList": { + "button": { + "add": "Gehitu" + }, + "header": { + "domains": "Domeinuak", + "failure": "Errorea domeinua sortzerakoan" + }, + "label": { + "addDomain": "Gehitu domeinua", + "addToAllowList": "Gehitu baimen-zerrendan" + }, + "title": "Domeinuak" + }, + "ReportsList": { + "header": { + "reports": "Salaketak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "resolved": "Ebatzita", + "unresolved": "Konpondu gabea" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu kontuaren, laburpenaren, domeinuaren arabera" + }, + "title": "Salaketak" + }, + "RequestsList": { + "header": { + "userRequests": "Erabiltzaileen eskaerak" + }, + "label": { + "search": "Bilatu", + "status": "Egoera" + }, + "option": { + "status": { + "all": "Dena", + "approved": "Onartuta", + "pending": "Zain", + "refused": "Ukatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordena" + }, + "label": "Ordena" + }, + "placeholder": { + "search": "Bilatu erabiltzaile-izenaren arabera" + }, + "title": "Erabiltzaileen eskaerak" + } + }, "users": { "Base": { "link": { "invitations": "Gonbidapenak", "users": "Erabiltzaileak" }, - "title": "Kudeatu erabiltzaileak", "menu": { "secondary": "Bigarren mailako menua" + }, + "title": "Kudeatu erabiltzaileak" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Saioa hasten…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Ezin izan da berretsi zure helbide elektronikoa", + "success": "E-posta helbidea egiaztatu da" + }, + "label": { + "confirmationCode": "Berrespen kodea" + }, + "link": { + "back": "Itzuli saio hasierara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "success": "Zerbitzua mugarik gabe erabil dezakezu orain" + }, + "title": "Egiaztatu zure e-posta helbidea" + }, + "Login": { + "header": { + "login": "Sartu zure Funkwhale kontura" + }, + "title": "Hasi saioa" + }, + "PasswordReset": { + "button": { + "requestReset": "Eskatu pasahitza berrezartzeko" + }, + "header": { + "failure": "Errorea pasahitza berrezartzerakoan", + "reset": "Berrezarri pasahitza" + }, + "help": { + "form": "Erabili formulario hau pasahitza berrezartzea eskatzeko. Emandako eposta helbidera mezu bat bidaliko dizugu, zure pasahitza berrezartzeko argibideekin." + }, + "label": { + "email": "Kontuaren eposta" + }, + "link": { + "back": "Itzuli sarrerara" + }, + "placeholder": { + "email": "Idatzi zure kontuarekin lotutako eposta helbidea" + }, + "title": "Berrezarri pasahitza" + }, + "PasswordResetConfirm": { + "button": { + "update": "Eguneratu zure pasahitza" + }, + "header": { + "failure": "Errorea zure pasahitza aldatzerakoan", + "success": "Pasahitza arrakastaz eguneratu da" + }, + "label": { + "newPassword": "Pasahitz berria" + }, + "link": { + "back": "Itzuli sarrerara", + "login": "Jarraitu saio hasierara" + }, + "message": { + "requestSent": "Aurreko pausoan emandako eposta helbidea zuzena bada eta erabiltzaile kontu bati lotuta badago, datozen minututan eposta mezu bat jaso beharko zenuke pasahitza berrezartzeko argibideekin.", + "success": "Pasahitza arrakastaz eguneratu da." + }, + "title": "Zure pasahitza aldatu" + }, + "Plugins": { + "title": "Kudeatu pluginak" + }, + "ProfileActivity": { + "header": { + "playlists": "Zerrendak", + "recentlyFavorited": "Azken aldian gogokoa", + "recentlyListened": "Azken aldian entzuna" + } + }, + "ProfileBase": { + "label": { + "self": "Hau zu zara!" + }, + "link": { + "activity": "Jarduera", + "domainView": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "overview": "Informazio orokorra" + }, + "title": "{ username }-(r)en profila" + }, + "ProfileOverview": { + "button": { + "cancel": "Ezeztatu", + "createChannel": "Sortu kanala", + "next": "Hurrengo pausoa", + "previous": "Aurreko pausoa" + }, + "header": { + "channels": "Kanalak", + "libraries": "Erabiltzaileen liburutegiak", + "sharedLibraries": "Erabiltzaile honek ondorengo liburutegiak partekatu ditu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Artistaren kanala" + }, + "header": "Sortu kanala", + "podcast": { + "header": "Podcast kanala" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Sortu Funkwhale kontua" + }, + "title": "Erregistratu" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Ezabatu", + "delete": "Ezabatu…", + "edit": "Editatu…", + "embed": "Txertatu", + "play": "Erreproduzitu", + "updateChannel": "Eguneratu kanala", + "upload": "Igo" + }, + "header": { + "artistChannel": "Artistaren kanala", + "podcastChannel": "Podcast kanala" + }, + "link": { + "channelEpisodes": "Saio guztiak", + "channelOverview": "Informazio orokorra", + "channelTracks": "Pistak", + "domainView": "Ikusi { domain }(e)n", + "mirrored": "{ domain } domeinutik ispilatua", + "moderation": "Ireki moderazio interfazean" + }, + "meta": { + "episodes": "Saio { n } | { n } saio", + "listenings": "Entzunaldi { n } | { n } entzunaldi", + "subscribers": "Harpidetu { n } | { n } harpidetu", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanal hau eta erlazionatutako fitxategi eta datuak ezabatu egingo dira. Ekintza hau ezin da desegin." + }, + "header": "Kanal hau ezabatu nahi duzu?" + }, + "embed": { + "header": "Txertatu artista honen lana zure webgunean" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Mastodon edo fedibertsoko beste aplikazioren bat erabiltzen ari bazara, kontu honetara harpidetu zaitezke:" + }, + "header": "Harpidetu Fedibertsoan" + }, + "funkwhale": { + "header": "Harpidetu Funkwhalen" + }, + "header": "Harpidetu kanal honetara", + "rss": { + "content": { + "help": "Kopiatu eta itsatsi URL hau zure podcast aplikazio gogokoenean:" + }, + "header": "Harpidetu RSS bidez" + } + } + }, + "title": "Kanala" + }, + "DetailOverview": { + "header": { + "albums": "Albumak", + "latestEpisodes": "Azken saioak", + "latestTracks": "Azken abestiak", + "series": "Serieak", + "uploadsFailure": "Igoera batzuk ezin izan dira argitaratu", + "uploadsProcessing": "Igoerak prozesatzen", + "uploadsSuccess": "Igoerak arrakastaz argitaratuta" + }, + "link": { + "addAlbum": "Gehitu berria", + "erroredUploads": "Ikusi huts egindako igoerak", + "skippedUploads": "Ikusi saltatutako igoerak" + }, + "message": { + "processing": "Funkwhale zure igoerak prozesatzen ari da eta laster izango dira prest." + }, + "meta": { + "progress": "Prozesatutako igoerak: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Ezeztatu", + "subscribe": "Harpidetu" + }, + "link": { + "addNew": "Gehitu berria" + }, + "modal": { + "subscription": { + "header": "Harpidetza" + } + }, + "placeholder": { + "search": "Iragazi izenaren arabera…" + }, + "title": "Harpidetutako kanalak" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Liburutegiak", + "tracks": "Pistak" + }, + "menu": { + "secondary": "Bigarren mailako menua" + }, + "title": "Edukia sartu" + }, + "Home": { + "button": { + "start": "Hasi erabiltzen" + }, + "description": { + "channel": { + "1": "Musikaria edo podcast egilea bazara, kanalak zuretzat diseinatuta daude!", + "2": "Partekatu zure lana publikoki eta lortu harpidetzak Funkwhalen, fedibertsoan edo edozein podcast aplikaziotan." + }, + "follow": "Jarraitu beste erabiltzaile batzuen liburutegiak musika berria eskuratzeko. Liburutegi publikoak zuzenean jarraitu daitezke, baina liburutegi pribatu bat jarraitzeko bere sortzailearen onespena behar da.", + "upload": "Igo zure musikaren liburutegi pertsonala Funkwhalera edozein lekutatik gozatu eta lagun eta familiarekin partekatzeko." + }, + "header": { + "channel": "Argitaratu zure lana kanal batean", + "follow": "Jarraitu urruneko liburutegiak", + "upload": "Igo hirugarrengoen edukia liburutegi batera" + }, + "help": { + "uploadQuota": "Instantzia honek {quota}eko biltegiratzea eskaintzen dio erabiltzaile bakoitzari." + }, + "title": "Gehitu eta kudeatu edukia" + }, + "libraries": { + "Card": { + "button": { + "upload": "Igo" + }, + "label": { + "size": "Liburutegi honetako fitxategien guztizko tamaina" + }, + "link": { + "details": "Liburutegiaren xehetasunak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + } + }, + "FilesTable": { + "action": { + "delete": "Ezabatu", + "restartImport": "Hasi berriro inportazioa" + }, + "button": { + "showStatus": "Erakutsi pista honen igoeraren egoerari buruzko informazioa" + }, + "empty": { + "noTracks": "Ez da pistarik gehitu oraindik liburutegi honetara" + }, + "label": { + "importStatus": "Inportazioaren egoera", + "search": "Bilatu" + }, + "notApplicable": "Daturik gabe", + "option": { + "status": { + "all": "Dena", + "draft": "Zirriborroa", + "failed": "Huts egin du", + "finished": "Amaituta", + "pending": "Zain", + "skipped": "Saltatuta" + } + }, + "ordering": { + "direction": { + "ascending": "Gorantza", + "descending": "Beheranzkoa", + "label": "Ordenazio norabidea" + }, + "label": "Ordena" + }, + "pagination": { + "results": "Emaitzak erakusten: { start }-{ end } guztizko { total }(e)tik" + }, + "placeholder": { + "search": "Bilatu domeinuaren, izenburuaren, artistaren, albumaren arabera" + }, + "table": { + "file": { + "header": { + "album": "Albuma", + "artist": "Artista", + "duration": "Iraupena", + "importStatus": "Inportazioaren egoera", + "size": "Tamaina", + "title": "Izenburua", + "uploadDate": "Igoera data" + } + } + } + }, + "Form": { + "button": { + "confirm": "Liburutegia ezabatu", + "create": "Liburutegia sortu", + "delete": "Ezabatu", + "update": "Eguneratu liburutegia" + }, + "description": { + "library": "Liburutegiak zure musika bildumak antolatzen eta partekatzen laguntze dizute. Zure musika bilduma igo dezakezu Funkwhalera eta zure familia eta lagunekin partekatu.", + "visibility": "Zure liburutegia besteekin partekatu dezakezu, ikusgaitasuna edozein dela ere." + }, + "header": { + "failure": "Errorea" + }, + "label": { + "description": "Deskribapena", + "name": "Izena", + "visibility": "Ikusgaitasuna" + }, + "message": { + "libraryCreated": "Liburutegia sortuta", + "libraryDeleted": "Liburutegia ezabatuta", + "libraryUpdated": "Liburutegia eguneratuta" + }, + "modal": { + "delete": { + "content": { + "warning": "Liburutegia eta bere pista guztiak ezabatuko dira. Ekintza hau ezin da desegin." + }, + "header": "Liburutegi hau ezabatu?" + } + }, + "placeholder": { + "description": "Liburutegi honetan nire musika pertsonala dago, espero dut gustuko izango duzula.", + "name": "Nire liburutegi txundigarria" + } + }, + "Home": { + "empty": { + "noLibrary": "Badirudi ez duzula liburutegirik oraindik, bada bat sortzeko ordua." + }, + "header": { + "libraries": "Nire liburutegiak" + }, + "link": { + "createLibrary": "Liburutegi berria sortu" + }, + "loading": { + "libraries": "Liburutegiak kargatzen…" + } + }, + "Quota": { + "button": { + "purge": "Kendu" + }, + "header": { + "currentUsage": "Oraingo erabilera" + }, + "label": { + "currentUsage": "{ current } erabilita baimendutako { max }e(ta)tik", + "errored": "Erroredun fitxategiak", + "pending": "Fitxategiak faltan", + "percentUsed": "% {progress}", + "skipped": "Saltatutako fitxategiak" + }, + "link": { + "viewFiles": "Ikusi fitxategiak" + }, + "loading": { + "currentUsage": "Erabilpen datuak kargatzen…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Igotako baina oraindik zerbitzariak prozesatu ezin izan dituen pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Erroreak emandako fitxategiak kendu?" + }, + "purgePending": { + "content": { + "description": "Igotako baina oraindik prozesatu gabeko pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Zain dauden fitxategiak kendu?" + }, + "purgeSkipped": { + "content": { + "description": "Inportazio prozesuan igotako baina saltatutako pistak guztiz kentzen ditu, dagozkien datuak zure kuotara gehituz." + }, + "header": "Saltatutako fitxategiak kendu?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Utzi jarraitzeko eskaera", + "follow": "Jarraitu", + "pending": "Jarraipen-eskaera onarpenaren zain", + "unfollow": "Utzi jarraitzeari" + }, + "error": { + "follow": "Ezin da jarraitu urruneko liburutegia: {error}", + "unfollow": "Ezin da jarraitzeari utzi urruneko liburutegia: {error}" + }, + "label": { + "scanFailure": "Arazoa eskaneatzean", + "scanPartialSuccess": "Erroreak eskaneatzean", + "scanPending": "Eskaneatzeko zain", + "scanProgress": "Eskaneatzen… ({ progress }%)", + "scanSuccess": "Eskaneatzea amaituta", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "scan": "Eskaneatu orain", + "scanDetails": "Xehetasunak" + }, + "message": { + "scanLaunched": "Eskaneatzea abiarazita", + "scanSkipped": "Eskaneatzea saltatuta (aurreko eskaneatzea oso berria da)" + }, + "meta": { + "failedTracks": "Huts egin duten pistak: {tracks}", + "lastUpdate": "Azken eguneraketa:", + "tracks": "Pista { n } | { n } pista" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Liburutegi hau jarraitzeari utzita, bere edukirako sarbidea galduko duzu." + }, + "header": "Liburutegi hau jarraitzeari utzi?" + } + }, + "tooltip": { + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } + }, + "Home": { + "button": { + "refresh": "Freskatu" + }, + "description": { + "remoteLibraries": "Urruneko liburutegiak interneteko beste erabiltzaile batzuenak dira. Hauetara sarbidea lor dezakezu hauetara baimena lortzen baduzu edo publikoak diren bitartean." + }, + "header": { + "knownLibraries": "Liburutegi ezagunak", + "remoteLibraries": "Urruneko liburutegiak" + }, + "loading": { + "remoteLibraries": "Urruneko liburutegiak kargatzen…" + } + }, + "ScanForm": { + "button": { + "submit": "Bidali bilaketa" + }, + "header": { + "failure": "Ezin izan da eskuratu urruneko liburutegia" + }, + "label": { + "search": "Bilatu urruneko liburutegia" + }, + "placeholder": { + "url": "Idatzi liburutegiaren URLa" } } } }, - "Search": { - "label": { - "albums": "Albumak", - "artists": "Artistak", - "playlists": "Zerrendak", - "podcasts": "Podcastak", - "radios": "Irratiak", - "series": "Serieak", - "tags": "Etiketak", - "tracks": "Pistak" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "header": { - "search": "Bilatu", - "remote": "Bilatu urruneko objektu bat", - "rss": "Harpidetu podcast baten RSS jariora" + "DetailOverview": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } }, - "button": { - "submit": "Bidali bilaketaren kontsulta" + "DetailTracks": { + "empty": { + "follow": "Bere edukia ikusteko liburutegi hau jarraitu beharko duzu behar bada.", + "upload": "Liburutegi hau hutsik dago, zerbait igo beharko zenuke bertara!" + } + }, + "Edit": { + "button": { + "accept": "Onartu", + "reject": "Baztertu" + }, + "empty": { + "noFollowers": "Inor ez da liburutegi hau jarraitzen ari" + }, + "header": { + "followers": "Jarraitzaileak", + "libraryContents": "Liburutegiaren edukiak" + }, + "loading": { + "followers": "Jarraitzaileak kargatzen…" + }, + "table": { + "action": { + "header": { + "action": "Akzioa", + "date": "Data", + "status": "Egoera", + "user": "Erabiltzailea" + }, + "status": { + "accepted": "Onartuta", + "pending": "Onarpenaren zain", + "rejected": "Baztertuta" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editatu", + "upload": "Igo" + }, + "description": { + "sharingLink": "Partekatu esteka hau beste erabiltzaile batzuekin zure liburutegira sarbidea eska dezaten instantziaren bilaketa barran kopiatu eta itsatsiz." + }, + "label": { + "instance": "Mugatuta", + "private": "Pribatua", + "public": "Publikoa", + "sharingLink": "Esteka partekatzen" + }, + "link": { + "albums": "Albumak", + "artists": "Artistak", + "domain": "Ikusi { domain }(e)n", + "moderation": "Ireki moderazio interfazean", + "owner": "Jabea { username } da", + "tracks": "Pistak" + }, + "meta": { + "tracks": "Pista { n } | { n } pista" + }, + "title": "Liburutegia", + "tooltip": { + "instance": "Liburutegi hau instantzia honetako erabiltzaileetara mugatua dago", + "private": "Liburutegi hau pribatua da eta jabearen onarpena beharrezkoa da edukira sarbidea izateko", + "public": "Liburutegi hau publikoa da eta edukira sarbide librea duzu" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Ezeztatu", + "confirm": "Zerrenda ezabatu", + "delete": "Ezabatu", + "edit": "Editatu", + "embed": "Txertatu", + "playAll": "Erreproduzitu dena", + "stopEdit": "Utzi editatzeari" + }, + "empty": { + "noTracks": "Oraindik ez dago pistarik zerrenda honetan" + }, + "header": { + "tracks": "Pistak" + }, + "meta": { + "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" + }, + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." + }, + "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?" + }, + "embed": { + "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" + } + }, + "title": "Zerrenda" + }, "List": { + "button": { + "create": "Sortu erreprodukzio-zerrenda", + "manage": "Kudeatu zure zerrendak", + "search": "Bilatu" + }, + "empty": { + "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" + }, + "header": { + "browse": "Zerrendak arakatzen", + "playlists": "Zerrendak" + }, + "label": { + "search": "Bilatu" + }, "ordering": { "direction": { "ascending": "Gorantza", @@ -4155,58 +4556,11 @@ }, "label": "Ordena" }, - "header": { - "browse": "Zerrendak arakatzen", - "playlists": "Zerrendak" - }, - "button": { - "create": "Sortu erreprodukzio-zerrenda", - "manage": "Kudeatu zure zerrendak", - "search": "Bilatu" - }, - "placeholder": { - "search": "Idatzi erreprodukzio-zerrendaren izena…" - }, - "empty": { - "noResults": "Ez dago zure bilaketarekin bat datorren emaitzarik" - }, "pagination": { "results": "Emaitzak orrialdeko" }, - "label": { - "search": "Bilatu" - } - }, - "Detail": { - "button": { - "cancel": "Ezeztatu", - "delete": "Ezabatu", - "confirm": "Zerrenda ezabatu", - "edit": "Editatu", - "embed": "Txertatu", - "playAll": "Erreproduzitu dena", - "stopEdit": "Utzi editatzeari" - }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ playlist }\" zerrenda ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du zerrenda hau eta ekintza ezin da desegin." - } - }, - "embed": { - "header": "Txertatu erreprodukzio zerrenda hau zure webgunean" - } - }, - "title": "Zerrenda", - "meta": { - "tracks": "Zerrendak { username }-(r)en pista { n } du | Zerrendak { username }-(r)en { n } pista ditu" - }, - "empty": { - "noTracks": "Oraindik ez dago pistarik zerrenda honetan" - }, - "header": { - "tracks": "Pistak" + "placeholder": { + "search": "Idatzi erreprodukzio-zerrendaren izena…" } } }, @@ -4214,289 +4568,48 @@ "Detail": { "button": { "confirm": "Irratia ezabatu", + "delete": "Ezabatu", "edit": "Editatu…" }, - "modal": { - "delete": { - "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?", - "content": { - "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." - } - } - }, "empty": { "noTracks": "Ez da pistarik gehitu oraindik irrati honetara" }, - "title": "Irratia", "header": { + "radio": "{tracks} pista dituen irratia, honen eskutik: ", "tracks": "Pistak" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Pista { n } gehitu da zure ilaran | { n } pista gehitu dira zure ilaran" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Sarbidea audio-fitxategi, liburutegi, artista, album eta pistetara", - "label": "Liburutegiak eta igoerak" - }, - "filters": { - "description": "Eduki-iragazkietara sarbidea", - "label": "Edukien iragazkiak" - }, - "profile": { - "description": "Sarbidea eposta, erabiltzaile-izen eta profil informaziora", - "label": "Profila" - }, - "edits": { - "description": "Edizioetara sarbidea", - "label": "Edizioak" - }, - "follows": { - "description": "Jarraitutakoetara sarbidea", - "label": "Jarraitutakoak" - }, - "listenings": { - "description": "Entzunaldi-historiarako sarbidea", - "label": "Entzunaldiak" - }, - "reports": { - "description": "Moderazio-salaketetarako sarbidea", - "label": "Salaketak" - }, - "notifications": { - "description": "Jakinarazpenetarako sarbidea", - "label": "Jakinarazpenak" - }, - "playlists": { - "description": "Erreprodukzio-zerrendetarako sarbidea", - "label": "Zerrendak" - }, - "radios": { - "description": "Irratietarako sarbidea", - "label": "Irratiak" - }, - "security": { - "description": "Pasahitza eta baimenak bezalako segurtasun ezarpenetarako sarbidea", - "label": "Segurtasuna" - }, - "favorites": { - "label": "Gogokoak" - } }, - "filters": { - "accessedDate": "Sarbide data", - "albumTitle": "Albumaren izena", - "artistName": "Artistaren izena", - "bitrate": "Bitrate", - "creationDate": "Sortze data", - "domain": "Domeinua", - "duration": "Iraupena", - "expirationDate": "Iraungitze data", - "firstSeen": "Lehen aldiz ikusitako data", - "followers": "Jarraitzaileak", - "itemsCount": "Elementuak", - "lastActivity": "Azken jarduera", - "lastSeen": "Ikusi zen azken aldiaren data", - "modificationDate": "Aldatze data", - "name": "Izena", - "receivedMessages": "Jasotako mezuak", - "releaseDate": "Argitalpen-data", - "dateJoined": "Erregistroaren data", - "size": "Tamaina", - "trackTitle": "Pistaren izena", - "uploads": "Igoerak", - "username": "Erabiltzaile-izena", - "users": "Erabiltzaileak" - }, - "fields": { - "privacyLevel": { - "label": "Jardueraren ikusgarritasuna", - "help": "Zehaztu zure jardueraren ikusgarritasun maila", - "shortChoices": { - "public": "Edonork", - "instance": "Instantzia", - "private": "Pribatua" + "modal": { + "delete": { + "content": { + "warning": "Honek guztiz ezabatuko du irrati hau eta ekintza ezin da desegin." }, - "choices": { - "instance": "Instantzia honetako edonork", - "public": "Edonork, instantzia guztietan zehar", - "private": "Soilik ni" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Eduki ilegala", - "invalidMetadata": "Metadatu baliogabeak", - "offensiveContent": "Eduki mingarria", - "other": "Beste bat", - "takedownRequest": "Edukia kentzeko eskaera" - } - }, - "importStatus": { - "label": "Egin klik igoera honen inportazio prozesuari buruzko informazio gehiago bistaratzeko", - "choices": { - "draft": { - "label": "Zirriborroa", - "help": "Pista hau igo da, baina ez da prozesatzeko programatu oraindik" - }, - "errored": { - "label": "Erroreduna", - "help": "Ezin izan da pista hau prozesatu, mesedez ziurtatu behar bezala etiketatuta dagoela" - }, - "finished": { - "label": "Amaituta", - "help": "Inportatuta" - }, - "pending": { - "label": "Zain", - "help": "Pista igo da, baina zerbitzariak ez du prozesatu oraindik" - }, - "skipped": { - "label": "Saltatuta", - "help": "Pista hau zure liburutegietako batean dago jadanik" - } - } - }, - "contentCategory": { - "label": "Edukien kategoria", - "choices": { - "music": "Musika", - "other": "Beste bat", - "podcast": "Podcasta" - } + "header": "Nahi duzu \"{ radio }\" irratia ezabatzea?" } - } + }, + "title": "Irratia" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Kontua" - }, - "album": { - "typeLabel": "Albuma", - "label": "Salatu album hau…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Salatu artista hau…" - }, - "channel": { - "typeLabel": "Kanala", - "label": "Salatu kanal hau…" - }, - "library": { - "typeLabel": "Liburutegia", - "label": "Salatu liburutegi hau…" - }, - "playlist": { - "typeLabel": "Zerrenda", - "label": "Salatu erreprodukzio-zerrenda hau…" - }, - "track": { - "label": "Salatu pista hau…", - "typeLabel": "Pista" - } + "ChooseInstance": { + "button": { + "submit": "Bidali" }, - "useReportConfigs": { - "account": { - "label": "Kontua", - "summary": "Bio" - }, - "album": { - "label": "Albuma", - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Kanala" - }, - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua", - "label": "Pista" - }, - "creationDate": { - "label": "Sortze data" - }, - "library": { - "description": "Deskribapena", - "label": "Liburutegia" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Izena" - }, - "playlist": { - "label": "Zerrenda" - }, - "tags": { - "label": "Etiketak" - }, - "visibility": { - "label": "Ikusgaitasuna" - } + "header": { + "chooseInstance": "Zure instantzia hautatu", + "failure": "Ezin da konektatu emandako URLarekin", + "suggestions": "Iradokitako aukerak" }, - "useEditConfigs": { - "track": { - "copyright": "Copyright-a", - "license": "Lizentzia", - "position": "Kokapena", - "title": "Izenburua" - }, - "cover": { - "label": "Azala" - }, - "description": { - "label": "Deskribapena" - }, - "artist": { - "name": "Izena" - }, - "album": { - "releaseDate": "Argitalpen-data", - "title": "Izenburua" - }, - "tags": { - "label": "Etiketak" - } + "help": { + "notFunkwhaleServer": "Emandako helbidea ez da Funkwhale zerbitzari bat", + "selectPod": "Jarraitzeko, hautatu konektatu nahi duzun Funkwhale instantzia. Sartu helbidea zuzenean, edo hautatu iradokizunetako bat.", + "serverDown": "Zerbitzaria erorita egon daiteke" + }, + "label": { + "url": "Instantziaren URLa" + }, + "message": { + "currentConnection": "{ 0 } instantziara konektatuta zaude orain. Jarraituz gero, uneko instantziatik deskonektatuko zara eta datu lokal guztiak ezabatuko dira.", + "newUrl": "{ url } Funkwhale instantzia erabiltzen ari zara orain" } - }, - "useThemeList": { - "darkTheme": "Iluna", - "lightTheme": "Argia" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Aplikazioaren bertsio berria eskuragarri dago.", - "actions": { - "later": "Geroago", - "update": "Eguneratu" - } - }, - "axios": { - "rateLimitDelay": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu { delay } igarotzean", - "rateLimitLater": "Eskaera gehiegi bidali dituzu eta mugatua izan zara, saiatu beranduago" } } } diff --git a/front/src/locales/fr_FR.json b/front/src/locales/fr_FR.json index 18f0fce39..81fc68bf2 100644 --- a/front/src/locales/fr_FR.json +++ b/front/src/locales/fr_FR.json @@ -5,9 +5,9 @@ "components": { "About": { "description": { - "findApp": "Utiliser Funkwhale sur d'autres terminaux avec nos applications.", + "findApp": "Utiliser Funkwhale sur d'autres appareils avec nos applications.", "funkwhale": "Funkwhale est un projet communautaire qui vous permet d'écouter et de partager de la musique et des fichiers audio au sein d'un réseau ouvert et décentralisé.", - "publicContent": "Écouter les albums publics et les listes de lecture partagés sur ce pod.", + "publicContent": "Écouter les albums publics et les playlists disponibles sur ce pod.", "quota": "Les utilisateur·ices de ce pod bénéficient également de { quota } d'espace de stockage pour mettre en ligne leurs propres contenus !", "signup": "Inscrivez-vous maintenant pour conserver une trace de vos favoris, créer vos listes de lectures, découvrir de nouveaux contenus et bien plus encore !" }, @@ -16,7 +16,7 @@ "findApp": "Trouver une application", "funkwhale": "Une plateforme sociale pour apprécier et partager la musique", "publicContent": "Parcourir le contenu public", - "signup": "Inscription" + "signup": "S’inscrire" }, "help": { "closedRegistrations": "Les inscriptions sont closes sur ce pod. Vous pouvez vous inscrire sur un autre pod en utilisant le lien ci-dessous." @@ -27,14 +27,14 @@ }, "message": { "greeting": "Bonjour {username}", - "loggedIn": "Vous êtes déjà connecté !" + "loggedIn": "Vous êtes déjà connecté·e !" }, "placeholder": { "noDescription": "Pas de description disponible" }, "stat": { - "activeUsers": "{ n } compte actif | { n } comptes actifs", - "hoursOfMusic": "heure de musique | heures de musique" + "activeUsers": "Pas d’utilisateurs actifs | { n } utilisateur actif | { n } utilisateurs actifs", + "hoursOfMusic": "0 heure de musique | {n} heure de musique | {n} heures de musique" }, "title": "À propos" }, @@ -59,7 +59,7 @@ "features": "Fonctionnalités", "rules": "Règles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privée" + "terms": "Conditions d'utilisation et politique de respect de la vie privée" }, "link": { "about": "À propos de ce pod", @@ -67,15 +67,15 @@ "introduction": "Introduction", "rules": "Règles", "statistics": "Statistiques", - "terms": "Condititions d'utilisation et politique de respect de la vie privée" + "terms": "Conditions d'utilisation et politique de respect de la vie privée" }, "message": { - "contact": "Envoyez-nous un courriel : {'{{'} contactEmail {'}}'}" + "contact": "Envoyez-nous un courriel : { contactEmail }" }, "notApplicable": "ND", "placeholder": { "noDescription": "Pas de description disponible", - "noRules": "Aucune règle disponible", + "noRules": "Aucunes règles disponibles", "noTerms": "Aucune condition disponible" }, "stat": { @@ -183,9 +183,11 @@ }, "message": { "automaticPlay": "La piste suivante va se jouer automatiquement dans quelques secondes…", - "radio": "Les nouvelles pistes seront ajoutées ici automatiquement." + "radio": "Les nouvelles pistes seront ajoutées ici automatiquement.", + "webglUnsupported": "Votre navigateur semble ne pas supporter WebGL2." }, "meta": { + "end": "Fin", "queuePosition": "Piste { index } sur { length }", "startTime": "00:00", "unknownAlbum": "Album Inconnu", @@ -227,29 +229,6 @@ "unsupported": "Ce type d'objet n'est pas encore pris en charge" } }, - "SetInstanceModal": { - "button": { - "cancel": "Annuler", - "submit": "Valider" - }, - "header": { - "chooseInstance": "Choisissez votre instance", - "failure": "Impossible de se connecter à l'URL renseignée", - "suggestions": "Suggestions" - }, - "help": { - "notFunkwhaleServer": "L'adresse fournie n'est pas un serveur Funkwhale", - "selectPod": "Pour continuer, sélectionnez le pod Funkwhale auquel vous souhaitez vous connecter. Entrez l'adresse directement, ou sélectionnez l'un des choix suggérés.", - "serverDown": "Le serveur est peut-être hors-service" - }, - "label": { - "url": "Adresse de l'instance" - }, - "message": { - "currentConnection": "Vous êtes actuellement connecté à { 0 }. Si vous continuez, vous serez déconnecté de l’instance actuelle et toutes vos données locales seront supprimées.", - "newUrl": "Vous utilisez maintenant l’instance Funkwhale sur { url }" - } - }, "ShortcutsModal": { "button": { "close": "Fermer" @@ -876,7 +855,7 @@ }, "link": { "managePlugins": "Gérer les greffons", - "newApp": "Créer une nouvelle application" + "newApp": "Enregistrer une nouvelle application" }, "message": { "confirmDelete": "Votre demande de suppression a été envoyée, votre compte et le contenu associé sera supprimé sous peu", @@ -2483,7 +2462,7 @@ } }, "tooltip": { - "blockAll": "Tout bloquer de ce compte ou domaine. Cela empêche toute interaction avec l'entité, et purge le contenu lié (pistes, librairies, suivis, etc.)", + "blockAll": "Tout bloquer de ce compte ou domaine. Cela empêche toute interaction avec, et purge le contenu lié, telles que les pistes, audiothèques, abonnements, etc.", "isActive": "Utilisez ce paramètre pour activer/désactiver temporairement la règle sans la supprimer complètement.", "rejectMedia": "Ne jamais télécharger de médias (audio, album, couverture, avatar de compte…) de ce compte ou domaine. Cela purgera aussi le contenu existant.", "silenceActivity": "Cacher le contenu du compte ou du domaine, sauf aux abonnés.", @@ -4381,7 +4360,7 @@ "sharingLink": "Lien de partage" }, "link": { - "scan": "Analyser maintenant ", + "scan": "Analyser maintenant", "scanDetails": "Détails" }, "message": { @@ -4390,7 +4369,7 @@ }, "meta": { "failedTracks": "Pistes échouées : {tracks}", - "lastUpdate": "Dernière mise à jour : ", + "lastUpdate": "Dernière mise à jour :", "tracks": "{ n } piste | { n } pistes" }, "modal": { @@ -4609,6 +4588,28 @@ }, "title": "Radio" } + }, + "ChooseInstance": { + "button": { + "submit": "Valider" + }, + "header": { + "chooseInstance": "Choisissez votre instance", + "failure": "Impossible de se connecter à l'URL renseignée", + "suggestions": "Suggestions" + }, + "help": { + "notFunkwhaleServer": "L'adresse fournie n'est pas un serveur Funkwhale", + "selectPod": "Pour continuer, sélectionnez le pod Funkwhale auquel vous souhaitez vous connecter. Entrez l'adresse directement, ou sélectionnez l'un des choix suggérés.", + "serverDown": "Le serveur est peut-être hors-service" + }, + "label": { + "url": "Adresse de l'instance" + }, + "message": { + "currentConnection": "Vous êtes actuellement connecté à { 0 }. Si vous continuez, vous serez déconnecté de l’instance actuelle et toutes vos données locales seront supprimées.", + "newUrl": "Vous utilisez maintenant l’instance Funkwhale sur { url }" + } } } } diff --git a/front/src/locales/gl.json b/front/src/locales/gl.json index e76a6d126..a169a1fa8 100644 --- a/front/src/locales/gl.json +++ b/front/src/locales/gl.json @@ -1,1435 +1,66 @@ { + "App": { + "loading": "Cargando…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } quere acceder a túa conta Funkwhale", - "authorize": "Autorizar app de terceiros", - "authorizeFailure": "Erro ó autorizar a aplicación", - "fetchFailure": "Erro ó obter datos da aplicación", - "allScopes": "Acceso completo", - "readOnly": "Só-lectura", - "writeOnly": "Só-escritura" - }, - "title": "Permitir aplicación", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiar-pegar o seguinte código na aplicación:", - "redirect": "Vas ser redirixida a { 0 }", - "copyCode": "Vaiseche mostrar un código para copiar-pegar na aplicación." - }, - "message": { - "unknownPermissions": "Esta aplicación tamén está solicitando os seguintes permisos descoñecidos:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Acceso desactivado", - "passwordUpdated": "Contrasinal actualizado", - "unavailable": "O API Subsonic non está dispoñible en esta instancia Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar o acceso", - "disable": "Desactivar o acceso Subsonic", - "newPassword": "Solicitar un novo contrasinal", - "confirmNewPassword": "Solicitar un contrasinal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar o acceso a API Subsonic?", - "content": { - "warning": "Desactivará o acceso a API Subsonic desde a conta." - } - }, - "newPassword": { - "header": "Solicitar un nonvo contrasinal para o API Subsonic?", - "content": { - "warning": "Esto pechará sesión nos dispositivos existentes que utilicen o contrasinal actual." - } - } - }, - "link": { - "apps": "Aprende como utilizar Funkwhale desde outras apps" - }, - "header": { - "error": "Fallo", - "subsonic": "Contrasinal API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale é compatible con outros reprodutores de música compatibles coa API Subsonic.", - "paragraph3": "Porén, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquí embaixo.", - "paragraph2": "Pode utilizalos para desfrutar da súa lista de reprodución e música en modo fora de liña, no seu dispositivo móbil ou tableta, por exemplo." - } - }, - "label": { - "subsonicField": "O teu contrasinal API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token de acceso", - "appId": "ID da aplicación", - "appSecret": "Chave segreda da aplicación" - }, - "header": { - "appDetails": "Detalles da aplicación", - "editApp": "Editar aplicación" - }, - "help": { - "appDetails": "O ID da aplicación e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguén." - }, - "link": { - "settings": "Volver ós axustes" - }, - "title": "Editar aplicación", - "button": { - "regenerateToken": "Recrear token" - } - }, - "Settings": { - "title": "Axustes da conta", - "header": { - "accountSettings": "Axustes da conta", - "authorizedApps": "Apps autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar o meu enderezo de email", - "changePassword": "Cambiar o contrasinal", - "contentFilters": "Filtros de contido", - "deleteAccount": "Eliminar a miña conta", - "hiddenArtists": "Artistas ocultos", - "plugins": "Plugins", - "settingsUpdated": "Axustes actualizados", - "emailFailure": "Non podemos cambiar o teu enderezo de email", - "accountFailure": "Non podemos eliminar a túa conta", - "noApps": "Non ten ningunha regra activada para esta conta.", - "noPersonalApps": "Non tes ningunha aplicación rexistrada.", - "yourApps": "As súas notificacións", - "avatarFailure": "Non se gardou o avatar", - "passwordFailure": "Non se pode cambiar o contrasinal", - "updateFailure": "Non se actualizaron os axustes" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplicación", - "permissions": "Permisos" - } - }, - "yourApps": { - "header": { - "application": "Aplicación", - "creationDate": "Data de creación", - "scopes": "Ámbitos" - } - }, - "artists": { - "header": { - "creationDate": "Data de creación", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Contrasinal actual", - "newEmail": "Novo enderezo de email", - "newPassword": "Novo contrasinal", - "password": "Contrasinal" - }, - "button": { - "password": "Cambiar contrasinal", - "delete": "Borrar", - "deleteAccountConfirm": "Eliminar a miña conta", - "deleteAccount": "Eliminar a miña conta…", - "disableSubsonic": "Desactivar o acceso", - "edit": "Editar", - "refresh": "Actualizar", - "remove": "Eliminar", - "removeApp": "Eliminar aplicación", - "revoke": "Repudiar", - "revokeAccess": "Retirar acceso", - "update": "Actualizar", - "updateSettings": "Actualizar axustes" - }, - "description": { - "changeEmail": "Cambiar o enderezo de email asociado á túa conta. Enviarémosche un email para confirmar o novo enderezo.", - "changePassword": { - "paragraph1": "Ao cambiar o contrasinal tamén cambias o contrasinal no API Subsonic si é que solicitaches un.", - "paragraph2": "Deberá actualizar o contrasinal nos seus clientes que utilicen este contrasinal." - }, - "contentFilters": "Os filtros de contido axúdanche a ocultar contido que non queres ver neste servizo.", - "authorizedApps": "Esta é unha lista das aplicacións que teñen acceso aos datos da túa conta.", - "yourApps": "Esta é a lista das aplicacións que ti creaches.", - "plugins": "Usa engadidos para extender Funkwhale e ter características adicionais.", - "deleteAccount": "Podes eliminar de xeito irreversible epermanente a túa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmación." - }, - "modal": { - "changePassword": { - "header": "Cambiar o contrasinal?", - "content": { - "warning": "Cambiar o contrasinal terá as seguintes consecuencias:", - "logout": "Pecharemos esta sesión e deberás acceder co novo", - "subsonic": "O teu contrasinal Subsonic será cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo" - } - }, - "deleteAccount": { - "header": "Desexas eliminar a túa conta?", - "content": { - "warning": "Esto non ten volta e eliminará permanentemente os teus datos dos nosos servidores. Pecharás sesión inmediatamente." - } - }, - "deleteApp": { - "header": "Eliminar a aplicación \"{ application }\"?", - "content": { - "warning": "Esto eliminará completamente a aplicación e tódolos tokens asociados." - } - }, - "revokeApp": { - "header": "Retirar acceso para a aplicación \"{ application }\"?", - "content": { - "warning": "Esto evitará que a aplicación acceda ao servizo no seu nome." - } - } - }, - "help": { - "noApps": "Se autorizas o acceso aos teus datos por aplicacións de terceiros, estas aplicacións aparecerán aquí.", - "changePassword": "Comproba que o contrasinal é correcto", - "noPersonalApps": "Engade unha para integrar Funkwhale con aplicacións de terceiros." - }, - "link": { - "managePlugins": "Xestionar plugins", - "newApp": "Rexistrar unha nova aplicación" - }, - "warning": { - "deleteAccount": "Vaise eliminar a túa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algún de estos servidores podería estar desconectado ou non poder levar a fin a operación." - }, - "message": { - "currentEmail": "O teu email actual é { email }.", - "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve" - } - }, - "Logout": { - "header": { - "confirm": "Tes certeza de querer pechar sesión?", - "unauthenticated": "Non iniciaches sesión" - }, - "link": { - "login": "Accede!" - }, - "title": "Pechar sesión", - "button": { - "logout": "Si, pechade a sesión!" - }, - "message": { - "loggedIn": "Accedeches como { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Volver ós axustes" - }, - "title": "Crear unha nova aplicación" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Marcando \"Lectura\" e \"Escritura\" para o ámbito superior implica dar acceso aos ámbitos inferiores.", - "read": { - "label": "Ler", - "description": "Acceso de só-lectura ao datos de usuario" - }, - "write": { - "label": "Escribir", - "description": "Acceso de só-escritura aos datos de usuario" - } - }, - "name": "Nome", - "redirectUri": "URI de redirección" - }, - "button": { - "create": "Crear aplicación", - "update": "Actualizar lista de reprodución" - }, - "help": { - "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirección se as aplicacións non son mostradas na web." - }, - "header": { - "failure": "Non podemos crear a súa conta" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear unha conta", - "resetPassword": "Restablece o contrasinal" - }, - "placeholder": { - "username": "Escribe o teu nome de usuaria ou email" - }, - "help": { - "approvalRequired": "Se te rexistraches recentemente, poderías ter que agardar un pouco para que se revise a conta ou verifique o teu email.", - "invalidCredentials": "Comproba que as credenciais son correctas e asegúrate de ter verificado o email." - }, - "button": { - "login": "Acceder" - }, - "label": { - "password": "Contrasinal", - "username": "Nome de usuaria ou email" - }, - "header": { - "loginFailure": "Non podemos darche acceso" - } - }, - "SignupForm": { - "button": { - "create": "Crear a miña conta" - }, - "label": { - "email": "Enderezo de email", - "password": "Contrasinal", - "username": "Nome de usuaria" - }, - "placeholder": { - "email": "Escribe o teu email", - "invitation": "Escribe o código de convite (dif. maiúsculas)", - "username": "Escribe o teu nome de usuaria" - }, - "header": { - "login": "Accede coa túa conta Funkwhale", - "signupFailure": "Non se pode crear a conta." - }, - "message": { - "registrationClosed": "O rexistro público non é posible en esta instancia. Precisas un código de convite para rexistrarte.", - "requiresReview": "O rexistro nesta instancia está aberto, pero revisado pola administración para ser aprobado.", - "awaitingReview": "A solicitude da conta enviouse correctamente. Serás notificada por email cando o equipo de administración revise a solicitude.", - "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder." - } - }, - "Plugin": { - "link": { - "documentation": "Documentación" - }, - "label": { - "pluginEnabled": "Activado", - "library": "Biblioteca" - }, - "header": { - "failure": "Fallo ao gardar o plugin" - }, - "description": { - "library": "A biblioteca onde importar os ficheiros." - }, - "button": { - "save": "Gardar", - "scan": "Escanear" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "hora de música | horas de música" + "description": { + "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", + "funkwhale": "Funkwhale é un proxecto xestionado pola comunidade que che permite escoitar e compartir música e audio nunha rede descentralizada e aberta.", + "publicContent": "Escoitar álbums públicos e listas compartidas neste servidor.", + "quota": "As usuarias deste servidor teñen { quota } de almacenaxe gratuíta para o seu contido!", + "signup": "Rexístrate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!" }, "header": { - "funkwhale": "Plataforma social para desfrutar e compartir música", "aboutPod": "Acerca desta instancia", - "publicContent": "Explorar contido público", "findApp": "Usa unha app", + "funkwhale": "Plataforma social para desfrutar e compartir música", + "publicContent": "Explorar contido público", "signup": "Rexistro" }, - "title": "Acerca de", + "help": { + "closedRegistrations": "O rexistro está pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazón inferior." + }, "link": { "findOtherPod": "Atopa outra instancia", "learnMore": "Saber máis" }, - "description": { - "funkwhale": "Funkwhale é un proxecto xestionado pola comunidade que che permite escoitar e compartir música e audio nunha rede descentralizada e aberta.", - "publicContent": "Escoitar álbums públicos e listas compartidas neste servidor.", - "signup": "Rexístrate para poder gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!", - "findApp": "Usa Funkwhale noutros dispositivos coas nosas apps.", - "quota": "As usuarias deste servidor teñen { quota } de almacenaxe gratuíta para o seu contido!" + "message": { + "greeting": "Ola {username}", + "loggedIn": "Xa iniciaches sesión!" }, "placeholder": { - "noDescription": "Non hai descrición." + "noDescription": "Non hai descrición" }, - "message": { - "loggedIn": "Xa iniciaches sesión!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } usuaria activa | { n } usuarias activas", - "hoursOfMusic": "{ n } hora de música | { n } horas de música" + "hoursOfMusic": "hora de música | horas de música" }, - "header": { - "aboutFunkwhale": "Acerca de Funkwhale", - "about": "Acerca de esta instancia Funkwhale", - "contact": "Contactar", - "login": "Acceder", - "newChannels": "Novas canles", - "newAlbums": "Álbums recén engadidos", - "signup": "Rexistro", - "statistics": "Estatísticas", - "links": "Ligazóns útiles", - "welcome": "Benvida a { podName }!" - }, - "link": { - "publicContent": { - "label": "Explorar contido público", - "description": "Escoitar álbums públicos e listas compartidas neste servidor" - }, - "userGuides": { - "description": "Descubre todo o que precisas saber sobre Funkwhale e as súas características", - "label": "Guías para a usuaria" - }, - "findOtherPod": "Atopar outra instancia", - "learnMore": "Saber máis", - "mobileApps": { - "label": "Apps móbiles", - "description": "Usa Funkwhale noutros dispositivos coas nosas apps" - }, - "rules": "Regras do servidor", - "viewMore": "Ver máis…", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale é libre e desenvolto por unha amigable comunidade de voluntarias.", - "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir música e audios nunha rede descentralizada e aberta." - }, - "signup": "Rexístrate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!", - "quota": "As usuarias deste servidor tamén teñen { quota } de almacenaxe gratuíta para o seu contido!" - }, - "title": "Inicio", - "placeholder": { - "noDescription": "Non hai descrición." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - } - }, - "Widget": { - "button": { - "more": "Mostrar máis" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - }, - "title": "Actualizada o { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodios" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - } - }, - "Widget": { - "button": { - "more": "Mostrar máis" - } - } - }, - "Player": { - "meta": { - "position": "{ index } de { length }" - }, - "header": { - "player": "Reprodutor e controis" - }, - "label": { - "clearQueue": "Baleirar a cola", - "expandQueue": "Despregar cola", - "addArtistContentFilter": "Ocultar contido deste artista…", - "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canción.", - "loopingSingle": "Bucle de unha canción. Pulse para cambiar a bucle de toda a cola.", - "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", - "audioPlayer": "Reprodutor", - "mute": "Acalar", - "nextTrack": "Seguinte canción", - "pause": "Pausar", - "play": "Reproducir", - "previousTrack": "Canción anterior", - "shuffleQueue": "Barallar a cola", - "unmute": "Dar voz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Engadir a cola actual", - "addToPlaylist": "Engadir a lista de reprodución…", - "episodeDetails": "Detalles do episodio", - "hideArtist": "Ocultar contido deste artista", - "discretePlay": "Reproducir", - "playAlbum": "Reproducir álbum", - "playArtist": "Reproducir artista", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "playPlaylist": "Reproducir lista", - "startRadio": "Reproducir cancións similares", - "playTrack": "Reproducir canción", - "playTracks": "Reproducir cancións", - "report": "Denunciar…", - "trackDetails": "Detalles da pista" - }, - "title": { - "more": "Máis…", - "unavailable": "Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reprodución…", - "addToQueue": "Engadir á cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver álbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar accións da pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Engadir a favoritas", - "addToPlaylist": "Engadir a lista de reprodución…", - "addToQueue": "Engadir á cola", - "episodeDetails": "Detalles do episodio", - "playNext": "Reproducir seguinte", - "playNow": "Reproducir agora", - "startRadio": "Reproducir radio", - "removeFromFavorites": "Eliminar das favoritas", - "trackDetails": "Detalles da pista", - "albumDetails": "Ver álbum", - "artistDetails": "Ver artista", - "channelDetails": "Ver canle", - "seriesDetails": "Ver serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Álbum", - "artist": "Artista", - "title": "Título" - } - } - }, - "Widget": { - "empty": { - "noResults": "Non se atopou nada" - }, - "button": { - "more": "Mostrar máis" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar accións da pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Axustar volume" - }, - "button": { - "mute": "Acalar", - "unmute": "Dar voz" - } - }, - "SearchBar": { - "label": { - "album": "Álbum", - "artist": "Artista", - "category": { - "federation": "Federación", - "podcasts": "Podcasts" - }, - "search": "Buscar contido", - "tag": "Etiqueta", - "track": "Canción" - }, - "link": { - "more": "Máis resultados 🡒", - "fediverse": "Buscar no fediverso", - "rss": "Subscribirse ao podcast vía RSS" - }, - "header": { - "noResults": "Non hai coincidencias" - }, - "placeholder": { - "search": "Buscar por artistas, álbums, pistas…" - }, - "empty": { - "noResults": "Lamentámolo, no hai resultados para a busca" - } - }, - "Search": { - "header": { - "albums": "Álbums", - "artists": "Artistas", - "search": "Buscar por algo de música" - }, - "placeholder": { - "search": "Artista, álbum, pista…" - }, - "empty": { - "noAlbums": "Ningún álbum coincide coa busca", - "noArtists": "Ningún artista coincide coa busca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografía da artista", - "category": "Categoría", - "image": "Imaxe da canle", - "description": "Descrición", - "username": "Identificador no Fediverso", - "language": "Idioma", - "name": "Nome", - "email": "Enderezo de email da dona", - "owner": "Nome da dona", - "podcast": "Podcasts", - "subcategory": "Subcategoría", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Un nome molón para a canle", - "username": "tremendonomedacanle" - }, - "header": { - "error": "Fallo ao gardar a canle" - }, - "help": { - "podcast": "Hospeda os teus episodios e ten a comunidade ao día.", - "discography": "Publica a túa música para crear a túa discografía con álbums e sinxelos.", - "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", - "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderás cambialo posteriormente." - }, - "loader": { - "loading": "Cargando" - }, - "legend": { - "purpose": "Para que se vai usar esta canle?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "unfollow": "Deixar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiar/pegar este código no HTML da túa web", - "width": "Deixar baleiro para un widget interactivo", - "anonymous": "Por favor, contacta coa administración e pídelle que actualicen o axuste correspondente." - }, - "label": { - "embed": "Código incrustado", - "height": "Alto do trebello", - "width": "Ancho do trebello" - }, - "header": { - "preview": "Vista previa" - }, - "warning": { - "anonymous": "A compartición non funcionará, porque este servidor non permite a usuarias anónimas acceder ao contido." - }, - "message": { - "copy": "Texto copiado ao portapapeis!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostrar máis" - }, - "help": { - "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostrar máis" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "addDescription": "Engade unha descrición…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista en | { n } pista en", - "albums": "{ n } álbum | { n } álbums" - }, - "title": "Artista", - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…", - "play": "Reproducir tódolos álbums" - }, - "modal": { - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } canción coicidente cos filtros combinados | { n } cancións coincidentes cos filtros combinados", - "builder": "Construtor", - "created": "Radio creada", - "updated": "Radio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "Accións", - "candidates": "Candidatas", - "config": "Configurar", - "exclude": "Excluír", - "name": "Nome do filtro" - } - } - }, - "button": { - "filter": "Engadir filtro", - "save": "Gardar" - }, - "label": { - "filter": "Engade filtros para personalizar a túa radio", - "description": "Descrición", - "public": "Mostrar públicamente", - "name": "Nome da Radio" - }, - "placeholder": { - "description": "A miña abraiante descrición", - "name": "A miña increíble radio" - }, - "title": "Constructor de Radio", - "option": { - "filter": "Escolla un filtro" - }, - "description": { - "builder": "Pode utilizar esta interface para construír a súa propia radio, que reproducirá cancións segundo o seu criterio." - } - }, - "Filter": { - "cancelButton": "Cancelar", - "excludeLabel": "Excluír", - "removeButton": "Eliminar", - "matchingTracksModalHeader": "Filtro coincidente da canción" - } - }, - "FileUpload": { - "tooltip": { - "network": "Fallou a rede mentras se subía o ficheiro", - "size": "Fallou a subida, mira que non sexa demasiado grande", - "extension": "Tipo de ficheiro non válido, asegúrate de que subes un ficheiro de audio. Extensións de ficheiros soportadas { extensions }", - "retry": "Reintentar", - "denied": "Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que non acadou o límite de cuota", - "timeout": "Caducou a subida, inténteo de novo" - }, - "table": { - "upload": { - "header": { - "actions": "Accións", - "filename": "Nome do ficheiro", - "size": "Tamaño", - "status": "Estado" - }, - "status": { - "pending": "Pendente", - "uploaded": "Subida", - "uploading": "Subindo…" - } - } - }, - "button": { - "cancel": "Cancelar", - "retry": "Voltar a intentar as subidas" - }, - "label": { - "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios", - "remainingSpace": "Almacenaxe restante", - "extensions": "Extensións soportadas: { extensions }" - }, - "header": { - "failure": "Fallo ó iniciar a importación", - "server": "Estado da importación", - "status": "Estado da importación", - "local": "Importa música desde a almacenaxe local" - }, - "link": { - "processing": "Procesando", - "uploading": "Subindo", - "picard": "Recomendámoslle utilizar Picard para ese propósito." - }, - "description": { - "import": "Resultados da importación:", - "previousImport": "Resultados da importación anterior:" - }, - "message": { - "local": { - "format": "Os ficheiros de música que estás a subir están en formato OGG, Flac, MP3 ou AIFF", - "tag": "Os ficheiros de música que está a subir están correctamente etiquetados.", - "message": "Vai subir música a súa biblioteca. Antes de seguir, asegúrese de que:", - "copyright": "Non estás a subir contido con copyright a unha biblioteca pública, de outro xeito poderías faltarlle a lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve resumen describindo os cambios." - }, - "button": { - "cancel": "Cancelar", - "clear": "Baleirar", - "reset": "Restablecer ao valor inicial", - "showUnreviewed": "Restrinxir a edicións non revisadas", - "showAll": "Mostrar todas as edicións", - "submit": "Enviar e aplicar a edición", - "new": "Enviar outra edición", - "suggest": "Enviar suxestión" - }, - "header": { - "failure": "Erro ó gardar o axuste", - "recentEdits": "Recentemente engadida", - "unreviewed": "Edicións recentes agardando revisión", - "success": "Enviouse correctamente a edición." - }, - "notApplicable": "N/A", - "empty": { - "suggestEdit": "Suxerir un cambio utilizando o formulario inferior." - }, - "label": { - "summary": "Resumen (optativo)" - }, - "message": { - "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serán revisados antes da súa aprobación." - } - }, - "Albums": { - "link": { - "addMusic": "Engade algo de música" - }, - "title": "Álbums", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Ollando álbums" - }, - "placeholder": { - "search": "Escribir título do álbum…" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "label": { - "search": "Buscar", - "tags": "Etiquetas" - }, - "button": { - "search": "Buscar" - } - }, - "Artists": { - "button": { - "upload": "Engade algo de música", - "search": "Buscar" - }, - "label": { - "search": "Nome do artista", - "excludeCompilation": "Excluír Artistas da Compilación", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando artistas" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "placeholder": { - "search": "Buscar…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Álbum", - "artist": "Artista", - "copyright": "Copyright", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Ano" - }, - "track": { - "bitrate": { - "label": "Taxa de bits" - }, - "codec": "Códec", - "downloads": "Descargas", - "duration": "Duración", - "size": "Tamaño" - } - }, - "header": { - "episode": "Detalles do episodio", - "library": "Bibliotecas relacionadas", - "playlists": "Listas relacionadas", - "release": "Detalles da publicación", - "track": "Detalles" - }, - "notApplicable": "N/A", - "description": { - "library": "Esta canción está presente nas seguintes bibliotecas:" - }, - "link": { - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Álbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderación" - }, - "header": { - "channels": "Canles", - "tracks": "Cancións" - } - }, - "ArtistDetail": { - "header": { - "album": "Álbums deste artista", - "track": "Novas pistas deste artista", - "library": "Bibliotecas da usuaria" - }, - "button": { - "more": "Cargando seguidoras…", - "filter": "Eliminar avatar" - }, - "link": { - "filter": "Ver ficheiros" - }, - "description": { - "library": "Este artista está presente nas seguintes bibliotecas:" - }, - "message": { - "filter": "Actualmente estás a ocultar contido relacionado con este artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Algo fallou no proceso de subida. Aquí embaixo atoparás máis información.", - "unknownError": { - "message": "Aconteceu un fallo descoñecido", - "label": "Fallo descoñecido" - }, - "invalidMetadata": { - "label": "Metadatos non válidos", - "message": "Os metadatos incluídos no ficheiro non son válidos ou faltan algúns campos requeridos." - } - }, - "button": { - "close": "Pechar" - }, - "table": { - "error": { - "debug": "Información de depuración", - "errorDetail": "Detalles do fallo", - "errorType": "Tipo de fallo", - "help": "Obter axuda" - } - }, - "header": { - "importDetail": "Estado da importación" - }, - "link": { - "support": "Abrir un fío de axuda (incluír información de depuración abaixo na túa mensaxe)", - "documentation": "Lea a documentación para este fallo" - }, - "message": { - "importDetail": "A subida está pendente e axiña será procesada polo servidor.", - "importSuccess": "A subida non se procesou correctamente polo servidor." - }, - "warning": { - "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoñible nunha das súas bibliotecas." - } - }, - "EditCard": { - "button": { - "approve": "Aprobar", - "delete": "Borrar", - "reject": "Rexeitar" - }, - "status": { - "approved": "Aprobada", - "applied": "Aprobada e aplicada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "modal": { - "delete": { - "header": "Eliminar esta suxestión?" - }, - "content": { - "warning": "Vaise eliminar completamente a suxestión, a acción é irreversible." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Novo valor", - "oldValue": "Valor anterior" - }, - "notApplicable": "N/A" - } - }, - "header": { - "modification": "Data de modificación" - }, - "link": { - "track": "Canción #{ id } - % { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando Podcast" - }, - "button": { - "cancel": "Cancelar", - "channel": "Crear Canle", - "search": "Buscar", - "subscribe": "Subscribir", - "feed": "Subscribirse a fonte" - }, - "empty": { - "noResults": "Sen resultados para a túa consulta" - }, - "label": { - "search": "Título do podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultados por páxina" - }, - "placeholder": { - "search": "Buscar…" - }, - "modal": { - "subscription": { - "header": "Subscrición" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "header": { - "browse": "Buscando radios", - "instance": "Radios da instancia", - "user": "Radios da usuaria" - }, - "button": { - "add": "Crea unha radio", - "create": "Crea a túa propia radio" - }, - "placeholder": { - "search": "Escribe un nome de radio…" - }, - "empty": { - "noResults": "Sen resultados para a túa busca" - }, - "title": "Radios", - "pagination": { - "results": "Resultados por páxina" - }, - "label": { - "search": "Buscar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminar…", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…" - }, - "modal": { - "delete": { - "header": "Eliminar este álbum?", - "content": { - "warning": "Vaise eliminar o álbum, asi como tódolos ficheiros asociados. Esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe este álbum no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }", - "musicbrainz": "Ver en MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Cancelar", - "delete": "Eliminar…", - "download": "Descargar", - "edit": "Editar", - "embed": "Incrustar", - "more": "Máis…", - "play": "Reproducir" - }, - "modal": { - "delete": { - "header": "Eliminar esta canción?", - "content": { - "warning": "Vaise eliminar a canción xunto cos datos e ficheiros relacionados, esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - }, - "link": { - "moderation": "Actualizar regra de moderación", - "discogs": "Buscar en Discogs", - "wikipedia": "Buscar en Wikipedia", - "django": "Ver na admin de Django", - "domain": "Ver en { domain }" - }, - "title": "Canción" - }, - "AlbumEdit": { - "header": { - "edit": "Editar este álbum", - "suggest": "Suxire unha edición para este álbum" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Editar este artista", - "suggest": "Non podemos cargar a canción" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "TrackEdit": { - "header": { - "edit": "Editar esta canción", - "suggest": "Non podemos cargar a canción" - }, - "message": { - "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodios", - "tracks": "Cancións", - "libraries": "Bibliotecas da usuaria" - }, - "description": { - "libraries": "Este álbum está presente nas seguintes bibliotecas:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "A importación non comezou" - } - }, - "Home": { - "title": "Biblioteca", - "header": { - "newChannels": "Novas canles", - "playlists": "Listas de reprodución", - "recentlyAdded": "Recentemente engadida", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Buscar…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorita | { n } favoritas" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "link": { - "library": "Buscar na biblioteca" - }, - "loader": { - "loading": "Cargando as favoritas…" - }, - "empty": { - "noFavorites": "Aínda non engadiches cancións as favoritas" - }, - "pagination": { - "results": "Resultados por páxina" - }, - "title": "As súas Favoritas" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Engadir a favoritas", - "remove": "Eliminar das favoritas" - }, - "label": { - "inFavorites": "Nas favoritas" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } ficheiro | { n } ficheiros", - "quota": "Almacenaxe dispoñible:" - }, - "button": { - "cancel": "Cancelar", - "close": "Pechar", - "finishLater": "Rematar máis tarde", - "next": "Seguinte paso", - "previous": "Paso anterior", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "Ficheiros a subir", - "processing": "Procesando subidas", - "publish": "Publicar audio", - "uploadDetails": "Detalles da subida" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "label": { - "album": "Álbum", - "series": "Series" - }, - "option": { - "none": "Nada" - } - }, - "LicenseSelect": { - "link": { - "license": "Acerca desta licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nada" - } - }, - "UploadForm": { - "help": { - "license": "Engade unha licenza ao subido para darlle liberdade ao teu público." - }, - "label": { - "openBrowser": "Buscar…", - "channel": "Canle" - }, - "message": { - "dragAndDrop": "Arrastra e solta aquí os ficheiros ou abre o navegador para subilos", - "pending": "Tes borradores pendentes de publicar." - }, - "button": { - "edit": "Editar", - "ignore": "Ignorar", - "remove": "Eliminar", - "resume": "Retomar", - "retry": "Volta a intentar" - }, - "header": { - "error": "Fallou a publicación" - }, - "status": { - "errored": "Con fallos", - "pending": "Pendente", - "uploading": "Subindo" - }, - "description": { - "extensions": "Extensións soportadas: { extensions }" - }, - "warning": { - "quota": "Non tes espazo suficiente para subir máis ficheiros. Contacta coa administración." - } - }, - "AlbumModal": { - "button": { - "cancel": "Cancelar", - "create": "Crear" - }, - "header": { - "newAlbum": "Novo álbum", - "newSeries": "Nova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descrición", - "position": "Paxinación", - "tags": "Etiquetas", - "title": "Título", - "image": "Imaxe da canción" - } - }, - "AlbumForm": { - "header": { - "error": "Fallou a creación" - }, - "label": { - "albumTitle": "Título" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Subscribir", - "unsubscribe": "Desubscribir" - }, - "help": { - "auth": "Tes que iniciar sesión para subscribirte a esta canle" - } - } + "title": "Acerca de" }, "AboutPod": { - "stat": { - "hoursOfMusic": "hora de música | horas de música", - "activeUsers": "usuaria activa | usuarias activas", - "albumsCount": "álbum | álbums", - "artistsCount": "artista | artistas", - "listeningsCount": "escoita | escoitas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista de permitidos", + "anonymousAccess": "Acceso anónimo", + "federation": "Federación", + "quota": "Cota de subida", + "registrations": "Rexistros", + "status": { + "closed": "Pechado", + "disabled": "Desactivado", + "enabled": "Activado", + "open": "Abrir" + }, + "version": "Versión de Funkwhale" + }, + "header": { + "about": "Acerca desta instancia", + "contact": "Contactar", + "features": "Características", + "rules": "Regras", + "statistics": "Estatísticas", + "terms": "Termos e política de privacidade" }, - "title": "Acerca de", "link": { "about": "Acerca desta instancia", "features": "Características", @@ -1438,360 +69,219 @@ "statistics": "Estatísticas", "terms": "Termos e política de privacidade" }, - "header": { - "about": "Acerca desta instancia", - "contact": "Contactar", - "features": "Características", - "rules": "Regras", - "statistics": "Estatísticas", - "terms": "Termos e política de privacidade" - }, - "feature": { - "allowList": "Lista de permitidos", - "anonymousAccess": "Acceso anónimo", - "status": { - "closed": "Pechado", - "disabled": "Desactivado", - "enabled": "Activado", - "open": "Abrir" - }, - "federation": "Federación", - "version": "Versión de Funkwhale", - "registrations": "Rexistros", - "quota": "Cota de subida" + "message": { + "contact": "Envíanos un email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/A", "placeholder": { - "noDescription": "Non hai descrición.", - "noRules": "Sen regras dispoñibles.", - "noTerms": "Non hai termos dispoñibles." + "noDescription": "Non hai descrición", + "noRules": "Sen regras dispoñibles", + "noTerms": "Non hai termos dispoñibles" + }, + "stat": { + "activeUsers": "usuaria activa | usuarias activas", + "albumsCount": "álbum | álbums", + "artistsCount": "artista | artistas", + "hoursOfMusic": "hora de música | horas de música", + "listeningsCount": "escoita | escoitas", + "tracksCount": "pista | pistas" + }, + "title": "Acerca de" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Este servidor executa Funkwhale, un proxecto comunitario que che permite escoitar e compartir música e audios nunha rede descentralizada e aberta.", + "paragraph2": "Funkwhale é libre e desenvolto por unha amigable comunidade de voluntarias." + }, + "quota": "As usuarias deste servidor tamén teñen { quota } de almacenaxe gratuíta para o seu contido!", + "signup": "Rexístrate agora para gardar os teus favoritos, crear listas, descubrir novo contido e moito máis!" + }, + "header": { + "about": "Acerca de esta instancia Funkwhale", + "aboutFunkwhale": "Acerca de Funkwhale", + "contact": "Contactar", + "links": "Ligazóns útiles", + "login": "Acceder", + "newAlbums": "Álbums recén engadidos", + "newChannels": "Novas canles", + "signup": "Rexistro", + "statistics": "Estatísticas", + "welcome": "Benvida a { podName }!" + }, + "help": { + "registrationsClosed": "O rexistro está pechado nesta instancia. Podes crear unha conta noutra instancia usando a ligazón inferior." + }, + "link": { + "findOtherPod": "Atopar outra instancia", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Saber máis", + "mobileApps": { + "description": "Usa Funkwhale noutros dispositivos coas nosas apps", + "label": "Apps móbiles" + }, + "publicContent": { + "description": "Escoitar álbums públicos e listas compartidas neste servidor.", + "label": "Explorar contido público" + }, + "rules": "Regras do servidor", + "userGuides": { + "description": "Descubre todo o que precisas saber sobre Funkwhale e as súas características", + "label": "Guías para a usuaria" + }, + "viewMore": "Ver máis…" + }, + "placeholder": { + "noDescription": "Non hai descrición" + }, + "stat": { + "activeUsers": "{ n } usuaria activa | { n } usuarias activas", + "hoursOfMusic": "{ n } hora de música | { n } horas de música" + }, + "title": "Inicio" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Non atopamos a páxina!" + }, + "link": { + "home": "Ir ó inicio" }, "message": { - "contact": "Envíanos un email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Lamentámolo, a páxina que solicitou non existe:" + }, + "title": "Páxina non atopada" + }, + "Queue": { + "button": { + "clear": "Baleirar", + "close": "Pechar", + "stopRadio": "Deter radio" + }, + "header": { + "failure": "Non se puido cargar a canción", + "noSources": "A canción non ten fontes dispoñibles.", + "radio": "Tes a radio acendida" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artista…", + "duration": "Duración", + "enterFullscreen": "Ir a modo pantalla completa", + "exitFullscreen": "Saír do modo pantalla completa", + "favorite": "Engadir a favoritas", + "next": "Seguinte canción", + "pause": "Pausar", + "play": "Reproducir", + "populatingRadio": "Obtendo datos da radio…", + "previous": "Canción anterior", + "queue": "Cola", + "remove": "Eliminar", + "restart": "Reiniciar canción", + "selectTrack": "Elexir canción", + "showCoverArt": "Mostrar Capa", + "showVisualizer": "Mostrar visor MoonDrop" + }, + "message": { + "automaticPlay": "A seguinte canción reproducirase automáticamente en poucos segundos…", + "radio": "As novas cancións engadiranse aquí automáticamente.", + "webglUnsupported": "O teu navegador non semella ter soporte para WebGL2." + }, + "meta": { + "end": "Fin", + "queuePosition": "Canción { index } de { length }", + "startTime": "00:00", + "unknownAlbum": "Álbum descoñecido", + "unknownArtist": "Artista descoñecido" + }, + "warning": { + "connectivity": "Podería ter problemas de conectividade." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados", - "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", - "go": "Ir", - "launch": "Lanzar", - "refresh": "Actualizar contido da tabla", - "select": "Seleccionar", - "selectAll": "Escolle todos os elementos", - "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", - "selectCurrentPage": "Seleccionar só páxina actual" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Buscar" + }, + "description": { + "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", + "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." + }, + "error": { + "fetchFailed": "Non se puido obter o obxeto" + }, + "header": { + "fetchFailed": "Fallou a obtención do obxecto" + }, + "label": { + "fediverse": { + "fieldLabel": "Obxecto no Fediverso", + "fieldPlaceholder": "{'@'}usuaria{'@'}exemplo.com", + "title": "Subscribirse a un podcast aloxado no Fediverso" }, - "message": { - "success": "A acción { action } foi lanzada correctamente sobre { n } elemento | A acción { action } foi lanzada correctamente sobre { n } elementos", - "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado" - }, - "label": { - "actions": "Accións", - "performAction": "Executar accións" - }, - "modal": { - "performAction": { - "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?", - "content": { - "warning": "Esto podería afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente é o que quere." - } - } - }, - "header": { - "error": "Fallo ó aplicar a acción" + "rss": { + "fieldLabel": "Localización da fonte RSS", + "fieldPlaceholder": "https://web.exemplo.com/rss.xml", + "title": "Subscribirse a fonte RSS do podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "docs": "Documentación", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesión", - "notifications": "Notificacións", - "profile": "Perfil", - "settings": "Axustes", - "signup": "Inscrición" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - } - }, - "UserModal": { - "link": { - "about": "Acerca de", - "chat": "Sala de conversa", - "forum": "Foro", - "support": "Axuda", - "git": "Incidencias", - "login": "Acceder", - "logout": "Pechar sesión", - "notifications": "Notificacións", - "profile": "Perfil", - "settings": "Axustes", - "signup": "Inscrición" - }, - "label": { - "shortcuts": "Atallos de teclado", - "language": "Idioma", - "theme": "Decorado" - }, - "header": { - "options": "Opcións" - }, - "button": { - "switchInstance": "Utilizar outra instancia" - } - }, - "DangerousButton": { - "button": { - "cancel": "Cancelar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "Queres confirmar esta acción?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Cancelar", - "edit": "Editar", - "less": "Mostrar menos", - "more": "Mostrar máis", - "update": "Actualizar descrición" - }, - "header": { - "failure": "Fallo ao actualizar a descrición" - }, - "empty": { - "noDescription": "Non hai descrición" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Baleirar" - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Pregar", - "expand": "Despregar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "Texto copiado ao portapapeis!" - } - }, - "LoginModal": { - "link": { - "login": "Acceder", - "signup": "Inscrición" - }, - "header": { - "unauthenticated": "Non está autenticado" - }, - "description": { - "noAccess": "Non tes acceso!" - } - }, - "ContentForm": { - "help": { - "markdown": "Está permitido o Markdown." - }, - "empty": { - "noContent": "Sen vista previa." - }, - "button": { - "preview": "Vista previa", - "write": "Escribir" - }, - "placeholder": { - "input": "Escribe aquí unhas palabras…" - } - }, - "EmptyState": { - "header": { - "noResults": "Non se atoparon resultados." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG ou JPG. As dimensión deben estar entre 1400x1400px e 3000x3000px. Tamaño máximo 5MB." - }, - "button": { - "remove": "Eliminar" - }, - "label": { - "upload": "Subir nova imaxe…" - }, - "loader": { - "uploading": "Subindo ficheiro…" - }, - "header": { - "failure": "Non se gardou o anexo" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostrar menos", - "more": "Mostrar máis" - } + "warning": { + "unsupported": "Aínda non está soportado este obxeto" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - } + "ShortcutsModal": { + "button": { + "close": "Pechar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } xa está en { 1 }." - }, - "button": { - "addDuplicate": "Engadir igualmente", - "addToPlaylist": "Engadir a esta lista de reprodución", - "addTrack": "Engadir canción", - "cancel": "Cancelar", - "edit": "Editar" - }, - "header": { - "addToPlaylist": "Engadir a lista de reprodución", - "available": "Listaxes dispoñibles", - "manage": "Xestionar listas de reprodución", - "noResults": "Sen resultados co teu filtro", - "addFailure": "Non podemos engadir a canción a lista de reprodución" - }, - "table": { - "edit": { - "header": { - "edit": "Editar", - "lastModification": "Última modificación", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "placeholder": { - "filterPlaylist": "Nome da lista de reprodución" - }, - "label": { - "filter": "Filtro" - }, - "empty": { - "noPlaylists": "Aínda non se creou unha lista de reprodución" - } + "header": { + "modal": "Atallos de teclado" }, - "Editor": { - "button": { - "addDuplicate": "Engadir igualmente", - "clear": "Baleirar lista reprodución", - "copy": "Copiar cancións da cola a lista de reprodución", - "insertFromQueue": "Introducir desde a cola ({ n } canción) | Introducir desde a cola ({ n } cancións)" + "shortcut": { + "audio": { + "clearQueue": "Limpar cola", + "decreaseVolume": "Baixar volume", + "expandQueue": "Despregar vista da cola/reprodutor", + "increaseVolume": "Aumentar volume", + "label": "Atallos do reprodutor de audio", + "playNext": "Reproducir canción seguinte", + "playPause": "Pausar/reproducir pista actual", + "playPrevious": "Reproducir canción anterior", + "seekBack30": "Buscar atrás 30s", + "seekBack5": "Adiantar 5s", + "seekForward30": "Adiantar 30s", + "seekForward5": "Adiantar 5s", + "shuffleQueue": "Barallar a cola", + "toggleFavorite": "Marca de favorito", + "toggleLoop": "Activar a repetición da cola", + "toggleMute": "Activar silencio" }, - "error": { - "sync": "Algo fallou ao gardar os cambios" - }, - "message": { - "sync": "Cambios sincronizados co servidor" - }, - "modal": { - "clearPlaylist": { - "header": "Queres baleirar a lista de reprodución \"{ playlist }\"?", - "content": { - "warning": "Esto eliminará todas as cancións da lista de reprodución e non hai volta." - } - } - }, - "help": { - "reorder": "Arrastra e solta filas para reordenar as cancións na lista" - }, - "header": { - "editor": "Editora da lista" - }, - "warning": { - "duplicate": "Algunhas cancións na cola xa están nesta lista de reprodución:" - }, - "loading": { - "sync": "Sincronizando cambios co servidor…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Engadir a lista de reprodución…" - } - }, - "Form": { - "header": { - "createPlaylist": "Crear nova lista de reprodución", - "createSuccess": "Lista creada", - "updateSuccess": "Lista de reprodución actualizada", - "createFailure": "Lista creada" - }, - "button": { - "create": "Crear lista reprodución", - "update": "Actualizar lista de reprodución" - }, - "placeholder": { - "name": "A miña fantástica lista" - }, - "label": { - "name": "Nome da lista", - "visibility": "Visibilidade da lista de reprodución" - } - }, - "Widget": { - "button": { - "create": "Crear lista de reprodución", - "more": "Mostrar máis" - }, - "placeholder": { - "noPlaylists": "Aínda non se creou unha lista de reprodución" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", - "libraryFollow": "{ username } segue a túa biblioteca \"{ library }\"", - "libraryPendingFollow": "{ username } quere seguir a túa biblioteca \"{ library }\"" - }, - "button": { - "approve": "Aprobar", - "markRead": "Marcar como lido", - "markUnread": "Marcar como non lido", - "reject": "Rexeitar" + "general": { + "focus": "Foco na caixa de busca", + "label": "Atallos xerais", + "show": "Mostrar atallos de teclado dispoñibles", + "unfocus": "Saír da barra de busca" } } }, "Sidebar": { + "header": { + "administration": "Administración", + "explore": "Explorar", + "library": "Biblioteca", + "main": "Menú principal", + "more": "Máis" + }, + "label": { + "add": "Engadir contido", + "administration": "Administración", + "edits": "Ficheiros pendentes", + "follows": "Peticións de seguimento pendentes", + "language": "Idioma", + "main": "Menú principal", + "play": "Reproducir esta canción", + "reports": "Denuncias pendentes de revisar", + "theme": "Decorado" + }, "link": { "about": "Acerca desta instancia", "albums": "Álbums", @@ -1809,44 +299,1985 @@ "radios": "Radios", "search": "Buscar", "settings": "Axustes", + "switchInstance": "Cambiar de instancia", "users": "Usuarias" - }, - "label": { - "add": "Engadir contido", - "administration": "Administración", - "language": "Idioma", - "main": "Menú principal", - "follows": "Peticións de seguimento pendentes", - "edits": "Ficheiros pendentes", - "play": "Reproducir esta canción", - "theme": "Decorado" - }, - "header": { - "administration": "Administración", - "explore": "Explorar", - "main": "Menú principal", - "more": "Máis", - "library": "Biblioteca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Gardar" + }, + "header": { + "error": "Erro ó gardar os axustes.", + "image": "Imaxe actual" + }, + "message": { + "success": "Axustes actualizados correctamente." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Engade un novo campo", + "edit": "Formulario de edición", + "preview": "Formulario vista previa" + }, + "help": { + "additionalFields": "Campos de formulario adicionais para mostrar. Só se mostran se se activa a validación manual do rexistro.", + "helpText": "Un texto optativo para mostrar ó inicio do formulario de rexistro." + }, + "label": { + "additionalField": "Campo adicional", + "additionalFields": "Campos adicionais", + "delete": "Borrar", + "helpText": "Texto de axuda", + "moveDown": "Baixar", + "moveUp": "Subir" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Accións", + "label": "Etiqueta do campo", + "required": "Requerido", + "type": "Tipo de campo" + }, + "required": { + "false": "Non", + "true": "Si" + }, + "type": { + "long": "Texto longo", + "short": "Texto curto" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Actualizada o { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." + } + }, + "ChannelForm": { + "header": { + "error": "Fallo ao gardar a canle." + }, + "help": { + "discography": "Publica a túa música para crear a túa discografía con álbums e sinxelos.", + "podcast": "Hospeda os teus episodios e ten a comunidade ao día.", + "podcastFields": "Utilizado para os campos itunes:email e itunes:name requeridos por certas plataformas como Spotify ou iTunes.", + "username": "Utilizado en URLs e para seguir esta canle no Fediverso. Non poderás cambialo posteriormente." + }, + "label": { + "category": "Categoría", + "description": "Descrición", + "discography": "Discografía da artista", + "email": "Enderezo de email da dona", + "image": "Imaxe da canle", + "language": "Idioma", + "name": "Nome", + "owner": "Nome da dona", + "podcast": "Podcasts", + "subcategory": "Subcategoría", + "tags": "Etiquetas", + "username": "Identificador no Fediverso" + }, + "legend": { + "purpose": "Para que se vai usar esta canle?" + }, + "loader": { + "loading": "Cargando" + }, + "placeholder": { + "name": "Un nome molón para a canle", + "username": "tremendonomedacanle" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodios" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostrar máis" + }, + "help": { + "subscribe": "Poderías ter que subscribirte á canle para ver o seu contido." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostrar máis" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Vista previa" + }, + "help": { + "anonymous": "Por favor, contacta coa administración e pídelle que actualicen o axuste correspondente.", + "embed": "Copiar/pegar este código no HTML da túa web", + "width": "Deixar baleiro para un widget interactivo" + }, + "label": { + "embed": "Código incrustado", + "height": "Alto do trebello", + "width": "Ancho do trebello" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "warning": { + "anonymous": "A compartición non funcionará, porque este servidor non permite a usuarias anónimas acceder ao contido." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "unfollow": "Deixar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir a cola actual", + "discretePlay": "Reproducir", + "episodeDetails": "Detalles do episodio", + "hideArtist": "Ocultar contido deste artista", + "playAlbum": "Reproducir álbum", + "playArtist": "Reproducir artista", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "playPlaylist": "Reproducir lista", + "playTrack": "Reproducir canción", + "playTracks": "Reproducir cancións", + "report": "Denunciar…", + "startRadio": "Reproducir cancións similares", + "trackDetails": "Detalles da pista" + }, + "title": { + "more": "Máis…", + "unavailable": "Esta canción non está dispoñible en ningunha biblioteca a que teña acceso" + } + }, + "Player": { + "header": { + "player": "Reprodutor e controis" + }, + "label": { + "addArtistContentFilter": "Ocultar contido deste artista…", + "audioPlayer": "Reprodutor", + "clearQueue": "Baleirar a cola", + "expandQueue": "Despregar cola", + "loopingDisabled": "Bucle desactivado. Pulse para cambiar ao bucle de unha soa canción.", + "loopingSingle": "Bucle de unha canción. Pulse para cambiar a bucle de toda a cola.", + "loopingWholeQueue": "Bucle de toda a cola. Pulse para desactivar o bucle.", + "mute": "Acalar", + "nextTrack": "Seguinte canción", + "pause": "Pausar", + "play": "Reproducir", + "previousTrack": "Canción anterior", + "shuffleQueue": "Barallar a cola", + "unmute": "Dar voz" + }, + "meta": { + "position": "{ index } de { length }", + "unknownAlbum": "Álbum descoñecido", + "unknownArtist": "Artista descoñecido" + } + }, + "PlayerControls": { + "labels": { + "next": "Canción seguinte", + "pause": "Pausar", + "play": "Reproducir", + "previous": "Canción anterior" + } + }, + "Search": { + "empty": { + "noAlbums": "Ningún álbum coincide coa busca", + "noArtists": "Ningún artista coincide coa busca" + }, + "header": { + "albums": "Álbums", + "artists": "Artistas", + "search": "Buscar por algo de música" + }, + "placeholder": { + "search": "Artista, álbum, pista…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Lamentámolo, no hai resultados para a busca" + }, + "header": { + "noResults": "Non hai coincidencias" + }, + "label": { + "album": "Álbum", + "artist": "Artista", + "category": { + "federation": "Federación", + "podcasts": "Podcasts" + }, + "search": "Buscar contido", + "tag": "Etiqueta", + "track": "Canción" + }, + "link": { + "fediverse": "Buscar no fediverso", + "more": "Máis resultados 🡒", + "rss": "Subscribirse ao podcast vía RSS" + }, + "placeholder": { + "search": "Buscar por artistas, álbums, pistas…" + } + }, + "VolumeControl": { + "button": { + "mute": "Acalar", + "unmute": "Dar voz" + }, + "label": { + "slider": "Axustar volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar accións da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir á cola", + "albumDetails": "Ver álbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar accións da pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Engadir a favoritas", + "addToPlaylist": "Engadir a lista de reprodución", + "addToQueue": "Engadir á cola", + "albumDetails": "Ver álbum", + "artistDetails": "Ver artista", + "channelDetails": "Ver canle", + "episodeDetails": "Detalles do episodio", + "playNext": "Reproducir seguinte", + "playNow": "Reproducir agora", + "removeFromFavorites": "Eliminar das favoritas", + "seriesDetails": "Ver serie", + "startRadio": "Reproducir radio", + "trackDetails": "Detalles da pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Álbum", + "artist": "Artista", + "title": "Título" + } + } + }, + "Widget": { + "button": { + "more": "Mostrar máis" + }, + "empty": { + "noResults": "Non se atopou nada" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Recrear token" + }, + "header": { + "appDetails": "Detalles da aplicación", + "appSecretWarning": "Gardar unha copia deste token nun lugar seguro.", + "editApp": "Editar aplicación" + }, + "help": { + "appDetails": "O ID da aplicación e a clave segreda son valores sensibles que debes tratar como contrasinais. Non os compartas con ninguén." + }, + "label": { + "accessToken": "Token de acceso", + "appId": "ID da aplicación", + "appSecret": "Chave segreda da aplicación" + }, + "link": { + "settings": "Volver ós axustes" + }, + "message": { + "appSecretWarning": "Non poderás volver a velo unha vez saias desta pantalla." + }, + "title": "Editar aplicación" + }, + "ApplicationForm": { + "button": { + "create": "Crear aplicación", + "update": "Actualizar lista de reprodución" + }, + "header": { + "failure": "Non podemos crear a súa conta" + }, + "help": { + "redirectUri": "Utilice \"urn:ietf:wg:oauth:2.0:oob\" como unha URI de redirección se as aplicacións non son mostradas na web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI de redirección", + "scopes": { + "description": "Marcando \"Lectura\" e \"Escritura\" para o ámbito superior implica dar acceso aos ámbitos inferiores.", + "label": "Ámbitos", + "read": { + "description": "Acceso de só-lectura ao datos de usuario", + "label": "Ler" + }, + "write": { + "description": "Acceso de só-escritura aos datos de usuario", + "label": "Escribir" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Volver ós axustes" + }, + "title": "Crear unha nova aplicación" + }, + "Authorize": { + "button": { + "authorize": "Autorizar { app }" + }, + "header": { + "access": "{ app } quere acceder a túa conta Funkwhale", + "allScopes": "Acceso completo", + "authorize": "Autorizar app de terceiros", + "authorizeFailure": "Erro ó autorizar a aplicación", + "fetchFailure": "Erro ó obter datos da aplicación", + "readOnly": "Só-lectura", + "writeOnly": "Só-escritura" + }, + "help": { + "copyCode": "Vaiseche mostrar un código para copiar-pegar na aplicación", + "pasteCode": "Copiar-pegar o seguinte código na aplicación:", + "redirect": "Vas ser redirixida a { 0 }" + }, + "message": { + "unknownPermissions": "Esta aplicación tamén está solicitando os seguintes permisos descoñecidos:" + }, + "title": "Permitir aplicación" + }, + "LoginForm": { + "button": { + "login": "Acceder" + }, + "header": { + "loginFailure": "Non podemos darche acceso" + }, + "help": { + "approvalRequired": "Se te rexistraches recentemente, poderías ter que agardar un pouco para que se revise a conta ou verifique o teu enderezo de correo.", + "invalidCredentials": "Comproba que as credenciais son correctas e asegúrate de ter verificado o email." + }, + "label": { + "password": "Contrasinal", + "username": "Nome de usuaria ou email" + }, + "link": { + "createAccount": "Crear unha conta", + "resetPassword": "Restablece o contrasinal" + }, + "message": { + "redirect": "Ímoste redirixir a {domain} para autenticarte" + }, + "placeholder": { + "username": "Escribe o teu nome de usuaria ou email" + } + }, + "Logout": { + "button": { + "logout": "Si, pechade a sesión!" + }, + "header": { + "confirm": "Tes certeza de querer pechar sesión?", + "unauthenticated": "Non iniciaches sesión" + }, + "link": { + "login": "Accede!" + }, + "message": { + "loggedIn": "Accedeches como { username }" + }, + "title": "Pechar sesión" + }, + "Plugin": { + "button": { + "save": "Gardar", + "scan": "Escanear" + }, + "description": { + "library": "A biblioteca onde importar os ficheiros." + }, + "header": { + "failure": "Fallo ao gardar o plugin" + }, + "label": { + "library": "Biblioteca", + "pluginEnabled": "Activado" + }, + "link": { + "documentation": "Documentación" + } + }, + "Settings": { + "button": { + "delete": "Borrar", + "deleteAccount": "Eliminar a miña conta…", + "deleteAccountConfirm": "Eliminar a miña conta", + "disableSubsonic": "Desactivar o acceso", + "edit": "Editar", + "password": "Cambiar contrasinal", + "refresh": "Actualizar", + "remove": "Eliminar", + "removeApp": "Eliminar aplicación", + "revoke": "Repudiar", + "revokeAccess": "Retirar acceso", + "update": "Actualizar", + "updateSettings": "Actualizar axustes" + }, + "description": { + "authorizedApps": "Esta é unha lista das aplicacións que teñen acceso aos datos da túa conta.", + "changeEmail": "Cambiar o enderezo de email asociado á túa conta. Enviarémosche un email para confirmar o novo enderezo.", + "changePassword": { + "paragraph1": "Ao cambiar o contrasinal tamén cambias o contrasinal no API Subsonic si é que solicitaches un.", + "paragraph2": "Deberá actualizar o contrasinal nos seus clientes que utilicen este contrasinal." + }, + "contentFilters": "Os filtros de contido axúdanche a ocultar contido que non queres ver neste servizo.", + "deleteAccount": "Podes eliminar de xeito irreversible epermanente a túa conta e todos os datos asociados utilizando o formulario inferior. Pedirase confirmación.", + "plugins": "Usa engadidos para extender Funkwhale e ter características adicionais.", + "yourApps": "Esta é a lista das aplicacións que ti creaches." + }, + "header": { + "accountFailure": "Non podemos eliminar a túa conta", + "accountSettings": "Axustes da conta", + "authorizedApps": "Apps autorizadas", + "avatar": "Avatar", + "avatarFailure": "Non se gardou o avatar", + "changeEmail": "Cambiar o meu enderezo de email", + "changePassword": "Cambiar o contrasinal", + "contentFilters": "Filtros de contido", + "deleteAccount": "Eliminar a miña conta", + "emailFailure": "Non podemos cambiar o teu enderezo de email", + "hiddenArtists": "Artistas ocultos", + "noApps": "Non ten ningunha regra activada para esta conta.", + "noPersonalApps": "Non tes ningunha aplicación rexistrada.", + "passwordFailure": "Non se pode cambiar o contrasinal", + "plugins": "Plugins", + "settingsUpdated": "Axustes actualizados", + "updateFailure": "Non se actualizaron os axustes", + "yourApps": "As súas notificacións" + }, + "help": { + "changePassword": "Comproba que o contrasinal é correcto", + "noApps": "Se autorizas o acceso aos teus datos por aplicacións de terceiros, estas aplicacións aparecerán aquí.", + "noPersonalApps": "Engade unha para integrar Funkwhale con aplicacións de terceiros." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Contrasinal actual", + "newEmail": "Novo enderezo de email", + "newPassword": "Novo contrasinal", + "password": "Contrasinal" + }, + "link": { + "managePlugins": "Xestionar plugins", + "newApp": "Rexistrar unha nova aplicación" + }, + "message": { + "confirmDelete": "Enviouse a solicitude de borrado, o contido da conta eliminarase en breve", + "currentEmail": "O teu email actual é {email}" + }, + "modal": { + "changePassword": { + "content": { + "logout": "Pecharemos esta sesión e deberás acceder co novo", + "subsonic": "O teu contrasinal Subsonic será cambiado por un novo, aleatorio, desconectando todos os dispositivos que utilicen o contrasinal antigo", + "warning": "Cambiar o contrasinal terá as seguintes consecuencias" + }, + "header": "Cambiar o contrasinal?" + }, + "deleteAccount": { + "content": { + "warning": "Esto non ten volta e eliminará permanentemente os teus datos dos nosos servidores. Pecharás sesión inmediatamente." + }, + "header": "Desexas eliminar a túa conta?" + }, + "deleteApp": { + "content": { + "warning": "Esto eliminará completamente a aplicación e tódolos tokens asociados." + }, + "header": "Eliminar a aplicación \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Esto evitará que a aplicación acceda ao servizo no seu nome." + }, + "header": "Retirar acceso para a aplicación \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creación", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "Aplicación", + "permissions": "Permisos" + } + }, + "yourApps": { + "header": { + "application": "Aplicación", + "creationDate": "Data de creación", + "scopes": "Ámbitos" + } + } + }, + "title": "Axustes da conta", + "warning": { + "deleteAccount": "Vaise eliminar a túa conta dos nosos servidores dentro duns minutos. Contactaremos con outros servidores que puidesen ter unha copia dos teus datos para que os borren. Por favor, ten en conta que algún de estos servidores podería estar desconectado ou non poder levar a fin a operación." + } + }, + "SignupForm": { + "button": { + "create": "Crear a miña conta" + }, + "header": { + "login": "Accede coa túa conta Funkwhale", + "signupFailure": "Non se pode crear a conta." + }, + "label": { + "email": "Enderezo de email", + "invitation": "Código de convite", + "password": "Contrasinal", + "username": "Nome de usuaria" + }, + "message": { + "accountCreated": "Creouse correctamente a conta. Verifica o teu email antes de intentar acceder.", + "awaitingReview": "A solicitude da conta enviouse correctamente. Serás notificada por email cando o equipo de administración revise a solicitude.", + "registrationClosed": "O rexistro público non é posible en esta instancia. Precisas un código de convite para rexistrarte.", + "requiresReview": "O rexistro nesta instancia está aberto, pero revisado pola administración para ser aprobado." + }, + "placeholder": { + "email": "Escribe o teu email", + "invitation": "Escribe o código de convite (dif. maiúsculas)", + "username": "Escribe o teu nome de usuaria" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar o acceso", + "confirmNewPassword": "Solicitar un contrasinal", + "disable": "Desactivar o acceso Subsonic", + "newPassword": "Solicitar un novo contrasinal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale é compatible con outros reprodutores de música compatibles coa API Subsonic.", + "paragraph2": "Pode utilizalos para desfrutar da súa lista de reprodución e música en modo fora de liña, no seu dispositivo móbil ou tableta, por exemplo.", + "paragraph3": "Porén, o acceso a Funkwhale desde estos outros clientes precisa dun contrasinal diferente que podes establecer aquí embaixo." + } + }, + "header": { + "error": "Fallo", + "subsonic": "Contrasinal API Subsonic" + }, + "label": { + "subsonicField": "O teu contrasinal API Subsonic" + }, + "link": { + "apps": "Aprende como utilizar Funkwhale desde outras apps" + }, + "message": { + "accessDisabled": "Acceso desactivado", + "passwordUpdated": "Contrasinal actualizado", + "unavailable": "O API Subsonic non está dispoñible en esta instancia Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Desactivará o acceso a API Subsonic desde a conta." + }, + "header": "Desactivar o acceso a API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Esto pechará sesión nos dispositivos existentes que utilicen o contrasinal actual." + }, + "header": "Solicitar un nonvo contrasinal para o API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Fallou a creación" + }, + "label": { + "albumTitle": "Título" + } + }, + "AlbumModal": { + "button": { + "cancel": "Cancelar", + "create": "Crear" + }, + "header": { + "newAlbum": "Novo álbum", + "newSeries": "Nova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Álbum", + "series": "Series" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + }, + "option": { + "none": "Nada" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "Acerca desta licenza" + }, + "option": { + "none": "Nada" + } + }, + "SubscribeButton": { + "help": { + "auth": "Tes que iniciar sesión para subscribirte a esta canle" + }, + "title": { + "subscribe": "Subscribir", + "unsubscribe": "Desubscribir" + } + }, + "UploadForm": { + "button": { + "edit": "Editar", + "ignore": "Ignorar", + "remove": "Eliminar", + "resume": "Retomar", + "retry": "Volta a intentar" + }, + "description": { + "extensions": "Extensións soportadas: { extensions }" + }, + "header": { + "error": "Fallou a publicación" + }, + "help": { + "license": "Engade unha licenza ao subido para darlle liberdade ao teu público." + }, + "label": { + "channel": "Canle", + "openBrowser": "Buscar…" + }, + "message": { + "dragAndDrop": "Arrastra e solta aquí os ficheiros ou abre o navegador para subilos", + "pending": "Tes borradores pendentes de publicar." + }, + "status": { + "errored": "Con fallos", + "pending": "Pendente", + "uploading": "Subindo" + }, + "warning": { + "quota": "Non tes espazo suficiente para subir máis ficheiros. Contacta coa administración." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descrición", + "image": "Imaxe da canción", + "position": "Paxinación", + "tags": "Etiquetas", + "title": "Título" + } + }, + "UploadModal": { + "button": { + "cancel": "Cancelar", + "close": "Pechar", + "finishLater": "Rematar máis tarde", + "next": "Seguinte paso", + "previous": "Paso anterior", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Procesando subidas", + "publish": "Publicar audio", + "uploadDetails": "Detalles da subida", + "uploadFiles": "Ficheiros a subir" + }, + "meta": { + "files": "{ n } ficheiro | { n } ficheiros", + "quota": "Almacenaxe dispoñible: {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{ n } elemento seleccionado | Todos os { n } elementos seleccionados", + "go": "Ir", + "launch": "Lanzar", + "refresh": "Actualizar contido da tabla", + "select": "Seleccionar", + "selectAll": "Escolle todos os elementos", + "selectCurrentPage": "Seleccionar só páxina actual", + "selectElement": "Elixe un elemento | Elixe todos os { n } elementos", + "selected": "{ n } de { total } seleccionado | { n } de { total } seleccionados" + }, + "header": { + "error": "Fallo ó aplicar a acción" + }, + "label": { + "actions": "Accións", + "performAction": "Executar accións" + }, + "message": { + "needsRefresh": "Actualizouse o contido, preme en actualizar para ver o contido actualizado", + "success": "A acción { action } foi lanzada correctamente sobre { n } elemento | A acción { action } foi lanzada correctamente sobre { n } elementos" + }, + "modal": { + "performAction": { + "content": { + "warning": "Esto podería afectar a moitos elementos ou ter consecuencias irreversibles, por favor comprobe si realmente é o que quere." + }, + "header": "Quere executar { action } sobre { n } elemento? | Quere executar { action } sobre { n } elementos?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Eliminar" + }, + "header": { + "failure": "Non se gardou o anexo" + }, + "help": { + "upload": "PNG ou JPG. As dimensión deben estar entre 1400x1400px e 3000x3000px. Tamaño máximo 5MB." + }, + "label": { + "upload": "Subir nova imaxe…" + }, + "loader": { + "uploading": "Subindo ficheiro…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Pregar", + "expand": "Despregar" + } + }, + "ContentForm": { + "button": { + "preview": "Vista previa", + "write": "Escribir" + }, + "empty": { + "noContent": "Nada na vista previa" + }, + "help": { + "markdown": "Está permitido o Markdown" + }, + "placeholder": { + "input": "Escribe aquí unhas palabras…" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "Texto copiado ao portapapeis!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Cancelar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "Queres confirmar esta acción?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Non se atoparon resultados." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostrar menos", + "more": "Mostrar máis" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Baleirar" + }, + "label": { + "search": "Buscar" + }, + "placeholder": { + "search": "Buscar…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non tes acceso" + }, + "header": { + "unauthenticated": "Non está autenticado" + }, + "link": { + "login": "Acceder", + "signup": "Inscrición" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "less": "Mostrar menos", + "more": "Mostrar máis", + "update": "Actualizar descrición" + }, + "empty": { + "noDescription": "Non hai descrición" + }, + "header": { + "failure": "Fallo ao actualizar a descrición" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Cambiar aparencia" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "Documentación", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesión", + "notifications": "Notificacións", + "profile": "Perfil", + "settings": "Axustes", + "signup": "Inscrición", + "support": "Axuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar outra instancia" + }, + "header": { + "options": "Opcións" + }, + "label": { + "language": "Idioma", + "shortcuts": "Atallos de teclado", + "theme": "Cambiar aparencia" + }, + "link": { + "about": "Acerca de", + "chat": "Sala de conversa", + "docs": "Documentación", + "forum": "Foro", + "git": "Incidencias", + "login": "Acceder", + "logout": "Pechar sesión", + "notifications": "Notificacións", + "profile": "Perfil", + "settings": "Axustes", + "signup": "Inscrición", + "support": "Axuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Aínda non engadiches cancións as favoritas" + }, + "header": { + "favorites": "{ n } favorita | { n } favoritas" + }, + "link": { + "library": "Buscar na biblioteca" + }, + "loader": { + "loading": "Cargando as favoritas…" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "title": "As súas Favoritas" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Engadir a favoritas", + "remove": "Eliminar das favoritas" + }, + "label": { + "inFavorites": "Nas favoritas" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Pechar", + "reload": "Pechar e recargar páxina" + }, + "description": { + "failure": "Algo fallou ao actualizar os datos:", + "pending": "A solicitude de actualización non se realizou a tempo no noso servidor. Procesarase máis tarde.", + "skipped": "O servidor remoto respondeu, pero o tipo de resposta non está soportado por Funkwhale.", + "success": "Actualizáronse os datos desde o servidor remoto." + }, + "header": { + "failure": "Actualizar", + "pending": "Actualizar info da instancia", + "refresh": "Actualizando obxeto desde servidor remoto…", + "saveFailure": "Erro ó gardar os axustes", + "skipped": "Omiteuse a actualización", + "success": "Actualización correcta" + }, + "loader": { + "awaitingResult": "Cargando as favoritas…", + "fetchRequest": "Solicitando a obtención…" + }, + "table": { + "error": { + "label": { + "detail": "Detalles do fallo", + "type": "Tipo de fallo" + }, + "value": { + "connectionError": "Non se puido conectar ao servidor remoto", + "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", + "httpStatus": "O servidor remoto respondeu con HTTP { status }", + "invalidAttributesError": "Os datos devoltos polo servidor remoto teñen valores non válidos ou faltan atributos", + "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non válidos", + "timeoutError": "O servidor remoto non respondeu rápido abondo", + "unknownError": "Fallo descoñecido" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostrar máis" + }, + "empty": { + "noMatch": "Sen biblioteca coincidente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "Texto copiado ao portapapeis!" + }, + "title": "Mostrar/ocultar contrasinal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Engade unha descrición…" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Álbum" + }, + "AlbumDetail": { + "description": { + "libraries": "Este álbum está presente nas seguintes bibliotecas:" + }, + "header": { + "episodes": "Episodios", + "libraries": "Bibliotecas da usuaria", + "tracks": "Cancións" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "musicbrainz": "Ver en MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o álbum, asi como tódolos ficheiros asociados. Esta acción non ten volta." + }, + "header": "Eliminar este álbum?" + }, + "embed": { + "header": "Inclúe este álbum no teu sitio web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Editar este álbum", + "suggest": "Suxire unha edición para este álbum" + }, + "message": { + "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." + } + }, + "Albums": { + "button": { + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Ollando álbums" + }, + "label": { + "search": "Buscar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Engade algo de música" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Escribir título do álbum…" + }, + "title": "Álbums" + }, + "ArtistBase": { + "button": { + "cancel": "Cancelar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…", + "play": "Reproducir tódolos álbums" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "musicbrainz": "Ver en MusicBrainz", + "wikipedia": "Buscar en Wikipedia" + }, + "meta": { + "albums": "{ n } álbum | { n } álbums", + "tracks": "{ n } pista en | { n } pista en" + }, + "modal": { + "embed": { + "header": "Inclúe o traballo desta autora no teu sitio web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Eliminar avatar", + "more": "Cargando seguidoras…" + }, + "description": { + "library": "Este artista está presente nas seguintes bibliotecas:" + }, + "header": { + "album": "Álbums deste artista", + "library": "Bibliotecas da usuaria", + "track": "Novas pistas deste artista" + }, + "link": { + "filter": "Ver ficheiros" + }, + "message": { + "filter": "Actualmente estás a ocultar contido relacionado con este artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Editar este artista", + "suggest": "Non podemos cargar a canción" + }, + "message": { + "remote": "Este obxeto está xestionado en outro servidor, non podes editalo." + } + }, + "Artists": { + "button": { + "search": "Buscar", + "upload": "Engade algo de música" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Buscando artistas" + }, + "label": { + "excludeCompilation": "Excluír Artistas da Compilación", + "search": "Nome do artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Buscar…" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Aprobar", + "delete": "Borrar", + "reject": "Rexeitar" + }, + "header": { + "modification": "Data de modificación" + }, + "link": { + "track": "Canción #{ id } - % { name }" + }, + "modal": { + "content": { + "warning": "Vaise eliminar completamente a suxestión, a acción é irreversible." + }, + "delete": { + "header": "Eliminar esta suxestión?" + } + }, + "status": { + "applied": "Aprobada e aplicada", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Novo valor", + "oldValue": "Valor anterior" + }, + "notApplicable": "N/A" + } + } + }, + "EditForm": { + "button": { + "cancel": "Cancelar", + "clear": "Baleirar", + "new": "Enviar outra edición", + "reset": "Restablecer ao valor inicial", + "showAll": "Mostrar todas as edicións", + "showUnreviewed": "Restrinxir a edicións non revisadas", + "submit": "Enviar e aplicar a edición", + "suggest": "Enviar suxestión" + }, + "empty": { + "suggestEdit": "Suxire un cambio utilizando o formulario inferior" + }, + "header": { + "failure": "Erro ó gardar o axuste", + "recentEdits": "Edicións recentes", + "success": "Enviouse correctamente a edición.", + "unreviewed": "Edicións recentes agardando revisión" + }, + "label": { + "summary": "Resumen (optativo)" + }, + "message": { + "noPermission": "Non tes permiso para editar este obxeto, pero podes suxerir cambios. Unha vez enviados serán revisados antes da súa aprobación." + }, + "notApplicable": "N/A", + "placeholder": { + "summary": "Un breve resumen describindo os cambios." + } + }, + "FileUpload": { + "button": { + "cancel": "Cancelar", + "retry": "Voltar a intentar as subidas" + }, + "description": { + "import": "Estado da importación", + "previousImport": "Resultados da importación anterior:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Fallo ó iniciar a importación", + "local": "Importa música desde a almacenaxe local", + "server": "Estado da importación", + "status": "Estado da importación" + }, + "label": { + "extensions": "Extensións soportadas: { extensions }", + "remainingSpace": "Almacenaxe restante", + "uploadWidget": "Preme para escoller os ficheiros a subir ou arrastra e solta ficheiros ou directorios" + }, + "link": { + "picard": "Recomendámoslle utilizar Picard para ese propósito.", + "processing": "Procesando", + "uploading": "Subindo" + }, + "message": { + "listener": "Esta páxina solicítache que confirmes que queres saír - non se gardarán os datos escritos.", + "local": { + "copyright": "Non estás a subir contido con copyright a unha biblioteca pública, de outro xeito poderías faltarlle a lei", + "format": "Os ficheiros de música que estás a subir están en formato OGG, Flac, MP3 ou AIFF", + "message": "Vai subir música a súa biblioteca. Antes de seguir, asegúrese de que:", + "tag": "Os ficheiros de música que está a subir están correctamente etiquetados." + } + }, + "table": { + "upload": { + "header": { + "actions": "Accións", + "filename": "Nome do ficheiro", + "size": "Tamaño", + "status": "Estado" + }, + "progress": "{percent}%", + "status": { + "pending": "Pendente", + "uploaded": "Subida", + "uploading": "Subindo…" + } + } + }, + "tooltip": { + "denied": "Subida denegada, asegúrese de que o ficheiro non é demasiado grande e que non acadou o límite de cuota", + "extension": "Tipo de ficheiro non válido, asegúrate de que subes un ficheiro de audio. Extensións de ficheiros soportadas { extensions }", + "network": "Fallou a rede mentras se subía o ficheiro", + "retry": "Reintentar", + "size": "Fallou a subida, mira que non sexa demasiado grande", + "timeout": "Caducou a subida, inténteo de novo" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "A importación non comezou" + } + }, + "Home": { + "header": { + "newChannels": "Novas canles", + "playlists": "Listas de reprodución", + "recentlyAdded": "Últimas engadidas", + "recentlyFavorited": "Últimas favorecidas", + "recentlyListened": "Últimas escoitadas" + }, + "title": "Biblioteca" + }, + "ImportStatusModal": { + "button": { + "close": "Pechar" + }, + "error": { + "importFailure": "Algo fallou no proceso de subida. Aquí embaixo atoparás máis información.", + "invalidMetadata": { + "label": "Metadatos non válidos", + "message": "Os metadatos incluídos no ficheiro non son válidos ou faltan algúns campos requeridos." + }, + "unknownError": { + "label": "Fallo descoñecido", + "message": "Aconteceu un fallo descoñecido" + } + }, + "header": { + "importDetail": "Estado da importación" + }, + "link": { + "documentation": "Lea a documentación para este fallo", + "support": "Abrir un fío de axuda (incluír información de depuración abaixo na túa mensaxe)" + }, + "message": { + "importDetail": "A subida está pendente e axiña será procesada polo servidor.", + "importSuccess": "A subida non se procesou correctamente polo servidor." + }, + "table": { + "error": { + "debug": "Información de depuración", + "errorDetail": "Detalles do fallo", + "errorType": "Tipo de fallo", + "help": "Obter axuda" + } + }, + "warning": { + "importSkipped": "A subida non se realizou porque xa ten unha semellante dispoñible nunha das súas bibliotecas." + } + }, + "Podcasts": { + "button": { + "cancel": "Cancelar", + "channel": "Crear Canle", + "feed": "Subscribirse a fonte", + "search": "Buscar", + "subscribe": "Subscribir" + }, + "empty": { + "noResults": "Sen resultados para a túa consulta" + }, + "header": { + "browse": "Buscando Podcast" + }, + "label": { + "search": "Título do podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "Subscrición" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Buscar…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crea unha radio", + "create": "Crea a túa propia radio", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa busca" + }, + "header": { + "browse": "Buscando radios", + "instance": "Radios da instancia", + "user": "Radios da usuaria" + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Resultados por páxina" + }, + "placeholder": { + "search": "Escribe un nome de radio…" + }, + "title": "Radios" + }, + "TagDetail": { + "header": { + "channels": "Canles", + "tracks": "Cancións" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "moderation": "Actualizar regra de moderación" + } + }, + "TagSelector": { + "placeholder": { + "search": "Buscar…" + } + }, + "TrackBase": { + "button": { + "cancel": "Cancelar", + "delete": "Eliminar", + "download": "Descargar", + "edit": "Editar", + "embed": "Incrustar", + "more": "Máis…", + "play": "Reproducir" + }, + "link": { + "discogs": "Buscar en Discogs", + "django": "Ver na admin de Django", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "wikipedia": "Buscar en Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canción xunto cos datos e ficheiros relacionados, esta acción non ten volta." + }, + "header": "Eliminar esta canción?" + }, + "embed": { + "header": "Inclúe esta canción no teu sitio web" + } + }, + "subtitle": { + "with-uploader": "Subida por {0} o {1}", + "without-uploader": "Subida o {0}" + }, + "title": "Canción" + }, + "TrackDetail": { + "description": { + "library": "Esta canción está presente nas seguintes bibliotecas:" + }, + "header": { + "episode": "Detalles do episodio", + "library": "Bibliotecas relacionadas", + "playlists": "Listas relacionadas", + "release": "Detalles da publicación", + "track": "Detalles" + }, + "link": { + "musicbrainz": "Ver en MusicBrainz" + }, + "notApplicable": "N/A", + "table": { + "release": { + "album": "Álbum", + "artist": "Artista", + "copyright": "Copyright", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Ano" + }, + "track": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "codec": "Códec", + "downloads": "Descargas", + "duration": "Duración", + "size": "Tamaño" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Editar esta canción", + "suggest": "Non podemos cargar a canción" + }, + "message": { + "remote": "Este obxecto está xestionado noutro servidor, non podes editalo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Engadir filtro", + "save": "Gardar" + }, + "description": { + "builder": "Pode utilizar esta interface para construír a súa propia radio, que reproducirá cancións segundo o seu criterio." + }, + "header": { + "builder": "Construtor", + "created": "Radio creada", + "matches": "{ n } canción coicidente cos filtros combinados | { n } cancións coincidentes cos filtros combinados", + "updated": "Radio actualizada" + }, + "label": { + "description": "Descrición", + "filter": "Engade filtros para personalizar a túa radio", + "name": "Nome da Radio", + "public": "Mostrar públicamente" + }, + "option": { + "filter": "Escolla un filtro" + }, + "placeholder": { + "description": "A miña abraiante descrición", + "name": "A miña increíble radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data de acceso", - "account": "Conta", - "creationDate": "Data de creación", - "domain": "Dominio", - "importStatus": "Estado da importación", - "library": "Biblioteca", - "name": "Nome", - "size": "Tamaño", - "visibility": "Visibilidade" + "actions": "Accións", + "candidates": "Candidatas", + "config": "Configurar", + "exclude": "Excluír", + "name": "Nome do filtro" } } }, + "title": "Constructor de Radio" + }, + "Filter": { + "cancelButton": "Cancelar", + "excludeLabel": "Excluír", + "matchingTracks": "0 cancións cumpren co filtro | {n} canción cumpre co filtro | {n} cancións cumpren co filtro", + "matchingTracksModalHeader": "Filtro coincidente da canción", + "removeButton": "Eliminar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoría", + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderación" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome, conta…" + }, + "table": { + "channel": { + "header": { + "account": "Conta", + "albums": "Álbums", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Os álbums seleccionados vanse eliminar, así como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acción non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local", + "moderation": "Abrir na interface de moderación" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, álbume…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "releaseDate": "Data da última vista", + "tracks": "Cancións" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar o artista seleccionado, así como as subidas asociadas, cancións, álbums, favoritos e historial de escoita. Esta acción non ten volta." + } + }, + "label": { + "category": "Categoría", + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bio…" + }, + "table": { + "artist": { + "header": { + "albums": "Álbums", + "creationDate": "Data de creación", + "domain": "Dominio", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Ficheiros pendentes", + "rejected": "Rexeitado" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, dominio…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vaise eliminar a biblioteca seleccionada, así como as subidas asociadas e seguimentos. Esta acción é irreversible." + } + }, + "label": { + "search": "Buscar", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Todos" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, nome de usuaria, bio…" + }, + "table": { + "library": { + "header": { + "account": "Conta", + "creationDate": "Data de creación", + "domain": "Dominio", + "followers": "Seguidoras", + "name": "Nome", + "uploads": "Subidas", + "visibility": "Visibilidade" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o está. Esta acción non ten volta." + } + }, + "label": { + "search": "Buscar" + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome" + }, + "table": { + "tag": { + "header": { + "albums": "Álbums", + "artists": "Artistas", + "creationDate": "Data de creación", + "name": "Nome", + "tracks": "Cancións" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "As cancións seleccionadas vanse eliminar, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." + } + }, + "label": { + "search": "Buscar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por dominio, título, artista, álbum, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Álbum", + "artist": "Artista", + "creationDate": "Data de creación", + "domain": "Dominio", + "license": "Licenza", + "title": "Título" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Borrar", + "warning": "Esta acción non é reversible." + } + }, + "label": { + "search": "Buscar", + "status": "Estado", + "visibility": "Visibilidade" + }, + "link": { + "local": "Local" + }, + "notApplicable": "N/A", "option": { "all": "Todos", "failed": "Fallou", @@ -1862,396 +2293,68 @@ }, "label": "Ordenando" }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Esta acción non é reversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar", - "status": "Estado", - "visibility": "Visibilidade" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por dominio, nome de usuaria, bio…" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data de acceso", "account": "Conta", "creationDate": "Data de creación", "domain": "Dominio", - "followers": "Seguidoras", + "importStatus": "Estado da importación", + "library": "Biblioteca", "name": "Nome", - "uploads": "Subidas", + "size": "Tamaño", "visibility": "Visibilidade" } } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar a biblioteca seleccionada, así como as subidas asociadas e seguimentos. Esta acción é irreversible." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Buscar", - "visibility": "Visibilidade" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Álbum", - "artist": "Artista", - "creationDate": "Data de creación", - "domain": "Dominio", - "license": "Licenza", - "title": "Título" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "As cancións seleccionadas vanse eliminar, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, título, artista, álbum, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Álbums", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "label": { - "category": "Categoría", - "search": "Buscar" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vaise eliminar o artista seleccionado, así como as subidas asociadas, cancións, álbums, favoritos e historial de escoita. Esta acción non ten volta." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Álbums", - "artists": "Artistas", - "creationDate": "Data de creación", - "name": "Nome", - "tracks": "Cancións" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Vas eliminar a etiqueta e desligala do contido existente, se o está. Esta acción non ten volta." - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por nome" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Ficheiros pendentes", - "rejected": "Rexeitado" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por título, artista, dominio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "label": { - "status": "Estado" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Título", - "releaseDate": "Data da última vista", - "tracks": "Cancións" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "action": { - "delete": { - "label": "Borrar", - "warning": "Os álbums seleccionados vanse eliminar, así como as pistas asociadas, subidas, favoritos e historial de escoita. Esta acción non ten volta." - } - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderación" - }, - "notApplicable": "N/A", - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por título, artista, álbume…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Conta", - "domain": "Dominio", - "local": "Local", - "owner": "Dona", - "type": "Tipo" - }, - "status": { - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "resolutionDate": "Data da resolución", - "resolved": "Resolto", - "status": "Estado", - "unresolved": "Non resolto" - }, - "report": { - "category": "Categoría", - "creationDate": "Data de creación", - "submittedBy": "Enviado por" + "AccountsTable": { + "action": { + "purge": { + "label": "Limpar" } }, - "header": { - "actions": "Accións", - "notes": "Notas internas", - "message": "Mensaxe", - "reportedObject": "Elemento denunciado" - }, - "button": { - "confirmDelete": "Borrar", - "delete": "Eliminar obxeto denunciado", - "resolve": "Resolver", - "unresolve": "Non resolto" - }, - "modal": { - "delete": { - "header": "Eliminar obxeto denunciado?", - "content": { - "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminación é irreversible." - } - } - }, - "notApplicable": "N/A", - "link": { - "moderation": "Actualizar regra de moderación", - "report": "Denunciar { id }", - "publicPage": "Ver páxina pública" - }, - "warning": { - "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." - } - }, - "UserRequestCard": { - "header": { - "actions": "Accións", - "notes": "Notas internas", - "signup": "Mensaxe" - }, - "button": { - "approve": "Aprobar", - "reject": "Rexeitar" - }, - "table": { - "status": { - "approved": "Aprobada", - "assignedTo": "Asignada a", - "internalNotes": "Notas internas", - "pending": "Pendente", - "refused": "Rexeitada", - "status": "Estado" - }, - "request": { - "creationDate": "Data de creación", - "submittedBy": "Enviado por" - } - }, - "notApplicable": "N/A", - "link": { - "request": "Solicitar { id }" - }, - "message": { - "signup": "Esta usuaria quere rexistrarse na túa instancia." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Engadir nova regra de moderación", - "editRule": "Editar regra de moderación", - "failure": "Erro ó crear a regra" - }, "label": { - "blockAll": "Bloquear todo", - "policyDisabled": "Desactivado", - "policyEnabled": "Activado", - "silenceActivity": "Acalar actividade", - "silenceNotifications": "Acalar notificacións", - "customizeRule": "Ou personalice a súa regra", - "policyReason": "Razón", - "rejectMedia": "Rexeitar medios" + "search": "Buscar" }, - "tooltip": { - "blockAll": "Bloquear todo desta conta ou dominio. Esto evitará calquera interacción coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", - "rejectMedia": "Non baixar ningún ficheiro de medios (audio, portada, avatar da conta…) desta conta ou dominio. Esto eliminará tamén o contido existente.", - "summary": "Explica por que aplicas esta política. Dependendo da configuración da túa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado públicamente para que as usuarias entendan cales son as regras de moderación que se aplican.", - "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", - "silenceNotifications": "Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras.", - "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condición sen eliminala completamente." + "link": { + "local": "Conta local" }, - "button": { - "cancel": "Cancelar", - "create": "Crear", - "delete": "Borrar", - "confirm": "Borrar regra de moderación", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" }, - "modal": { - "delete": { - "header": "Eliminar esta regra de moderación?", - "content": { - "warning": "Esta acción non é reversible." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Engadir nota" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { - "summary": "Describe qué accións se tomaron, ou calquera outra actualización…" + "search": "Buscar por dominio, nome de usuaria, bio…" }, - "header": { - "failure": "Fallo ao enviar a nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Primeira visualización", + "lastSeen": "Última vista", + "moderationRule": "Baixo regra de moderación", + "name": "Nome", + "uploads": "Subidas" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2369,16 @@ "label": "Eliminar da lista-permitir" } }, + "empty": { + "noPods": "Non se atoparon outras instancias" + }, + "label": { + "inList": "Está presente na lista de permitidos", + "search": "Buscar" + }, + "link": { + "list": "Este dominio está presente na túa lista-permitido" + }, "option": { "all": "Todos", "no": "Non", @@ -2279,76 +2392,32 @@ }, "label": "Ordenando" }, - "table": { - "domain": { - "header": { - "firstSeen": "Primeira visualización", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "moderationRule": "Baixo regra de moderación", - "users": "Usuarias" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "Está presente na lista de permitidos", - "search": "Buscar" - }, - "empty": { - "noPods": "Non se atoparon outras instancias" + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" }, "placeholder": { "search": "Buscar por nome…" }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - }, - "link": { - "list": "Este dominio está presente na túa lista-permitido" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Primeira visualización", - "lastSeen": "Última vista", - "name": "Nome", "moderationRule": "Baixo regra de moderación", - "uploads": "Subidas" + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "users": "Usuarias" }, "moderationRule": "Si" } - }, - "link": { - "local": "Conta local" - }, - "action": { - "purge": { - "label": "Limpar" - } - }, - "label": { - "search": "Buscar" - }, - "placeholder": { - "search": "Buscar por dominio, nome de usuaria, bio…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Editar" + }, + "header": { + "rule": "Regra" + }, "label": { "blockAll": "Bloquear todo", "muteActivity": "Acalar actividade", @@ -2356,15 +2425,49 @@ "reason": "Razón", "rejectMedia": "Rexeitar medios" }, - "button": { - "edit": "Editar" - }, "status": { "enabled": "Activado", "paused": "Pausada" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar regra de moderación", + "create": "Crear", + "delete": "Borrar", + "update": "Actualizar" }, "header": { - "rule": "Regra" + "addRule": "Engadir nova regra de moderación", + "editRule": "Editar regra de moderación", + "failure": "Erro ó crear a regra" + }, + "label": { + "blockAll": "Bloquear todo", + "customizeRule": "Ou personalice a súa regra", + "policyDisabled": "Desactivado", + "policyEnabled": "Activado", + "policyReason": "Razón", + "rejectMedia": "Rexeitar medios", + "silenceActivity": "Acalar actividade", + "silenceNotifications": "Acalar notificacións" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acción non é reversible" + }, + "header": "Eliminar esta regra de moderación?" + } + }, + "tooltip": { + "blockAll": "Bloquear todo desta conta ou dominio. Isto evitará calquera interacción coa entidade, e eliminará o contido relacionado (subidas, bibliotecas, seguimentos, etc.)", + "isActive": "Utiliza este axuste para activar/desactivar temporalmente a condición sen eliminala completamente.", + "rejectMedia": "Non baixar ningún ficheiro de medios (audio, portada, avatar da conta…) desta conta ou dominio. Esto eliminará tamén o contido existente.", + "silenceActivity": "Ocultar contido de conta ou dominio, excepto de seguidoras.", + "silenceNotifications": "Evitar que o dominio ou conta mostre notificacións, excepto das seguidoras.", + "summary": "Explica por que aplicas esta política. Dependendo da configuración da túa instancia esto axudarache a lembrar por que actuaches sobre esta conta ou dominio, e pode ser mostrado públicamente para que as usuarias entendan cales son as regras de moderación que se aplican." } }, "InstancePolicyModal": { @@ -2374,161 +2477,130 @@ }, "modal": { "manage": { - "header": "Xestionar as regras de moderación para { obj }", "content": { "warning": "Esta entidade está suxeita a regras específicas de moderación" - } + }, + "header": "Xestionar as regras de moderación para { obj }" } } }, + "NoteForm": { + "button": { + "add": "Engadir nota" + }, + "header": { + "failure": "Fallo ao enviar a nota" + }, + "placeholder": { + "summary": "Describe qué accións se tomaron, ou calquera outra actualización…" + } + }, "NotesThread": { "button": { "delete": "Borrar" }, "modal": { "delete": { - "header": "Eliminar esta nota?", "content": { "warning": "Vai eliminar a nota. Esta acción non ten volta." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Conta", - "albums": "Álbums", - "creationDate": "Data de creación", - "domain": "Dominio", - "name": "Nome", - "tracks": "Cancións" + }, + "header": "Eliminar esta nota?" } } }, - "option": { - "all": "Todos" - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" + "ReportCard": { + "button": { + "confirmDelete": "Borrar", + "delete": "Eliminar obxeto denunciado", + "resolve": "Resolver", + "unresolve": "Non resolto" }, - "label": "Ordenando" + "header": { + "actions": "Accións", + "message": "Mensaxe", + "notes": "Notas internas", + "reportedObject": "Elemento denunciado" + }, + "link": { + "moderation": "Actualizar regra de moderación", + "publicPage": "Ver páxina pública", + "report": "Denunciar { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Esto vai eliminar o elemento asociado a esta denuncia e marcala como resolta. Esta eliminación é irreversible." + }, + "header": "Eliminar obxeto denunciado?" + } + }, + "notApplicable": "N/A", + "table": { + "object": { + "account": "Conta", + "domain": "Dominio", + "local": "Local", + "owner": "Dona", + "type": "Tipo" + }, + "report": { + "category": "Categoría", + "creationDate": "Data de creación", + "submittedBy": "Enviado por" + }, + "status": { + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "resolutionDate": "Data da resolución", + "resolved": "Resolto", + "status": "Estado", + "unresolved": "Non resolto" + } + }, + "warning": { + "objectDeleted": "Eliminouse o elemento asociado a esta denuncia." + } }, - "label": { - "category": "Categoría", - "search": "Buscar" - }, - "link": { - "local": "Local", - "moderation": "Abrir na interface de moderación" - }, - "placeholder": { - "search": "Buscar por dominio, nome, conta…" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" + "UserRequestCard": { + "button": { + "approve": "Aprobar", + "reject": "Rexeitar" + }, + "header": { + "actions": "Accións", + "notes": "Notas internas", + "signup": "Mensaxe" + }, + "link": { + "request": "Solicitar { id }" + }, + "message": { + "signup": "Esta usuaria quere rexistrarse na túa instancia." + }, + "notApplicable": "N/A", + "table": { + "request": { + "creationDate": "Data de creación", + "submittedBy": "Enviado por" + }, + "status": { + "approved": "Aprobada", + "assignedTo": "Asignada a", + "internalNotes": "Notas internas", + "pending": "Pendente", + "refused": "Rexeitada", + "resolutionDate": "Data da resolución", + "status": "Estado" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estado da conta", - "email": "Email", - "lastActivity": "Última actividade", - "permissions": "Permisos", - "signup": "Rexistrarse", - "status": "Estado", - "username": "Nome de usuaria" - }, - "accountStatus": { - "active": "Activo", - "inactive": "Non activo" - }, - "status": { - "admin": "Admin", - "regular": "usuaria normal", - "staff": "Persoal do equipo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Dirección da orde" - }, - "label": "Ordenando" - }, - "permission": { - "library": "Biblioteca", - "moderation": "Moderación", - "settings": "Axustes" - }, - "notApplicable": "N/A", - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, nome…" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Todos", - "expired": "Caducado/utilizado", - "open": "Abrir" - }, - "table": { - "invitation": { - "header": { - "code": "Código", - "creationDate": "Data de creación", - "expirationDate": "Data de caducidade", - "owner": "Dona", - "status": "Estado" - } - } - }, - "action": { - "delete": "Borrar" - }, - "label": { - "expired": "Caducado", - "unused": "Non utilizado", - "search": "Buscar", - "status": "Estado", - "used": "Utilizado" - }, - "ordering": { - "label": "Ordenando" - }, - "placeholder": { - "search": "Buscar por nome de usuaria, correo-e, código…" - }, - "pagination": { - "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Baleirar", "new": "Obter un novo convite" }, - "table": { - "invitation": { - "header": { - "code": "Código", - "link": "Compartir ligazón" - } - } - }, "header": { "failure": "Erro ó crear o convite" }, @@ -2537,523 +2609,59 @@ }, "placeholder": { "invitation": "Deixar baleiro para un código aleatorio" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Accións", - "label": "Etiqueta do campo", - "type": "Tipo de campo", - "required": "Requerido" - }, - "type": { - "long": "Texto longo", - "short": "Texto curto" - }, - "required": { - "false": "Non", - "true": "Si" - } - } - }, - "button": { - "add": "Engade un novo campo", - "edit": "Formulario de edición", - "preview": "Formulario vista previa" - }, - "label": { - "additionalField": "Campo adicional", - "additionalFields": "Campos adicionais", - "delete": "Borrar", - "helpText": "Texto de axuda", - "moveDown": "Baixar", - "moveUp": "Subir" - }, - "help": { - "additionalFields": "Campos de formulario adicionais para mostrar. Só se mostran se se activa a validación manual do rexistro.", - "helpText": "Un texto optativo para mostrar ó inicio do formulario de rexistro." - } - }, - "SettingsGroup": { - "header": { - "image": "Imaxe actual", - "error": "Erro ó gardar os axustes" - }, - "button": { - "save": "Gardar" - }, - "message": { - "success": "Axustes actualizados correctamente." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Todos" - }, - "label": { - "category": "Categoría" - } - }, - "ReportModal": { - "header": { - "disabled": "Desactiváronse as denuncias anónimas, conéctate para enviar unha denuncia.", - "modal": "Queres denunciar este elemento?", - "submissionFailure": "Erro ó enviar a denuncia" - }, - "button": { - "cancel": "Cancelar", - "submit": "Enviar denuncia" - }, - "label": { - "email": "Email", - "forwardToDomain": "Reenviar a { domain}", - "message": "Mensaxe" - }, - "description": { - "forwardToDomain": "Reenviar unha copia anónima da túa denuncia ó servidor que hospeda este elemento.", - "message": "Utiliza este campo para proporcionar contexto adicional á moderación para xestionar a denuncia.", - "modal": "Utiliza este formulario para enviar unha denuncia ó equipo de moderación.", - "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia." - }, - "message": { - "submissionSuccess": "Denuncia enviada correctamente, grazas" - } - }, - "FilterModal": { - "button": { - "cancel": "Cancelar", - "hide": "Agochar contido" - }, - "message": { - "success": "Engadeuse o filtro de contido" - }, - "header": { - "modal": "Queres agochar o contido da artista \"{ radio }\"?", - "failure": "Erro ó crear o filtro" - }, - "warning": { - "createFilter": { - "listItem2": "No widget \"Adicións recentes\"", - "listItem3": "En listaxes de artistas e álbums", - "listItem1": "En favoritas e historial de escoita de outras usuarias", - "listItem4": "Nas suxestións de radios", - "listIntro": "Non volverás a ver as pistas, álbums e actividade relacionados con este artista:" - } - }, - "help": { - "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da túa conta." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Algo fallou ao actualizar os datos:", - "success": "Actualizáronse os datos desde o servidor remoto.", - "pending": "A solicitude de actualización non se realizou a tempo no noso servidor. Procesarase máis tarde.", - "skipped": "O servidor remoto respondeu, pero o tipo de resposta non está soportado por Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Houbo un fallo HTTP ao contactar co servidor remoto", - "invalidAttributesError": "Os datos devoltos polo servidor remoto teñen valores non válidos ou faltan atributos", - "connectionError": "Non se puido conectar ao servidor remoto", - "httpStatus": "O servidor remoto respondeu con HTTP { status }", - "timeoutError": "O servidor remoto non respondeu rápido abondo", - "invalidJsonError": "O servidor remoto devolveu un datos JSON ou JSON-LD non válidos", - "unknownError": "Fallo descoñecido" - }, - "label": { - "detail": "Detalles do fallo", - "type": "Tipo de fallo" - } - } - }, - "button": { - "close": "Pechar", - "reload": "Pechar e recargar páxina" - }, - "header": { - "saveFailure": "Erro ó gardar os axustes", - "failure": "Actualizar", - "pending": "Actualizar info da instancia", - "success": "Actualización correcta", - "skipped": "Omiteuse a actualización", - "refresh": "Actualizando obxeto desde servidor remoto…" - }, - "loader": { - "fetchRequest": "Solicitando a obtención…", - "awaitingResult": "Cargando as favoritas…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Sen biblioteca coincidente." - }, - "button": { - "showMore": "Mostrar máis" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Atallos do reprodutor de audio", - "clearQueue": "Limpar cola", - "decreaseVolume": "Baixar volume", - "expandQueue": "Despregar vista da cola/reprodutor", - "increaseVolume": "Aumentar volume", - "playPause": "Pausar/reproducir pista actual", - "playNext": "Reproducir canción seguinte", - "playPrevious": "Reproducir canción anterior", - "seekBack30": "Buscar atrás 30s", - "seekBack5": "Adiantar 5s", - "seekForward30": "Adiantar 30s", - "seekForward5": "Adiantar 5s", - "shuffleQueue": "Barallar a cola", - "toggleFavorite": "Marca de favorito", - "toggleMute": "Activar silencio", - "toggleLoop": "Activar a repetición da cola" - }, - "general": { - "focus": "Foco na caixa de busca", - "label": "Atallos xerais", - "show": "Mostrar atallos de teclado dispoñibles", - "unfocus": "Saír da barra de busca" - } - }, - "button": { - "close": "Pechar" - }, - "header": { - "modal": "Atallos de teclado" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Elixe a túa instancia", - "failure": "Non se puido conectar ao URL proporcionado", - "suggestions": "Opcións suxeridas" - }, - "label": { - "url": "URL da instancia" - }, - "help": { - "notFunkwhaleServer": "O enderezo proporcionado non é un servidor Funkwhale", - "serverDown": "Igoal non está a funcionar o servidor", - "selectPod": "Para continuar, elixe a instancia de Funkwhale á que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opcións suxeridas." - }, - "message": { - "newUrl": "Estás utilizando a instancia Funkwhale en { url }" - } - }, - "Queue": { - "button": { - "clear": "Baleirar", - "close": "Pechar", - "stopRadio": "Deter radio" - }, - "label": { - "duration": "Duración", - "addArtistContentFilter": "Ocultar contido deste artista…", - "next": "Seguinte canción", - "pause": "Pausar", - "play": "Reproducir", - "previous": "Canción anterior", - "queue": "Cola", - "remove": "Eliminar", - "restart": "Reiniciar canción" - }, - "message": { - "radio": "As novas cancións engadiranse aquí automáticamente.", - "automaticPlay": "A seguinte canción reproducirase automáticamente en poucos segundos…" - }, - "header": { - "failure": "Non se puido cargar a canción", - "radio": "Tes a radio acendida" - }, - "meta": { - "queuePosition": "Canción { index } de { length }" - }, - "warning": { - "connectivity": "Podería ter problemas de conectividade." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/ocultar contrasinal", - "message": { - "copy": "Texto copiado ao portapapeis!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Editar" - } - }, - "Button": { - "startRadio": "Reproducir radio", - "stopRadio": "Deter radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Fallou a obtención do obxecto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Buscar" - }, - "label": { - "fediverse": { - "fieldLabel": "Obxecto no Fediverso", - "title": "Subscribirse a un podcast aloxado no Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://web.exemplo.com/rss.xml", - "fieldLabel": "Localización da fonte RSS", - "title": "Subscribirse a fonte RSS do podcast" - } - }, - "warning": { - "unsupported": "Aínda non está soportado este obxeto" - }, - "error": { - "fetchFailed": "Non se puido obter o obxeto" - }, - "description": { - "fediverse": "Utiliza este formulario para subscribirte a unha canle aloxada noutro lugar do Fediverso.", - "rss": "Usa este formulario para subscribirte a unha fonte RSS co seu URL." - } - }, - "PageNotFound": { - "link": { - "home": "Ir ó inicio" - }, - "title": "Páxina non atopada", - "header": { - "pageNotFound": "Non atopamos a páxina!" - }, - "message": { - "pageNotFound": "Lamentámolo, a páxina que solicitou non existe:" - } - }, - "vui": { - "Pagination": { - "next": "Páxina seguinte", - "label": "Paxinación", - "previous": "Páxina anterior" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta máis | Mostrar { n } etiquetas máis" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodios", - "listenings": "{ n } escoita | { n } escoitas", - "subscribers": "{ n } subscritora | { n } subscritoras", - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "channelEpisodes": "Tódolos episodios", - "mirrored": "Réplica de { domain }", - "moderation": "Actualizar regra de moderación", - "channelOverview": "Vista xeral", - "channelTracks": "Cancións", - "domainView": "Ver en { domain }" - }, - "header": { - "artistChannel": "Canle da artista", - "podcastChannel": "Canle de podcast" - }, - "button": { - "cancel": "Cancelar", - "confirm": "Borrar", - "delete": "Eliminar…", - "edit": "Editar…", - "embed": "Incrustar", - "play": "Reproducir", - "updateChannel": "Actualizar canle", - "upload": "Subir" - }, - "title": "Canle", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiar-pegar este URL na túa app de podcasting:" - }, - "header": "Subscribirse vía RSS" - }, - "fediverse": { - "content": { - "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" - }, - "header": "Subscribirse no Fediverso" - }, - "funkwhale": { - "header": "Subscribirse en Funkwhale" - }, - "header": "Subscribirse a esta canle" }, - "delete": { - "header": "Eliminar esta Canle?", - "content": { - "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acción non ten volta." - } - }, - "embed": { - "header": "Inclúe esta canción no teu sitio web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Engadir nova", - "erroredUploads": "Ver subidas con fallos", - "skippedUploads": "Ver subidas omitidas" - }, - "header": { - "albums": "Álbums", - "latestEpisodes": "Últimos episodios", - "latestTracks": "Últimas cancións", - "series": "Series", - "uploadsFailure": "Non se publicaron algunha das subidas", - "uploadsProcessing": "Estánse a procesar as subidas", - "uploadsSuccess": "Publicáronse correctamente as subidas" - }, - "meta": { - "progress": "Subidas procesadas:" - }, - "message": { - "processing": "Funkwhale está procesando as subidas e estarán dispoñibles moi pronto." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Engadir nova" - }, - "button": { - "cancel": "Cancelar", - "subscribe": "Subscribir" - }, - "placeholder": { - "search": "Filtrar por nome…" - }, - "title": "Subscricións a canles", - "modal": { - "subscription": { - "header": "Subscrición" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "details": "Detalles da biblioteca" - }, - "label": { - "size": "Tamaño total dos ficheiros de esta biblioteca" - }, - "button": { - "upload": "Subir" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } utilizado de { max } permitido", - "errored": "Ficheiros con fallos", - "pending": "Ficheiros pendentes", - "skipped": "Ficheiros saltados" - }, - "header": { - "currentUsage": "Uso actual" - }, - "loading": { - "currentUsage": "Cargando datos de uso…" - }, - "button": { - "purge": "Limpar" - }, - "modal": { - "purgeErrored": { - "header": "Eliminar ficheiros con fallos?", - "content": { - "description": "Elimina as cancións subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a súa cuota." - } - }, - "purgePending": { - "header": "Eliminar ficheiros pendentes?", - "content": { - "description": "Elimina completamente as cancións subidas pero aínda non procesadas, engadindo o espazo correspondente a súa cuota." - } - }, - "purgeSkipped": { - "header": "Eliminar ficheiros saltados?", - "content": { - "description": "Elimina as cancións subidas saltadas durante o proceso de importación, engadindo o espazo correspondente a súa cuota." - } - } - }, - "link": { - "viewFiles": "Ver ficheiros" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Álbum", - "artist": "Artista", - "duration": "Duración", - "importStatus": "Estado da importación", - "size": "Tamaño", - "title": "Título", - "uploadDate": "Data de subida" + "code": "Código", + "link": "Compartir ligazón" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Borrar" + }, + "label": { + "expired": "Caducado", + "search": "Buscar", + "status": "Estado", + "unused": "Non utilizado", + "used": "Utilizado" }, "option": { - "status": { - "all": "Todos", - "draft": "Borrador", - "failed": "Fallou", - "finished": "Rematado", - "pending": "Pendente", - "skipped": "Saltado" - } + "all": "Todos", + "expired": "Caducado/utilizado", + "open": "Abrir" }, + "ordering": { + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" + }, + "placeholder": { + "search": "Buscar por nome de usuaria, correo-e, código…" + }, + "table": { + "invitation": { + "header": { + "code": "Código", + "creationDate": "Data de creación", + "expirationDate": "Data de caducidade", + "owner": "Dona", + "status": "Estado", + "user": "Usuaria" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Buscar" + }, + "notApplicable": "N/A", "ordering": { "direction": { "ascending": "Ascendente", @@ -3062,397 +2670,579 @@ }, "label": "Ordenando" }, - "action": { - "delete": "Borrar", - "restartImport": "Volta a lanzar importación" + "pagination": { + "results": "Mostrando un resultado | Mostrando resultados { start } a { end } de { total }" }, - "label": { - "importStatus": "Estado da importación", - "search": "Buscar" - }, - "notApplicable": "N/A", - "empty": { - "noTracks": "Aínda non se engadiron cancións a esta biblioteca" + "permission": { + "library": "Biblioteca", + "moderation": "Moderación", + "settings": "Axustes" }, "placeholder": { - "search": "Buscar por título, artista, álbum…" + "search": "Buscar por nome de usuaria, correo-e, nome…" }, - "button": { - "showStatus": "Mostrar información acerca do estado da subida desta canción" - }, - "pagination": { - "results": "Mostrando resultados { start }-{ end } de { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear nova biblioteca" - }, - "loading": { - "libraries": "Cargando Bibliotecas…" - }, - "empty": { - "noLibrary": "Semella que non ten unha biblioteca, é momento de crear unha." - }, - "header": { - "libraries": "As miñas Bibliotecas" - } - }, - "Form": { - "button": { - "create": "Crear biblioteca", - "delete": "Borrar", - "confirm": "Eliminar biblioteca", - "update": "Actualizar biblioteca" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." + "table": { + "user": { + "accountStatus": { + "active": "Activo", + "inactive": "Non activo" + }, + "header": { + "accountStatus": "Estado da conta", + "email": "Email", + "lastActivity": "Última actividade", + "permissions": "Permisos", + "signup": "Rexistrarse", + "status": "Estado", + "username": "Nome de usuaria" + }, + "status": { + "admin": "Admin", + "regular": "usuaria normal", + "staff": "Persoal do equipo" } } - }, - "label": { - "description": "Descrición", - "name": "Nome", - "visibility": "Visibilidade" - }, - "header": { - "failure": "Fallo" - }, - "description": { - "library": "As bibliotecas axúdanlle a organizar e compartir a súa colección musical. Pode subir a súa propia colección de música a Funkwhale e compartila cos seus amigos e familia.", - "visibility": "Pode compartir a biblioteca con outa xente, independentemente da súa visibilidade." - }, - "message": { - "libraryCreated": "Biblioteca creada", - "libraryDeleted": "Biblioteca eliminada", - "libraryUpdated": "Biblioteca actualizada" - }, - "placeholder": { - "name": "A miña abraiante biblioteca", - "description": "Esta biblioteca contén a miña música persoal, espero que che guste." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } canción | { n } cancións", - "failedTracks": "Cancións con fallo:", - "lastUpdate": "Última actualización:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Ó deixar de seguir esta biblioteca perderás o acceso ó seu contido." - }, - "header": "Deixar de seguir biblioteca?" - } - }, - "button": { - "cancel": "Cancelar solicitude de seguimento", - "follow": "Seguir", - "pending": "Solicitude de seguimento pendente de aprobación", - "unfollow": "Deixar de seguir" - }, - "link": { - "scanDetails": "Detalles", - "scan": "Escanear agora" - }, - "label": { - "scanFailure": "Problema ao escanear", - "scanPending": "Ascendente", - "scanSuccess": "Escaneado", - "scanPartialSuccess": "Escaneado con fallos", - "scanProgress": "Escaneando… ({ progress }%)", - "sharingLink": "Compartir ligazón" - }, - "message": { - "scanLaunched": "Escaneado iniciado", - "scanSkipped": "Escaneado saltado (o escaneado anterior é moi recente)" - }, - "tooltip": { - "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca é pública e pode acceder ao contido libremente" - } - }, - "ScanForm": { - "header": { - "failure": "Non se obtivo a biblioteca remota" - }, - "placeholder": { - "url": "Escribe o URL dunha biblioteca" - }, - "label": { - "search": "Buscar unha biblioteca remota" - }, - "button": { - "submit": "Enviar busca" - } - }, - "Home": { - "header": { - "knownLibraries": "Bibliotecas coñecidas", - "remoteLibraries": "Bibliotecas remotas" - }, - "loading": { - "remoteLibraries": "Cargando bibliotecas remotas…" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son públicas ou lle outorgan acceso." - } - } - }, - "Home": { - "title": "Engadir e xestionar contido", - "description": { - "follow": "Segue bibliotecas doutras usuarias para ter nova música. As bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", - "channel": { - "1": "Se es músico ou podcaster, as canles están deseñadas para ti!", - "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicación de podcast." - }, - "upload": "Subir a túa biblioteca personal de música a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." - }, - "header": { - "follow": "Seguir bibliotecas remotas", - "channel": "Publica o teu traballo nunha canle", - "upload": "Subir contido de terceiros a biblioteca" - }, - "button": { - "start": "Comezar" - }, - "help": { - "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." - } - }, - "Base": { - "title": "Engadir contido", - "link": { - "libraries": "Bibliotecas", - "tracks": "Cancións" - }, - "menu": { - "secondary": "Menú secundario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } canción | { n } cancións" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "moderation": "Actualizar regra de moderación", - "owner": "Propiedade de { username }", - "tracks": "Cancións", - "domain": "Ver en { domain }" - }, - "button": { - "edit": "Editar", - "upload": "Subir" - }, - "title": "Biblioteca", - "label": { - "private": "Privado", - "public": "Público", - "instance": "Restrinxido", - "sharingLink": "Compartir ligazón" - }, - "description": { - "sharingLink": "Comparte esta ligazón para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da súa instancia." - }, - "tooltip": { - "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", - "public": "Esta biblioteca é pública e pode acceder ao contido libremente", - "instance": "Esta biblioteca está restrinxida as usuarias de esta instancia" - } - }, - "Edit": { - "button": { - "accept": "Aceptar", - "reject": "Rexeitar" - }, - "table": { - "action": { - "status": { - "accepted": "Aceptado", - "pending": "Pendente de aceptación", - "rejected": "Rexeitado" - }, - "header": { - "action": "Acción", - "date": "Data", - "status": "Estado", - "user": "Usuaria" - } - } - }, - "header": { - "followers": "Seguidoras", - "libraryContents": "Contido da biblioteca" - }, - "loading": { - "followers": "Cargando seguidoras…" - }, - "empty": { - "noFollowers": "Ninguén segue esta biblioteca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailOverview": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - }, - "DetailTracks": { - "empty": { - "upload": "Esta biblioteca está baleira, deberías subir algo!", - "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Actividade", - "moderation": "Actualizar regra de moderación", - "overview": "Vista xeral", - "domainView": "Ver en { domain }" - }, - "label": { - "self": "Esta es tí!" - } - }, - "PasswordReset": { - "label": { - "email": "Enderezo de email da conta" - }, - "button": { - "requestReset": "Solicita restablecer o contrasinal" - }, - "link": { - "back": "Volve ao acceso" - }, - "placeholder": { - "email": "Escribe o enderezo de correo ligado a túa conta" - }, - "header": { - "failure": "Fallo ó solicitar o restablecemento do contrasinal", - "reset": "Restablece o contrasinal" - }, - "title": "Restablece o contrasinal", - "help": { - "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. Enviarémosche un email con instrucións para restablecelo." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Engadir nova" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canle da artista" - }, - "header": "Crea unha canle", - "podcast": { - "header": "Canle de podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Cancelar", - "createChannel": "Crear canle", - "next": "Seguinte paso", - "previous": "Paso anterior" + "hide": "Agochar contido" }, "header": { - "channels": "Canles", - "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas", - "libraries": "Bibliotecas da usuaria" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Volve ao acceso", - "login": "Accede" + "failure": "Erro ó crear o filtro", + "modal": "Queres agochar o contido da artista \"{ radio }\"?" }, - "title": "Cambiar o contrasinal", - "header": { - "failure": "Erro ó cambiar o contrasinal", - "success": "Contrasinal actualizado correctamente" + "help": { + "createFilter": "Podes xestionar e actualizar os teus filtros desde os axustes da túa conta." }, "message": { - "requestSent": "Se o enderezo de correo proporcionado no paso anterior é válido e ligado a unha conta de usuaria, deberías recibir un correo coas instrucións de restablecemento nun par de minutos.", - "success": "O contrasinal foi actualizado correctamente." + "success": "Engadeuse o filtro de contido" }, + "warning": { + "createFilter": { + "listIntro": "Non volverás a ver as pistas, álbums e actividade relacionados con este artista:", + "listItem1": "En favoritas e historial de escoita de outras usuarias", + "listItem2": "No widget \"Adicións recentes\"", + "listItem3": "En listaxes de artistas e álbums", + "listItem4": "Nas suxestións de radios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Novo contrasinal" + "category": "Categoría" }, + "option": { + "all": "Todos" + } + }, + "ReportModal": { "button": { - "update": "Actualizar contrasinal" - } - }, - "EmailConfirm": { - "title": "Confirma o teu email", - "label": { - "confirmationCode": "Código de confirmación" + "cancel": "Cancelar", + "submit": "Enviar denuncia" + }, + "description": { + "email": "Utilizaremos este correo se precisamos contactar contigo referente a esta denuncia.", + "forwardToDomain": "Reenviar unha copia anónima da túa denuncia ó servidor que hospeda este elemento.", + "message": "Utiliza este campo para proporcionar contexto adicional á moderación para xestionar a denuncia.", + "modal": "Utiliza este formulario para enviar unha denuncia ao equipo de moderación" + }, + "error": { + "nodeinfoFetch": "Non se obtivo Info da Instancia: {error}" }, "header": { - "failure": "Non se confirmou o teu email", - "success": "Enderezo de email confirmado" + "disabled": "Desactiváronse as denuncias anónimas, conéctate para enviar unha denuncia.", + "modal": "Queres denunciar este elemento?", + "submissionFailure": "Erro ó enviar a denuncia" }, - "link": { - "login": "Accede", - "back": "Volver ao acceso" + "label": { + "email": "Email", + "forwardToDomain": "Reenviar a { domain}", + "message": "Mensaxe" }, "message": { - "success": "Xa pode utilizar o servizo sen limitacións." - } - }, - "Signup": { - "header": { - "createAccount": "Crear unha conta Funkwhale" - }, - "title": "Rexistro" - }, - "Login": { - "title": "Acceder", - "header": { - "login": "Accede coa túa conta Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accedendo…" - } - }, - "Plugins": { - "title": "Xestionar plugins" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de reprodución", - "recentlyFavorited": "Favorecida recentemente", - "recentlyListened": "Escoitada recentemente" + "submissionSuccess": "Denuncia enviada correctamente, grazas" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Aprobar", + "markRead": "Marcar como lido", + "markUnread": "Marcar como non lido", + "reject": "Rexeitar" + }, + "message": { + "libraryAcceptFollow": "{ username } aceptou o teu seguimento da biblioteca \"{ library }\"", + "libraryFollow": "{ username } segue a túa biblioteca \"{ library }\"", + "libraryPendingFollow": "{ username } quere seguir a túa biblioteca \"{ library }\"", + "libraryReject": "Rexeitaches a solicitude de {username} para seguir \"{library}\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "Editor": { + "button": { + "addDuplicate": "Engadir igualmente", + "clear": "Baleirar lista reprodución", + "copy": "Copiar cancións da cola a lista de reprodución", + "insertFromQueue": "Introducir desde a cola ({ n } canción) | Introducir desde a cola ({ n } cancións)" + }, + "error": { + "sync": "Algo fallou ao gardar os cambios" + }, + "header": { + "editor": "Editora da lista" + }, + "help": { + "reorder": "Arrastra e solta filas para reordenar as cancións na lista" + }, + "loading": { + "sync": "Sincronizando cambios co servidor…" + }, + "message": { + "sync": "Cambios sincronizados co servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Esto eliminará todas as cancións da lista de reprodución e non hai volta." + }, + "header": "Queres baleirar a lista de reprodución \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Algunhas cancións na cola xa están nesta lista de reprodución:" + } + }, + "Form": { + "button": { + "create": "Crear lista reprodución", + "update": "Actualizar lista de reprodución" + }, + "header": { + "createFailure": "Lista creada", + "createPlaylist": "Crear nova lista de reprodución", + "createSuccess": "Lista creada", + "updateSuccess": "Lista de reprodución actualizada" + }, + "label": { + "name": "Nome da lista", + "visibility": "Visibilidade da lista de reprodución" + }, + "placeholder": { + "name": "A miña fantástica lista" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Engadir igualmente", + "addToPlaylist": "Engadir a esta lista de reprodución", + "addTrack": "Engadir canción", + "cancel": "Cancelar", + "edit": "Editar" + }, + "empty": { + "noPlaylists": "Aínda non se creou unha lista de reprodución" + }, + "header": { + "addFailure": "Non podemos engadir a canción a lista de reprodución", + "addToPlaylist": "Engadir a lista de reprodución", + "available": "Listaxes dispoñibles", + "manage": "Xestionar listas de reprodución", + "noResults": "Sen resultados co teu filtro", + "track": "{title}, de {artist}" + }, + "label": { + "filter": "Filtro" + }, + "placeholder": { + "filterPlaylist": "Nome da lista de reprodución" + }, + "table": { + "edit": { + "header": { + "edit": "Editar", + "lastModification": "Última modificación", + "name": "Nome", + "tracks": "Cancións" + } + } + }, + "warning": { + "duplicate": "{ 0 } xa está en { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Engadir a lista de reprodución…" + } + }, + "Widget": { + "button": { + "create": "Crear lista de reprodución", + "more": "Mostrar máis" + }, + "placeholder": { + "noPlaylists": "Aínda non se creou unha lista de reprodución" + } + } + }, + "radios": { + "Button": { + "startArtistsRadio": "Iniciar radio dos artistas", + "startPlaylistsRadio": "Iniciar radio das listas de reprodución", + "startRadio": "Reproducir radio", + "startTagsRadio": "Iniciar radio das etiquetas", + "stopArtistsRadio": "Deter radio dos artistas", + "stopPlaylistsRadio": "Deter radio das listas de reprodución", + "stopRadio": "Deter radio", + "stopTagsRadio": "Deter radio da etiquetas" + }, + "Card": { + "button": { + "edit": "Editar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta máis | Mostrar { n } etiquetas máis" + } + } + }, + "vui": { + "Pagination": { + "label": "Paxinación", + "next": "Páxina seguinte", + "previous": "Páxina anterior" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Engadeuse { n } canción a cola | Engadíronse { n } cancións a cola" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Música", + "other": "Outro", + "podcast": "Podcast" + }, + "label": "Categoría do contido" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Subeuse a canción, pero aínda non foi programado o procesamento", + "label": "Borrador" + }, + "errored": { + "help": "Non se procesou esta canción, asegúrese que está correctamente etiquetada", + "label": "Con fallo" + }, + "finished": { + "help": "Importado", + "label": "Rematado" + }, + "pending": { + "help": "Canción subida, pero aínda non procesada polo servidor", + "label": "Pendente" + }, + "skipped": { + "help": "A canción xa está presente nunha das súas bibliotecas", + "label": "Saltado" + } + }, + "label": "Preme para mostrar máis información sobre o proceso de importación desta subida" + }, + "privacyLevel": { + "choices": { + "instance": "Todas nesta instancia", + "private": "Ninguén excepto eu", + "public": "Todas, en tódalas instancias" + }, + "help": "Indica o nivel de visibilidade da túa actividade", + "label": "Visibilidade da actividade", + "shortChoices": { + "instance": "Instancia", + "private": "Privado", + "public": "Todo o mundo" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contido ilegal", + "invalidMetadata": "Metadatos non válidos", + "offensiveContent": "Contido ofensivo", + "other": "Outro", + "takedownRequest": "Rexeitar petición" + }, + "label": "Categoría" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data de acceso", + "albumTitle": "Nome do álbum", + "appliedDate": "Data de solicitude", + "artistName": "Nome do artista", + "bitrate": "Taxa de bits", + "creationDate": "Data de creación", + "dateJoined": "Data de rexistro", + "domain": "Dominio", + "duration": "Duración", + "expirationDate": "Data de caducidade", + "firstSeen": "Data do primeiro acceso", + "followers": "Seguidoras", + "handledDate": "Data da concesión", + "itemsCount": "Elementos", + "lastActivity": "Última actividade", + "lastSeen": "Data da última sesión", + "modificationDate": "Data de modificación", + "name": "Nome", + "receivedMessages": "Mensaxes recibidas", + "releaseDate": "Data da última vista", + "size": "Tamaño", + "trackTitle": "Nome da canción", + "uploads": "Subidas", + "username": "Nome de usuaria", + "users": "Usuarias" + }, + "scopes": { + "edits": { + "description": "Editar os contidos", + "label": "Edicións" + }, + "favorites": { + "description": "Acceso a favoritas", + "label": "Favoritas" + }, + "filters": { + "description": "Establecer filtros do contido", + "label": "Filtros de contido" + }, + "follows": { + "description": "Acceso aos seguimentos", + "label": "Segue" + }, + "libraries": { + "description": "Acceso a ficheiros de audio, bibliotecas, artistas e cancións", + "label": "Bibliotecas e subidas" + }, + "listenings": { + "description": "Acceso ao historial de escoita", + "label": "Escoitas" + }, + "notifications": { + "description": "Acceso as notificacións", + "label": "Notificacións" + }, + "playlists": { + "description": "Acceso a listas de reprodución", + "label": "Listas de reprodución" + }, + "profile": { + "description": "Acesso a email, nome de usuaria, e información do perfil", + "label": "Abrir perfil" + }, + "radios": { + "description": "Acceso as radios", + "label": "Radios" + }, + "reports": { + "description": "Acceso ás denuncias a moderar", + "label": "Denuncias" + }, + "security": { + "description": "Acceso ós axustes de seguridade como contrasinal e permisos", + "label": "Seguranza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data da última vista", + "title": "Título" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Portada" + }, + "description": { + "label": "Descrición" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + } + }, + "useReport": { + "account": { + "label": "Denunciar a {'@'}{username}", + "typeLabel": "Conta" + }, + "album": { + "label": "Denunciar este álbum…", + "typeLabel": "Álbum" + }, + "artist": { + "label": "Denunciar este artista…", + "typeLabel": "Artista", + "unknownLabel": "Artista descoñecido" + }, + "channel": { + "label": "Denunciar esta canle…", + "typeLabel": "Canle" + }, + "library": { + "label": "Denunciar esta biblioteca…", + "typeLabel": "Biblioteca" + }, + "playlist": { + "label": "Denunciar esta listaxe…", + "typeLabel": "Lista de reprodución" + }, + "track": { + "label": "Denunciar esta canción…", + "typeLabel": "Canción" + } + }, + "useReportConfigs": { + "account": { + "label": "Conta", + "summary": "Bio" + }, + "album": { + "label": "Álbum", + "releaseDate": "Data da última vista", + "title": "Título" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canle" + }, + "creationDate": { + "label": "Data de creación" + }, + "library": { + "description": "Descrición", + "label": "Biblioteca" + }, + "musicbrainzId": { + "label": "ID en MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Lista de reprodución" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "Canción", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + }, + "visibility": { + "label": "Visibilidade" + } + } + }, + "useErrorHandler": { + "errorReportMessage": "Para axudarnos a saber que pasou, adxunta unha descrición detallada do que estabas a facer e facilitou o erro.", + "errorReportTitle": "Aconteceu un fallo non agardado.", + "leaveFeedback": "Deixar o comentario", + "unexpectedError": "Aconteceu un fallo non agardado." + }, + "useThemeList": { + "browserDefault": "Por defecto no navegador", + "darkTheme": "Escuro", + "lightTheme": "Claro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, inténtao de novo en { delay }", + "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor inténtao máis tarde" + }, + "sentry": { + "allow": "Permitir", + "deny": "Rexeitar", + "funkwhaleInstance": "Instancia oficial de Funkwhale", + "message": "As trazas do problema compartiranse con { 0 } para axudarnos a entender como e cando se produce o erro.", + "title": "Para mellorar a calidade do noso servizo, gustaríanos recoller algunha información acerca dos fallos durante a sesión." + }, + "serviceWorker": { + "actions": { + "later": "Máis tarde", + "update": "Actualizar" + }, + "newAppVersion": "Hai unha nova versión da app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Marcar todo como lido", + "submit": "Listo!" + }, + "empty": { + "notifications": "Sen notificación para mostrar" + }, + "header": { + "funkwhaleSupport": "Gozas de Funkwhale?", + "instanceSupport": "Axuda a este servidor Funkwhale", + "messages": "Mensaxes", + "notifications": "As súas notificacións" + }, + "label": { + "reminder": "Lembrarmo en:", + "showRead": "Mostrar notificacións lidas" + }, + "link": { + "donate": "Doar", + "help": "Descubre outros xeitos de axudar" + }, + "loading": { + "notifications": "Cargando notificacións…" + }, + "message": { + "funkwhaleSupport": "Levas por aquí un anaco. Se Funkwhale che resulta útil, poderiamos utilizar a túa axuda para facelo aínda mellor!" + }, "option": { "delay": { "30": "30 días", @@ -3461,584 +3251,63 @@ "never": "Nunca" } }, - "link": { - "help": "Descubre outros xeitos de axudar", - "donate": "Doar" + "title": "Notificacións" + }, + "Search": { + "button": { + "submit": "Enviar consulta de busca" }, "header": { - "funkwhaleSupport": "Gozas de Funkwhale?", - "instanceSupport": "Axuda a este servidor Funkwhale", - "messages": "Mensaxes", - "notifications": "As súas notificacións" + "remote": "Buscar un obxeto remoto", + "rss": "Subscribirse a fonte RSS do podcast", + "search": "Buscar" }, - "button": { - "submit": "Listo!", - "read": "Marcar todo como lido" - }, - "loading": { - "notifications": "Cargando notificacións…" - }, - "empty": { - "notifications": "Sen notificación para mostrar." - }, - "title": "Notificacións", "label": { - "reminder": "Lembrarmo en:", - "showRead": "Mostrar notificacións lidas" - }, - "message": { - "funkwhaleSupport": "Levas por aquí un anaco. Se Funkwhale che resulta útil, poderiamos utilizar a túa axuda para facelo aínda mellor!" + "albums": "Álbums", + "artists": "Artistas", + "playlists": "Listas de reprodución", + "podcasts": "Podcasts", + "radios": "Radios", + "series": "Series", + "tags": "Etiquetas", + "tracks": "Cancións" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome de usuaria", - "loginStatus": { - "disabled": "Desactivado", - "enabled": "Activado", - "label": "Estado da conexión" - }, - "displayName": "Nome público", - "email": "Enderezo de email", - "lastActivity": "Última actividade", - "lastChecked": "Última comprobación", - "permissions": "Permisos", - "signupDate": "Data de rexistro", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "Tamaño da caché", - "megabyte": "MB", - "totalSize": "Tamaño total", - "uploadQuota": "Cota de subida" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualización", - "receivedFollows": "Seguimentos de biblioteca recibidos" - } - }, - "header": { - "accountData": "Datos da conta", - "activity": "Actividade", - "audioContent": "Contido de audio", - "localAccount": "Conta local", - "activePolicy": "Este dominio está suxeito a regras específicas de moderación", - "noPolicy": "Non ten ningunha regra activada para esta conta." - }, - "button": { - "addPolicy": "Engadir nova regra de moderación" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "domain": "Dominio", - "libraries": "Bibliotecas", - "linkedReports": "Denuncias ligadas", - "openProfile": "Abrir perfil", - "remoteProfile": "Abrir perfil", - "requests": "Peticións", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "tooltip": { - "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisión da instancia." - }, - "option": { - "permission": { - "library": "Biblioteca", - "moderation": "Moderación", - "settings": "Axustes" - } - }, - "description": { - "policy": "As políticas de moderación axúdanlle a controlar o xeito en que a súa instancia interactúa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "accounts": "Contas", - "domains": "Dominios", - "reports": "Denuncias", - "userRequests": "Solicitudes da usuaria" - }, - "title": "Moderación", - "menu": { - "secondary": "Menú secundario" - } - }, - "DomainsDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "instanceData": "Datos da instancia", - "activePolicy": "Este dominio está suxeito a regras específicas de moderación", - "noPolicy": "Non ten ningunha regra activada para este dominio." - }, - "button": { - "addPolicy": "Engadir nova regra de moderación", - "addToAllowList": "Engadir a lista-permitir", - "refreshNodeInfo": "Actualizar info da instancia", - "removeFromAllowList": "Eliminar da lista-permitir" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "knownAccounts": "Contas coñecidas", - "libraries": "Bibliotecas", - "website": "Abrir sitio web", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "activity": { - "emittedFollows": "Seguimentos da biblioteca emitidos", - "emittedMessages": "Mensaxes emitidas", - "firstSeen": "Primeira visualización", - "receivedFollows": "Seguimentos de biblioteca recibidos" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Erro ó obter info do nodo", - "label": "Estado" - }, - "inAllowList": { - "label": "Está presente na lista de permitidos", - "false": "Non", - "true": "Si" - }, - "lastChecked": "Última comprobación", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Conta de usuarias" - } - }, - "description": { - "policy": "As políticas de moderación axúdanlle a controlar o xeito en que a súa instancia interactúa con determinado dominio ou conta." - }, - "notApplicable": "N/A", - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "DomainsList": { - "button": { - "add": "Engadir" - }, - "label": { - "addDomain": "Engadir un dominio", - "addToAllowList": "Engadir a lista-permitir" - }, - "title": "Dominios", - "header": { - "domains": "Dominios", - "failure": "Fallou a creación do dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Todos", - "resolved": "Resolto", - "unresolved": "Non resolto" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "title": "Denuncias", - "header": { - "reports": "Denuncias" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por título, artista, dominio…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Todos", - "approved": "Aprobada", - "pending": "Pendente", - "refused": "Rexeitada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendente", - "descending": "Descendente", - "label": "Ordear" - }, - "label": "Ordenando" - }, - "label": { - "search": "Buscar", - "status": "Estado" - }, - "placeholder": { - "search": "Buscar por nome de usuaria…" - }, - "title": "Solicitudes da usuaria", - "header": { - "userRequests": "Solicitudes da usuaria" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data de acceso", - "firstSeen": "Primeira visualización" - }, - "audioContent": { - "bitrate": { - "label": "Taxa de bits" - }, - "cachedSize": "Tamaño da caché", - "duration": "Duración", - "size": "Tamaño", - "track": "Canción" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Conta", - "domain": "Dominio", - "importStatus": "Estado da importación", - "library": "Biblioteca", - "remoteProfile": "Abrir perfil", - "type": "Tipo", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "local": "Local", - "uploadData": "Data de subida" - }, - "button": { - "delete": "Borrar", - "download": "Descargar" - }, - "modal": { - "delete": { - "header": "Eliminar esta subida?", - "content": { - "warning": "Esta acción non é reversible." - } - } - }, - "notApplicable": "N/A" - }, - "LibraryDetail": { - "link": { - "account": "Conta", - "albums": "Álbums", - "artists": "Artistas", - "domain": "Dominio", - "reports": "Denuncias ligadas", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django", - "visibility": "Visibilidade" - }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "libraryData": "Biblioteca actualizada", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "library": { - "description": "Descrición", - "name": "Nome" - }, - "activity": { - "firstSeen": "Primeira visualización", - "followers": "Seguidoras" - } - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta biblioteca?", - "content": { - "warning": "Vaise eliminar a biblioteca, así como as subidas asociadas, e os seguimentos. A acción é irreversible." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "AlbumDetail": { - "header": { - "activity": "Actividade", - "albumData": "Data do álbum", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "album": { - "description": "Descrición", - "title": "Título" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este álbum?", - "content": { - "warning": "Vaise a eliminar o álbum, así como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acción non ten volta." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "ArtistDetail": { - "header": { - "activity": "Actividade", - "artistData": "Datos do artista", - "audioContent": "Contido de audio", - "local": "Local" - }, - "link": { - "albums": "Álbums", - "category": "Categoría", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "tracks": "Cancións", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "artist": { - "description": "Descrición", - "name": "Nome" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar este artista?", - "content": { - "warning": "Vaise eliminar o artista, así como todas as subidas asociadas, pistas, álbums, favoritos e historial de escoita. Esta acción non ten volta." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "TagDetail": { - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "tagData": "Etiquetar datos" - }, - "link": { - "albums": "Álbums", - "artists": "Artistas", - "localProfile": "Abrir perfil", - "tracks": "Cancións", - "django": "Ver na admin de Django" - }, - "button": { - "delete": "Borrar" - }, - "modal": { - "delete": { - "header": "Eliminar esta etiqueta?", - "content": { - "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acción non é reversible." - } - } - }, - "table": { - "activity": { - "firstSeen": "Primeira visualización" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Actividade", - "local": "Local", - "trackData": "Nome da canción" - }, - "link": { - "album": "Álbum", - "albumArtist": "Autora do álbum", - "artist": "Artista", - "domain": "Dominio", - "edits": "Edicións", - "libraries": "Bibliotecas", - "reports": "Denuncias ligadas", - "localProfile": "Abrir perfil", - "musicbrainz": "Ver en MusicBrainz", - "remoteProfile": "Abrir perfil", - "uploads": "Subidas", - "django": "Ver na admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "Tamaño da caché", - "totalSize": "Tamaño total" - }, - "track": { - "copyright": "Copyright", - "description": "Descrición", - "discNumber": "Número de disco", - "license": "Licenza", - "position": "Paxinación", - "title": "Título" - }, - "activity": { - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" - } - }, - "button": { - "delete": "Borrar", - "edit": "Editar", - "remoteRefresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canción?", - "content": { - "warning": "Vaise eliminar a canción, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." - } - } - }, - "warning": { - "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" - } - }, - "Base": { - "link": { - "albums": "Álbums", - "artists": "Artistas", - "channels": "Canles", - "edits": "Edicións", - "libraries": "Bibliotecas", - "tags": "Etiquetas", - "tracks": "Cancións", - "uploads": "Subidas" - }, - "title": "Xestionar biblioteca", - "menu": { - "secondary": "Menú secundario" - } - }, - "EditsList": { - "title": "Edicións", - "header": { - "edits": "Ficheiros de biblioteca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Borrar", + "openRemote": "Abrir perfil", + "refresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "channelData": "Datos da canle" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle, así como as subidas, pistas e álbumes asociados. Esta acción non ten volta." + }, + "header": "Eliminar esta canle?" + } + }, "table": { - "channelData": { - "account": "Conta", - "category": "Categoría", - "description": "Descrición", - "domain": "Dominio", - "name": "Nome", - "rss": "Fonte RSS", - "url": "URL" + "activity": { + "edits": "Edicións", + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "linkedReports": "Denuncias ligadas", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" }, "audioContent": { "albums": "Álbums", @@ -4047,40 +3316,16 @@ "tracks": "Cancións", "uploads": "Subidas" }, - "activity": { - "edits": "Edicións", - "favorited": "Cancións favoritas", - "firstSeen": "Primeira visualización", - "linkedReports": "Denuncias ligadas", - "listenings": "Escoitas", - "playlists": "Listas de reprodución" + "channelData": { + "account": "Conta", + "category": "Categoría", + "description": "Descrición", + "domain": "Dominio", + "name": "Nome", + "rss": "Fonte RSS", + "url": "URL" } }, - "header": { - "activity": "Actividade", - "audioContent": "Contido de audio", - "channelData": "Datos da canle" - }, - "button": { - "delete": "Borrar", - "openRemote": "Abrir perfil", - "refresh": "Actualizar desde servidor remoto" - }, - "modal": { - "delete": { - "header": "Eliminar esta canle?", - "content": { - "warning": "Vaise eliminar a canle, así como as subidas, pistas e álbumes asociados. Esta acción non ten volta." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Abrir perfil", - "django": "Ver na admin de Django" - }, "warning": { "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" } @@ -4104,53 +3349,1205 @@ "channels": "Canles", "federation": "Federación", "instanceInfo": "Información da instancia", - "settings": "Axustes da instancia", "moderation": "Moderación", "music": "Música", "playlists": "Listas de reprodución", "sections": "Seccións", "security": "Seguranza", + "settings": "Axustes da instancia", "signups": "Rexistros", "stats": "Estatísticas", "subsonic": "Subsonic", "ui": "Interface de usuaria" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "albumData": "Data do álbum", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise a eliminar o álbum, así como todas as subidas asociadas, pistas, favoritos e historial de escoita. Esta acción non ten volta." + }, + "header": "Eliminar este álbum?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "album": { + "description": "Descrición", + "title": "Título" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "ArtistDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "artistData": "Datos do artista", + "audioContent": "Contido de audio", + "local": "Local" + }, + "link": { + "albums": "Álbums", + "category": "Categoría", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar o artista, así como todas as subidas asociadas, pistas, álbums, favoritos e historial de escoita. Esta acción non ten volta." + }, + "header": "Eliminar este artista?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "artist": { + "description": "Descrición", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "edits": "Edicións", + "libraries": "Bibliotecas", + "tags": "Etiquetas", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Xestionar biblioteca" + }, + "EditsList": { + "header": { + "edits": "Ficheiros de biblioteca" + }, + "title": "Edicións" + }, + "LibraryDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "libraryData": "Biblioteca actualizada", + "local": "Local" + }, + "link": { + "account": "Conta", + "albums": "Álbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "domain": "Dominio", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "tracks": "Cancións", + "uploads": "Subidas", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a biblioteca, así como as subidas asociadas, e os seguimentos. A acción é irreversible." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualización", + "followers": "Seguidoras" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + }, + "library": { + "description": "Descrición", + "name": "Nome" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "TagDetail": { + "button": { + "delete": "Borrar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "tagData": "Etiquetar datos" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "django": "Ver na admin de Django", + "localProfile": "Abrir perfil", + "tracks": "Cancións" + }, + "modal": { + "delete": { + "content": { + "warning": "Vas eliminar a etiqueta e desligala de calquera entidade existente. Esta acción non é reversible." + }, + "header": "Eliminar esta etiqueta?" + } + }, + "table": { + "activity": { + "firstSeen": "Primeira visualización" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Borrar", + "edit": "Editar", + "remoteRefresh": "Actualizar desde servidor remoto" + }, + "header": { + "activity": "Actividade", + "local": "Local", + "trackData": "Nome da canción" + }, + "link": { + "album": "Álbum", + "albumArtist": "Autora do álbum", + "artist": "Artista", + "django": "Ver na admin de Django", + "domain": "Dominio", + "edits": "Edicións", + "libraries": "Bibliotecas", + "localProfile": "Abrir perfil", + "musicbrainz": "Ver en MusicBrainz", + "remoteProfile": "Abrir perfil", + "reports": "Denuncias ligadas", + "uploads": "Subidas" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canción, así como as subidas asociadas, favoritos e historial de escoita. Esta acción é irreversible." + }, + "header": "Eliminar esta canción?" + } + }, + "table": { + "activity": { + "favorited": "Cancións favoritas", + "firstSeen": "Primeira visualización", + "listenings": "Escoitas", + "playlists": "Listas de reprodución" + }, + "track": { + "copyright": "Copyright", + "description": "Descrición", + "discNumber": "Número de disco", + "license": "Licenza", + "position": "Paxinación", + "title": "Título" + }, + "trackData": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "UploadDetail": { + "button": { + "delete": "Borrar", + "download": "Descargar" + }, + "header": { + "activity": "Actividade", + "audioContent": "Contido de audio", + "local": "Local", + "uploadData": "Data de subida" + }, + "link": { + "account": "Conta", + "django": "Ver na admin de Django", + "domain": "Dominio", + "importStatus": "Estado da importación", + "library": "Biblioteca", + "remoteProfile": "Abrir perfil", + "type": "Tipo", + "visibility": "Visibilidade" + }, + "modal": { + "delete": { + "content": { + "warning": "Esta acción non é reversible." + }, + "header": "Eliminar esta subida?" + } + }, + "notApplicable": "N/A", + "table": { + "activity": { + "accessedDate": "Data de acceso", + "firstSeen": "Primeira visualización" + }, + "audioContent": { + "bitrate": { + "label": "Taxa de bits", + "value": "{bitrate}/s" + }, + "cachedSize": "Tamaño da caché", + "duration": "Duración", + "size": "Tamaño", + "track": "Canción" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderación" + }, + "description": { + "policy": "As políticas de moderación axúdanche a controlar o xeito en que a túa instancia interactúa con determinado dominio ou conta" + }, + "header": { + "accountData": "Datos da conta", + "activePolicy": "Este dominio está suxeito a regras específicas de moderación", + "activity": "Actividade", + "audioContent": "Contido de audio", + "localAccount": "Conta local", + "noPolicy": "Non ten ningunha regra activada para esta conta." + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "domain": "Dominio", + "libraries": "Bibliotecas", + "linkedReports": "Denuncias ligadas", + "openProfile": "Abrir perfil", + "remoteProfile": "Abrir perfil", + "requests": "Peticións", + "tracks": "Cancións", + "uploads": "Subidas" + }, + "notApplicable": "N/A", + "option": { + "permission": { + "library": "Biblioteca", + "moderation": "Moderación", + "settings": "Axustes" + } + }, + "table": { + "accountData": { + "displayName": "Nome público", + "email": "Enderezo de email", + "lastActivity": "Última actividade", + "lastChecked": "Última comprobación", + "loginStatus": { + "disabled": "Desactivado", + "enabled": "Activado", + "label": "Estado da conexión" + }, + "permissions": "Permisos", + "signupDate": "Data de rexistro", + "userType": "Tipo", + "username": "Nome de usuaria" + }, + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualización", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "megabyte": "MB", + "totalSize": "Tamaño total", + "uploadQuota": "Cota de subida" + } + }, + "tooltip": { + "uploadQuota": "Indicar canto contido pode subir a usuaria. Deixar baleiro para utilizar o valor por omisión da instancia." + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "Base": { + "link": { + "accounts": "Contas", + "domains": "Dominios", + "reports": "Denuncias", + "userRequests": "Solicitudes da usuaria" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Moderación" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Engadir nova regra de moderación", + "addToAllowList": "Engadir a lista-permitir", + "refreshNodeInfo": "Actualizar info da instancia", + "removeFromAllowList": "Eliminar da lista-permitir" + }, + "description": { + "policy": "As políticas de moderación axúdanche a controlar o xeito en que a túa instancia interactúa con determinado dominio ou conta" + }, + "header": { + "activePolicy": "Este dominio está suxeito a regras específicas de moderación", + "activity": "Actividade", + "audioContent": "Contido de audio", + "instanceData": "Datos da instancia", + "noPolicy": "Non ten ningunha regra activada para este dominio." + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "channels": "Canles", + "django": "Ver na admin de Django", + "knownAccounts": "Contas coñecidas", + "libraries": "Bibliotecas", + "tracks": "Cancións", + "uploads": "Subidas", + "website": "Abrir sitio web" + }, + "notApplicable": "N/A", + "table": { + "activity": { + "emittedFollows": "Seguimentos da biblioteca emitidos", + "emittedMessages": "Mensaxes emitidas", + "firstSeen": "Primeira visualización", + "receivedFollows": "Seguimentos de biblioteca recibidos" + }, + "audioContent": { + "cachedSize": "Tamaño da caché", + "totalSize": "Tamaño total" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "Non", + "label": "Está presente na lista de permitidos", + "true": "Si" + }, + "lastChecked": "Última comprobación", + "nodeInfoStatus": { + "label": "Estado", + "value": "Erro ó obter info do nodo" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Conta de usuarias" + } + }, + "warning": { + "stats": "As estatísticas contabilízanse pola actividade coñecida e o contido da súa instancia, e non reflexan a actividade xeral de esta conta" + } + }, + "DomainsList": { + "button": { + "add": "Engadir" + }, + "header": { + "domains": "Dominios", + "failure": "Fallou a creación do dominio" + }, + "label": { + "addDomain": "Engadir un dominio", + "addToAllowList": "Engadir a lista-permitir" + }, + "title": "Dominios" + }, + "ReportsList": { + "header": { + "reports": "Denuncias" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "resolved": "Resolto", + "unresolved": "Non resolto" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por título, artista, dominio…" + }, + "title": "Denuncias" + }, + "RequestsList": { + "header": { + "userRequests": "Solicitudes da usuaria" + }, + "label": { + "search": "Buscar", + "status": "Estado" + }, + "option": { + "status": { + "all": "Todos", + "approved": "Aprobada", + "pending": "Pendente", + "refused": "Rexeitada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Ordear" + }, + "label": "Ordenando" + }, + "placeholder": { + "search": "Buscar por identificador" + }, + "title": "Solicitudes da usuaria" + } + }, "users": { "Base": { "link": { "invitations": "Convites", "users": "Usuarias" }, - "title": "Xestionar usuarias", "menu": { "secondary": "Menú secundario" + }, + "title": "Xestionar usuarias" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accedendo…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non se confirmou o teu email", + "success": "Enderezo de email confirmado" + }, + "label": { + "confirmationCode": "Código de confirmación" + }, + "link": { + "back": "Volver ao acceso", + "login": "Accede" + }, + "message": { + "success": "Xa podes utilizar o servizo sen limitacións" + }, + "title": "Confirma o teu email" + }, + "Login": { + "header": { + "login": "Accede coa túa conta Funkwhale" + }, + "title": "Acceder" + }, + "PasswordReset": { + "button": { + "requestReset": "Solicita restablecer o contrasinal" + }, + "header": { + "failure": "Fallo ó solicitar o restablecemento do contrasinal", + "reset": "Restablece o contrasinal" + }, + "help": { + "form": "Utiliza este formulario para solicitar o restablecemento do contrasinal. Enviarémosche un email con instrucións para restablecelo." + }, + "label": { + "email": "Enderezo de email da conta" + }, + "link": { + "back": "Volve ao acceso" + }, + "placeholder": { + "email": "Escribe o enderezo de correo ligado a túa conta" + }, + "title": "Restablece o contrasinal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar contrasinal" + }, + "header": { + "failure": "Erro ó cambiar o contrasinal", + "success": "Contrasinal actualizado correctamente" + }, + "label": { + "newPassword": "Novo contrasinal" + }, + "link": { + "back": "Volve ao acceso", + "login": "Accede" + }, + "message": { + "requestSent": "Se o enderezo de correo proporcionado no paso anterior é válido e ligado a unha conta de usuaria, deberías recibir un correo coas instrucións de restablecemento nun par de minutos.", + "success": "O contrasinal foi actualizado correctamente." + }, + "title": "Cambiar o contrasinal" + }, + "Plugins": { + "title": "Xestionar plugins" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de reprodución", + "recentlyFavorited": "Últimas favorecidas", + "recentlyListened": "Últimas escoitadas" + } + }, + "ProfileBase": { + "label": { + "self": "Esta es tí!" + }, + "link": { + "activity": "Actividade", + "domainView": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "overview": "Vista xeral" + }, + "title": "Perfil de { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Cancelar", + "createChannel": "Crear canle", + "next": "Seguinte paso", + "previous": "Paso anterior" + }, + "header": { + "channels": "Canles", + "libraries": "Bibliotecas da usuaria", + "sharedLibraries": "Esta usuaria compartiu as seguintes bibliotecas" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canle da artista" + }, + "header": "Crea unha canle", + "podcast": { + "header": "Canle de podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear unha conta Funkwhale" + }, + "title": "Rexistro" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Cancelar", + "confirm": "Borrar", + "delete": "Eliminar…", + "edit": "Editar…", + "embed": "Incrustar", + "play": "Reproducir", + "updateChannel": "Actualizar canle", + "upload": "Subir" + }, + "header": { + "artistChannel": "Canle da artista", + "podcastChannel": "Canle de podcast" + }, + "link": { + "channelEpisodes": "Tódolos episodios", + "channelOverview": "Vista xeral", + "channelTracks": "Cancións", + "domainView": "Ver en { domain }", + "mirrored": "Réplica de { domain }", + "moderation": "Actualizar regra de moderación" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodios", + "listenings": "{ n } escoita | { n } escoitas", + "subscribers": "{ n } subscritora | { n } subscritoras", + "tracks": "{ n } canción | { n } cancións" + }, + "modal": { + "delete": { + "content": { + "warning": "Vaise eliminar a canle e todos os ficheiros e datos relacionados. Esta acción non ten volta." + }, + "header": "Eliminar esta Canle?" + }, + "embed": { + "header": "Inclúe o traballo desta artista no teu sitio web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se usas Mastodon ou outro servizo do fediverso, podes subscribirte a esta conta:" + }, + "header": "Subscribirse no Fediverso" + }, + "funkwhale": { + "header": "Subscribirse en Funkwhale" + }, + "header": "Subscribirse a esta canle", + "rss": { + "content": { + "help": "Copiar-pegar este URL na túa app de podcasting:" + }, + "header": "Subscribirse vía RSS" + } + } + }, + "title": "Canle" + }, + "DetailOverview": { + "header": { + "albums": "Álbums", + "latestEpisodes": "Últimos episodios", + "latestTracks": "Últimas cancións", + "series": "Series", + "uploadsFailure": "Non se publicaron algunha das subidas", + "uploadsProcessing": "Estánse a procesar as subidas", + "uploadsSuccess": "Publicáronse correctamente as subidas" + }, + "link": { + "addAlbum": "Engadir nova", + "erroredUploads": "Ver subidas con fallos", + "skippedUploads": "Ver subidas omitidas" + }, + "message": { + "processing": "Funkwhale está procesando as subidas e estarán dispoñibles moi pronto." + }, + "meta": { + "progress": "Subidas procesadas: {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Cancelar", + "subscribe": "Subscribir" + }, + "link": { + "addNew": "Engadir nova" + }, + "modal": { + "subscription": { + "header": "Subscrición" + } + }, + "placeholder": { + "search": "Filtrar por nome…" + }, + "title": "Subscricións a canles" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Bibliotecas", + "tracks": "Cancións" + }, + "menu": { + "secondary": "Menú secundario" + }, + "title": "Engadir contido" + }, + "Home": { + "button": { + "start": "Comezar" + }, + "description": { + "channel": { + "1": "Se es músico ou podcaster, as canles están deseñadas para ti!", + "2": "Comparte publicamente o teu traballo para ter subscritoras en Funkwhale, do Fediverso ou calquer aplicación de podcast." + }, + "follow": "Segue bibliotecas doutras usuarias para ter nova música. As bibliotecas públicas pódense seguir inmediatamente, mentras que as privadas precisan que a usuaria che conceda acceso.", + "upload": "Subir a túa biblioteca personal de música a Funkwhale para desfrutala desde onde queiras e compartila coas amizades." + }, + "header": { + "channel": "Publica o teu traballo nunha canle", + "follow": "Seguir bibliotecas remotas", + "upload": "Subir contido de terceiros a biblioteca" + }, + "help": { + "uploadQuota": "Esta instancia ofrece {quota} de almacenamento a cada usuaria." + }, + "title": "Engadir e xestionar contido" + }, + "libraries": { + "Card": { + "button": { + "upload": "Subir" + }, + "label": { + "size": "Tamaño total dos ficheiros de esta biblioteca" + }, + "link": { + "details": "Detalles da biblioteca" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + } + }, + "FilesTable": { + "action": { + "delete": "Borrar", + "restartImport": "Volta a lanzar importación" + }, + "button": { + "showStatus": "Mostrar información acerca do estado da subida desta canción" + }, + "empty": { + "noTracks": "Aínda non se engadiron cancións a esta biblioteca" + }, + "label": { + "importStatus": "Estado da importación", + "search": "Buscar" + }, + "notApplicable": "N/A", + "option": { + "status": { + "all": "Todos", + "draft": "Borrador", + "failed": "Fallou", + "finished": "Rematado", + "pending": "Pendente", + "skipped": "Saltado" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendente", + "descending": "Descendente", + "label": "Dirección da orde" + }, + "label": "Ordenando" + }, + "pagination": { + "results": "Mostrando resultados { start }-{ end } de { total }" + }, + "placeholder": { + "search": "Buscar por título, artista, álbum…" + }, + "table": { + "file": { + "header": { + "album": "Álbum", + "artist": "Artista", + "duration": "Duración", + "importStatus": "Estado da importación", + "size": "Tamaño", + "title": "Título", + "uploadDate": "Data de subida" + } + } + } + }, + "Form": { + "button": { + "confirm": "Eliminar biblioteca", + "create": "Crear biblioteca", + "delete": "Borrar", + "update": "Actualizar biblioteca" + }, + "description": { + "library": "As bibliotecas axúdanlle a organizar e compartir a súa colección musical. Pode subir a súa propia colección de música a Funkwhale e compartila cos seus amigos e familia.", + "visibility": "Pode compartir a biblioteca con outa xente, independentemente da súa visibilidade." + }, + "header": { + "failure": "Fallo" + }, + "label": { + "description": "Descrición", + "name": "Nome", + "visibility": "Visibilidade" + }, + "message": { + "libraryCreated": "Biblioteca creada", + "libraryDeleted": "Biblioteca eliminada", + "libraryUpdated": "Biblioteca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a biblioteca e as cancións. Non poderá voltar atrás." + }, + "header": "Eliminar esta biblioteca?" + } + }, + "placeholder": { + "description": "Esta biblioteca contén a miña música persoal, espero que che guste.", + "name": "A miña abraiante biblioteca" + } + }, + "Home": { + "empty": { + "noLibrary": "Semella que non ten unha biblioteca, é momento de crear unha." + }, + "header": { + "libraries": "As miñas Bibliotecas" + }, + "link": { + "createLibrary": "Crear nova biblioteca" + }, + "loading": { + "libraries": "Cargando Bibliotecas…" + } + }, + "Quota": { + "button": { + "purge": "Limpar" + }, + "header": { + "currentUsage": "Uso actual" + }, + "label": { + "currentUsage": "{ current } utilizado de { max } permitido", + "errored": "Ficheiros con fallos", + "pending": "Ficheiros pendentes", + "percentUsed": "{progress}%", + "skipped": "Ficheiros saltados" + }, + "link": { + "viewFiles": "Ver ficheiros" + }, + "loading": { + "currentUsage": "Cargando datos de uso…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Elimina as cancións subidas que non se procesaron completamente no servidor, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros con fallos?" + }, + "purgePending": { + "content": { + "description": "Elimina completamente as cancións subidas pero aínda non procesadas, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros pendentes?" + }, + "purgeSkipped": { + "content": { + "description": "Elimina as cancións subidas saltadas durante o proceso de importación, engadindo o espazo correspondente a súa cuota." + }, + "header": "Eliminar ficheiros saltados?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cancelar solicitude de seguimento", + "follow": "Seguir", + "pending": "Solicitude de seguimento pendente de aprobación", + "unfollow": "Deixar de seguir" + }, + "error": { + "follow": "Non se puido seguir a biblioteca remota: {error}", + "unfollow": "Non se puido retirar seguimento a biblioteca: {error}" + }, + "label": { + "scanFailure": "Problema ao escanear", + "scanPartialSuccess": "Escaneado con fallos", + "scanPending": "Ascendente", + "scanProgress": "Escaneando… ({ progress }%)", + "scanSuccess": "Escaneado", + "sharingLink": "Compartir ligazón" + }, + "link": { + "scan": "Escanear agora ", + "scanDetails": "Detalles" + }, + "message": { + "scanLaunched": "Escaneado iniciado", + "scanSkipped": "Escaneado saltado (o escaneado anterior é moi recente)" + }, + "meta": { + "failedTracks": "Cancións que fallaron: {tracks}", + "lastUpdate": "Última actualización:", + "tracks": "{ n } canción | { n } cancións" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Ó deixar de seguir esta biblioteca perderás o acceso ó seu contido." + }, + "header": "Deixar de seguir biblioteca?" + } + }, + "tooltip": { + "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca é pública e pode acceder ao contido libremente" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "As bibliotecas remotas pertences a outras usuarias na rede. Pode acceder a elas se son públicas ou lle outorgan acceso." + }, + "header": { + "knownLibraries": "Bibliotecas coñecidas", + "remoteLibraries": "Bibliotecas remotas" + }, + "loading": { + "remoteLibraries": "Cargando bibliotecas remotas…" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar busca" + }, + "header": { + "failure": "Non se obtivo a biblioteca remota" + }, + "label": { + "search": "Buscar unha biblioteca remota" + }, + "placeholder": { + "url": "Escribe o URL dunha biblioteca" } } } }, - "Search": { - "label": { - "albums": "Álbums", - "artists": "Artistas", - "playlists": "Listas de reprodución", - "podcasts": "Podcasts", - "radios": "Radios", - "series": "Series", - "tags": "Etiquetas", - "tracks": "Cancións" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } }, - "header": { - "search": "Buscar", - "remote": "Buscar un obxeto remoto", - "rss": "Subscribirse a fonte RSS do podcast" + "DetailOverview": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } }, - "button": { - "submit": "Enviar consulta de busca" + "DetailTracks": { + "empty": { + "follow": "Poderías ter que seguir esta biblioteca para ver o seu contido.", + "upload": "Esta biblioteca está baleira, deberías subir algo!" + } + }, + "Edit": { + "button": { + "accept": "Aceptar", + "reject": "Rexeitar" + }, + "empty": { + "noFollowers": "Ninguén segue esta biblioteca" + }, + "header": { + "followers": "Seguidoras", + "libraryContents": "Contido da biblioteca" + }, + "loading": { + "followers": "Cargando seguidoras…" + }, + "table": { + "action": { + "header": { + "action": "Acción", + "date": "Data", + "status": "Estado", + "user": "Usuaria" + }, + "status": { + "accepted": "Aceptado", + "pending": "Pendente de aceptación", + "rejected": "Rexeitado" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Editar", + "upload": "Subir" + }, + "description": { + "sharingLink": "Comparte esta ligazón para que as usuarias poidan acceder a biblioteca ao pegala na barra de busca da súa instancia." + }, + "label": { + "instance": "Restrinxido", + "private": "Privado", + "public": "Público", + "sharingLink": "Compartir ligazón" + }, + "link": { + "albums": "Álbums", + "artists": "Artistas", + "domain": "Ver en { domain }", + "moderation": "Actualizar regra de moderación", + "owner": "Propiedade de { username }", + "tracks": "Cancións" + }, + "meta": { + "tracks": "{ n } canción | { n } cancións" + }, + "title": "Biblioteca", + "tooltip": { + "instance": "Esta biblioteca está restrinxida as usuarias de esta instancia", + "private": "Esta biblioteca é privada e precisas que a usuaria che conceda permiso para acceder ao contido", + "public": "Esta biblioteca é pública e pode acceder ao contido libremente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Cancelar", + "confirm": "Eliminar lista de reprodución", + "delete": "Borrar", + "edit": "Editar", + "embed": "Incrustar", + "playAll": "Reproducir todo", + "stopEdit": "Deter a edición" + }, + "empty": { + "noTracks": "Aínda non tes cancións na lista de reprodución" + }, + "header": { + "tracks": "Cancións" + }, + "meta": { + "tracks": "Lista de reprodución que contén { n } canción, de { username } | Lista de reprodución que contén { n } cancións, de { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a lista de reprodución e non poderá voltar atrás." + }, + "header": "Queres eliminar esta lista de reprodución \"{ playlist }\"?" + }, + "embed": { + "header": "Inclúe esta lista no seu sitio web" + } + }, + "title": "Lista de reprodución" + }, "List": { + "button": { + "create": "Crear lista de reprodución", + "manage": "Xestiona as listas de reprodución", + "search": "Buscar" + }, + "empty": { + "noResults": "Sen resultados para a túa busca" + }, + "header": { + "browse": "Buscando nas listaxes", + "playlists": "Listas de reprodución" + }, + "label": { + "search": "Buscar" + }, "ordering": { "direction": { "ascending": "Ascendente", @@ -4159,58 +4556,11 @@ }, "label": "Ordenando" }, - "header": { - "browse": "Buscando nas listaxes", - "playlists": "Listas de reprodución" - }, - "button": { - "create": "Crear lista de reprodución", - "manage": "Xestiona as listas de reprodución", - "search": "Buscar" - }, - "placeholder": { - "search": "Nome da lista de reprodución…" - }, - "empty": { - "noResults": "Sen resultados para a túa busca" - }, "pagination": { "results": "Resultados por páxina" }, - "label": { - "search": "Buscar" - } - }, - "Detail": { - "button": { - "cancel": "Cancelar", - "delete": "Borrar", - "confirm": "Eliminar lista de reprodución", - "edit": "Editar", - "embed": "Incrustar", - "playAll": "Reproducir todo", - "stopEdit": "Deter a edición" - }, - "modal": { - "delete": { - "header": "Queres eliminar esta lista de reprodución \"{ playlist }\"?", - "content": { - "warning": "Eliminará completamente a lista de reprodución e non poderá voltar atrás." - } - }, - "embed": { - "header": "Inclúe esta lista no seu sitio web" - } - }, - "title": "Lista de reprodución", - "meta": { - "tracks": "Lista de reprodución que contén { n } canción, de { username } | Lista de reprodución que contén { n } cancións, de { username }" - }, - "empty": { - "noTracks": "Aínda non tes cancións na lista de reprodución" - }, - "header": { - "tracks": "Cancións" + "placeholder": { + "search": "Nome da lista de reprodución…" } } }, @@ -4218,289 +4568,48 @@ "Detail": { "button": { "confirm": "Eliminar radio", + "delete": "Eliminar", "edit": "Editar…" }, - "modal": { - "delete": { - "header": "Queres eliminar a radio \"{ radio }\"?", - "content": { - "warning": "Eliminará completamente a radio e non ten volta atrás." - } - } - }, "empty": { "noTracks": "Aínda non se engadiron cancións a esta radio" }, - "title": "Radio", "header": { + "radio": "Radio que inclúe {tracks} cancións, de ", "tracks": "Cancións" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Engadeuse { n } canción a cola | Engadíronse { n } cancións a cola" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Acceso a ficheiros de audio, bibliotecas, artistas e cancións", - "label": "Bibliotecas e subidas" - }, - "filters": { - "description": "Establecer filtros do contido", - "label": "Filtros de contido" - }, - "profile": { - "description": "Acesso a email, nome de usuaria, e información do perfil", - "label": "Abrir perfil" - }, - "edits": { - "description": "Editar os contidos", - "label": "Edicións" - }, - "follows": { - "description": "Acceso aos seguimentos", - "label": "Segue" - }, - "listenings": { - "description": "Acceso ao historial de escoita", - "label": "Escoitas" - }, - "reports": { - "description": "Acceso ás denuncias a moderar", - "label": "Denuncias" - }, - "notifications": { - "description": "Acceso as notificacións", - "label": "Notificacións" - }, - "playlists": { - "description": "Acceso a listas de reprodución", - "label": "Listas de reprodución" - }, - "radios": { - "description": "Acceso as radios", - "label": "Radios" - }, - "security": { - "description": "Acceso ós axustes de seguridade como contrasinal e permisos", - "label": "Seguranza" - }, - "favorites": { - "label": "Favoritas" - } }, - "filters": { - "accessedDate": "Data de acceso", - "albumTitle": "Nome do álbum", - "artistName": "Nome do artista", - "bitrate": "Taxa de bits", - "creationDate": "Data de creación", - "domain": "Dominio", - "duration": "Duración", - "expirationDate": "Data de caducidade", - "firstSeen": "Data da primeira visualización", - "followers": "Seguidoras", - "itemsCount": "Elementos", - "lastActivity": "Última actividade", - "lastSeen": "Data da última vista", - "modificationDate": "Data de modificación", - "name": "Nome", - "receivedMessages": "Mensaxes recibidas", - "releaseDate": "Data da última vista", - "dateJoined": "Data de rexistro", - "size": "Tamaño", - "trackTitle": "Nome da canción", - "uploads": "Subidas", - "username": "Nome de usuaria", - "users": "Usuarias" - }, - "fields": { - "privacyLevel": { - "label": "Visibilidade da actividade", - "help": "Indica o nivel de visibilidade da túa actividade", - "shortChoices": { - "public": "Todo o mundo", - "instance": "Instancia", - "private": "Privado" + "modal": { + "delete": { + "content": { + "warning": "Eliminará completamente a radio e non ten volta atrás." }, - "choices": { - "instance": "Todas nesta instancia", - "public": "Todas, en tódalas instancias", - "private": "Ninguén excepto eu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoría", - "choices": { - "illegalContent": "Contido ilegal", - "invalidMetadata": "Metadatos non válidos", - "offensiveContent": "Contido ofensivo", - "other": "Outro", - "takedownRequest": "Rexeitar petición" - } - }, - "importStatus": { - "label": "Preme para mostrar máis información sobre o proceso de importación desta subida", - "choices": { - "draft": { - "label": "Borrador", - "help": "Subeuse a canción, pero aínda non foi programado o procesamento" - }, - "errored": { - "label": "Con fallo", - "help": "Non se procesou esta canción, asegúrese que está correctamente etiquetada" - }, - "finished": { - "label": "Rematado", - "help": "Importado" - }, - "pending": { - "label": "Pendente", - "help": "Canción subida, pero aínda non procesada polo servidor" - }, - "skipped": { - "label": "Saltado", - "help": "A canción xa está presente nunha das súas bibliotecas" - } - } - }, - "contentCategory": { - "label": "Categoría do contido", - "choices": { - "music": "Música", - "other": "Outro", - "podcast": "Podcast" - } + "header": "Queres eliminar a radio {radio}?" } - } + }, + "title": "Radio" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Conta" - }, - "album": { - "typeLabel": "Álbum", - "label": "Denunciar este álbum…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Denunciar este artista…" - }, - "channel": { - "typeLabel": "Canle", - "label": "Denunciar esta canle…" - }, - "library": { - "typeLabel": "Biblioteca", - "label": "Denunciar esta biblioteca…" - }, - "playlist": { - "typeLabel": "Lista de reprodución", - "label": "Denunciar esta listaxe…" - }, - "track": { - "label": "Denunciar esta canción…", - "typeLabel": "Canción" - } + "ChooseInstance": { + "button": { + "submit": "Enviar" }, - "useReportConfigs": { - "account": { - "label": "Conta", - "summary": "Bio" - }, - "album": { - "label": "Álbum", - "releaseDate": "Data da última vista", - "title": "Título" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canle" - }, - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "Paxinación", - "title": "Título", - "label": "Canción" - }, - "creationDate": { - "label": "Data de creación" - }, - "library": { - "description": "Descrición", - "label": "Biblioteca" - }, - "musicbrainzId": { - "label": "ID en MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Lista de reprodución" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilidade" - } + "header": { + "chooseInstance": "Elixe a túa instancia", + "failure": "Non se puido conectar ao URL proporcionado", + "suggestions": "Opcións suxeridas" }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "Licenza", - "position": "Paxinación", - "title": "Título" - }, - "cover": { - "label": "Portada" - }, - "description": { - "label": "Descrición" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data da última vista", - "title": "Título" - }, - "tags": { - "label": "Etiquetas" - } + "help": { + "notFunkwhaleServer": "O enderezo proporcionado non é un servidor Funkwhale", + "selectPod": "Para continuar, elixe a instancia de Funkwhale á que te queres conectar. Escribe o enderezo directamente, ou elixe unha das opcións suxeridas.", + "serverDown": "Igoal non está a funcionar o servidor" + }, + "label": { + "url": "URL da instancia" + }, + "message": { + "currentConnection": "Neste intre tes conexión con { 0 }. Se continúas desconectarémoste da instancia actual e os datos locais serán eliminados.", + "newUrl": "Estás utilizando a instancia Funkwhale en { url }" } - }, - "useThemeList": { - "darkTheme": "Escuro", - "lightTheme": "Claro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Hai unha nova versión da app.", - "actions": { - "later": "Máis tarde", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "Enviaches demasiadas solicitudes en pouco tempo, inténtao de novo en { delay }", - "rateLimitLater": "Enviaches demasiadas solicitudes en pouco tempo, por favor inténtao máis tarde" } } } diff --git a/front/src/locales/it.json b/front/src/locales/it.json index 39c0b3e4e..0857f6adf 100644 --- a/front/src/locales/it.json +++ b/front/src/locales/it.json @@ -1,1435 +1,66 @@ { + "App": { + "loading": "Caricando…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vuole accedere al tuo account Funkwhale", - "authorize": "Autorizza app di terze parti", - "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", - "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", - "allScopes": "Accesso completo", - "readOnly": "Sola lettura", - "writeOnly": "Sola-scrittura" - }, - "title": "Permetti applicazione", - "button": { - "authorize": "Autorizza { app }" - }, - "help": { - "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", - "redirect": "Sarai reindirizzato su { 0 }", - "copyCode": "Ti sarà mostrato un codice da copiare-incollare nell'applicazione." - }, - "message": { - "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Accesso disabilitato", - "passwordUpdated": "Password aggiornata", - "unavailable": "L'API Subsonic non è disponibile su questa istanza Funkwhale." - }, - "button": { - "confirmDisable": "Disabilita accesso", - "disable": "Disabilita accesso Subsonic", - "newPassword": "Richiedi una nuova password", - "confirmNewPassword": "Richiedi una password" - }, - "modal": { - "disableSubsonic": { - "header": "Disabilitare l'accesso alle API Subsonic?", - "content": { - "warning": "Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." - } - }, - "newPassword": { - "header": "Richiedere una nuova password API Subsonic?", - "content": { - "warning": "Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password attuale." - } - } - }, - "link": { - "apps": "Scopri come utilizzare Funkwhale attraverso altre app" - }, - "header": { - "error": "Errore", - "subsonic": "Password API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale è compatibile con altri lettori musicali che supportano le Subsonic API.", - "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto.", - "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio." - } - }, - "label": { - "subsonicField": "La tua password per le API subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token di accesso", - "appId": "ID Applicazione", - "appSecret": "Secret dell'applicazione" - }, - "header": { - "appDetails": "Dettagli dell'applicazione", - "editApp": "Modifica applicazione" - }, - "help": { - "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." - }, - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Modifica applicazione", - "button": { - "regenerateToken": "Rigenera token" - } - }, - "Settings": { - "title": "Impostazioni dell'account", - "header": { - "accountSettings": "Impostazioni dell'account", - "authorizedApps": "App autorizzate", - "avatar": "Avatar", - "changeEmail": "Cambia il mio indirizzo email", - "changePassword": "Cambia la mia password", - "contentFilters": "Filtri di contenuto", - "deleteAccount": "Elimina il mio account", - "hiddenArtists": "Artisti nascosti", - "plugins": "Plugin", - "settingsUpdated": "Impostazioni aggiornate", - "emailFailure": "Non possiamo cambiare il tuo indirizzo email", - "accountFailure": "Non possiamo eliminare il tuo account", - "noApps": "Non hai nessuna applicazione connessa al tuo account.", - "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", - "yourApps": "Le tue applicazioni", - "avatarFailure": "La tua immagine di profilo non può essere salvata", - "passwordFailure": "La tua password non può essere cambiata", - "updateFailure": "Le tue impostazioni non possono essere aggiornate" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Applicazione", - "permissions": "Permessi" - } - }, - "yourApps": { - "header": { - "application": "Applicazione", - "creationDate": "Data di creazione", - "scopes": "Visibilità" - } - }, - "artists": { - "header": { - "creationDate": "Data di creazione", - "name": "Nome" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Password corrente", - "newEmail": "Nuovo indirizzo email", - "newPassword": "Nuova password", - "password": "Password" - }, - "button": { - "password": "Cambia password", - "delete": "Elimina", - "deleteAccountConfirm": "Elimina il mio account", - "deleteAccount": "Elimina il mio account…", - "disableSubsonic": "Disabilita accesso", - "edit": "Modifica", - "refresh": "Aggiorna", - "remove": "Rimuovi", - "removeApp": "Rimuovi applicazione", - "revoke": "Revoca", - "revokeAccess": "Revoca accesso", - "update": "Aggiorna", - "updateSettings": "Aggiorna impostazioni" - }, - "description": { - "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", - "changePassword": { - "paragraph1": "Cambiando la tua password cambierà anche la password della API Subsonic se ne hai richiesta una.", - "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." - }, - "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", - "authorizedApps": "Questa è la lista di applicazioni che hanno accesso ai dati del tuo account.", - "yourApps": "Questa è la lista di applicazioni che hai registrato.", - "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalità aggiuntive.", - "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrà richiesta una conferma." - }, - "modal": { - "changePassword": { - "header": "Cambiare la tua password?", - "content": { - "warning": "Cambiare la tua password avrà queste conseguenze:", - "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", - "subsonic": "La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic" - } - }, - "deleteAccount": { - "header": "Vuoi eliminare il tuo account?", - "content": { - "warning": "Questo è irreversibile e rimuoverà permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." - } - }, - "deleteApp": { - "header": "Rimuovere l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo cancellerà permanentemente l'applicazione e tutti i token associati." - } - }, - "revokeApp": { - "header": "Revoca accesso per l'applicazione \"{ application }\"?", - "content": { - "warning": "Questo eviterà a questa applicazione di accedere al servizio a tuo nome." - } - } - }, - "help": { - "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", - "changePassword": "Per favore controlla se la tua password è corretta", - "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." - }, - "link": { - "managePlugins": "Gestisci i plugin", - "newApp": "Registra una nuova applicazione" - }, - "warning": { - "deleteAccount": "Il tuo account sarà eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota però che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." - }, - "message": { - "currentEmail": "Il tuo indirizzo email corrente è { email }.", - "confirmDelete": "La tua richiesta di eliminazione è stata inviata, il tuo account e il suo contenuto saranno eliminati a breve" - } - }, - "Logout": { - "header": { - "confirm": "Sei sicuro di volerti disconnettere?", - "unauthenticated": "Non hai ancora effettuato l'accesso" - }, - "link": { - "login": "Accedi!" - }, - "title": "Disconnetti", - "button": { - "logout": "Si, disconnettimi!" - }, - "message": { - "loggedIn": "Sei attualmente connesso come { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Torna alle impostazioni" - }, - "title": "Crea una nuova applicazione" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", - "read": { - "label": "Lettura", - "description": "Accesso in sola lettura ai dati utente" - }, - "write": { - "label": "Scrivi", - "description": "Accesso in sola-scrittura ai dati utente" - } - }, - "name": "Nome", - "redirectUri": "URI di redirezione" - }, - "button": { - "create": "Crea applicazione", - "update": "Aggiorna applicazione" - }, - "help": { - "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non è servita sul web." - }, - "header": { - "failure": "Non è stato possibile salvare le tue modifiche" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crea un account", - "resetPassword": "Resetta la tua password" - }, - "placeholder": { - "username": "Inserisci il tuo nome utente o indirizzo email" - }, - "help": { - "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", - "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." - }, - "button": { - "login": "Accedi" - }, - "label": { - "password": "Password", - "username": "Nome utente o indirizzo email" - }, - "header": { - "loginFailure": "Non riusciamo a farti accedere" - } - }, - "SignupForm": { - "button": { - "create": "Crea il mio account" - }, - "label": { - "email": "Indirizzo email", - "password": "Password", - "username": "Nome utente" - }, - "placeholder": { - "email": "Inserisci il tuo indirizzo email", - "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", - "username": "Inserisci il tuo nome utente" - }, - "header": { - "login": "Accedi al tuo account Funkwhale", - "signupFailure": "Il tuo account non può essere creato." - }, - "message": { - "registrationClosed": "Le registrazioni sono chiuse su questa istanza, è necessario un codice d'invito per registrarsi.", - "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate.", - "awaitingReview": "La richiesta di registrazione è stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrà verificato la tua richiesta.", - "accountCreated": "Il tuo account è stato creato con successo. Verifica la tua email prima di fare il login." - } - }, - "Plugin": { - "link": { - "documentation": "Documentazione" - }, - "label": { - "pluginEnabled": "Abilitato", - "library": "Libreria" - }, - "header": { - "failure": "Errore durante il salvataggio del plugin" - }, - "description": { - "library": "Libreria dove i file dovrebbero essere importati." - }, - "button": { - "save": "Salva", - "scan": "Scansiona" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + "description": { + "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", + "funkwhale": "Funkwhale è un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", + "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" }, "header": { - "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", "aboutPod": "A proposito di questa istanza", - "publicContent": "Naviga tra i contenuti pubblici", "findApp": "Trova un'app", + "funkwhale": "Una piattaforma sociale dove ascoltare e condividere musica", + "publicContent": "Naviga tra i contenuti pubblici", "signup": "Registrati" }, - "title": "Informazioni su", + "help": { + "closedRegistrations": "Le iscrizioni sono chiuse su questo pod. Ti puoi registrare su un altro pod usando il link seguente." + }, "link": { "findOtherPod": "Trova un altro pod", "learnMore": "Scopri di più" }, - "description": { - "funkwhale": "Funkwhale è un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", - "publicContent": "Ascolta album e playlist pubbliche condivise su questa istanza.", - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "findApp": "Usa Funkwhale su altri dispositivi con le nostre app.", - "quota": "Gli utenti su questo pod ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" + "message": { + "greeting": "Ciao {username}", + "loggedIn": "Risulti già autenticato!" }, "placeholder": { "noDescription": "Nessuna descrizione disponibile." }, - "message": { - "loggedIn": "Risulti già autenticato!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } utente attivo | { n } utenti attivi", "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" }, - "header": { - "aboutFunkwhale": "A proposito di Funkwhale", - "about": "A proposito di questa istanza Funkwhale", - "contact": "Contatta", - "login": "Accedi", - "newChannels": "Nuovi canali", - "newAlbums": "Album aggiunti di recente", - "signup": "Registrati", - "statistics": "Statistiche", - "links": "Link utili", - "welcome": "Benvenuto a { podName }!" - }, - "link": { - "publicContent": { - "label": "Naviga tra i contenuti pubblici", - "description": "Ascolta album e playlist pubbliche condivise su questa istanza" - }, - "userGuides": { - "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalità", - "label": "Manuali utente" - }, - "findOtherPod": "Trova un'altra istanza", - "learnMore": "Scopri di più", - "mobileApps": { - "label": "App mobile", - "description": "Usa Funkwhale su altri dispositivi con le nostre app" - }, - "rules": "Regole del server", - "viewMore": "Visualizza altri…", - "funkwhale": "Visita funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale è gratuito e sviluppato da un'amichevole comunità di volontari.", - "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata." - }, - "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!", - "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!" - }, - "title": "Pagina Iniziale", - "placeholder": { - "noDescription": "Nessuna descrizione disponibile." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "title": "Aggiornato il { date }" - }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episodio | { n } episodi" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } - }, - "Widget": { - "button": { - "more": "Mostra altri" - } - } - }, - "Player": { - "meta": { - "position": "{ index } su { length }" - }, - "header": { - "player": "Player audio e controlli" - }, - "label": { - "clearQueue": "Pulisci la tua coda", - "expandQueue": "Espandi coda", - "addArtistContentFilter": "Nascondi contenuti di questo artista…", - "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", - "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", - "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", - "audioPlayer": "Riproduttore musicale", - "mute": "Muto", - "nextTrack": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previousTrack": "Traccia precedente", - "shuffleQueue": "Mischia la tua coda", - "unmute": "Non silenziare" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Aggiungi alla coda attuale", - "addToPlaylist": "Aggiungi alla playlist…", - "episodeDetails": "Dettagli dell'episodio", - "hideArtist": "Nascondi contenuti di questo artista", - "discretePlay": "Riproduci", - "playAlbum": "Riproduci album", - "playArtist": "Riproduci artista", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "playPlaylist": "Riproduci playlist", - "startRadio": "Riproduci canzoni simili", - "playTrack": "Riproduci traccia", - "playTracks": "Riproduci tracce", - "report": "Segnala…", - "trackDetails": "Dettagli sulla traccia" - }, - "title": { - "more": "Di più…", - "unavailable": "Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlist…", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Aggiungi ai preferiti", - "addToPlaylist": "Aggiungi alla playlist…", - "addToQueue": "Aggiungi alla coda", - "episodeDetails": "Dettagli dell'episodio", - "playNext": "Riproduci la prossima", - "playNow": "Riproduci ora", - "startRadio": "Riproduci radio", - "removeFromFavorites": "Rimuovi dai preferiti", - "trackDetails": "Dettagli sulla traccia", - "albumDetails": "Vedi album", - "artistDetails": "Vedi artisti", - "channelDetails": "Vedi canali", - "seriesDetails": "Vedi serie" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "Titolo" - } - } - }, - "Widget": { - "empty": { - "noResults": "Nessun risultato" - }, - "button": { - "more": "Mostra altri" - } - }, - "MobileRow": { - "button": { - "actions": "Mostra le azioni per la traccia" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Regola volume" - }, - "button": { - "mute": "Muto", - "unmute": "Non silenziare" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federazione", - "podcasts": "Podcast" - }, - "search": "Ricerca contenuti", - "tag": "Etichetta", - "track": "Traccia" - }, - "link": { - "more": "Altri risultati 🡒", - "fediverse": "Cerca sul fediverso", - "rss": "Iscriviti al podcast tramite RSS" - }, - "header": { - "noResults": "Nessun risultato trovato" - }, - "placeholder": { - "search": "Cerca per artisti, album, tracce…" - }, - "empty": { - "noResults": "Spiacente, questa ricerca non ha restituito risultati" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "search": "Cerca un po' di musica" - }, - "placeholder": { - "search": "Artista, album, traccia…" - }, - "empty": { - "noAlbums": "Nessun album corrisponde alla tua ricerca", - "noArtists": "Nessun artista corrisponde alla tua ricerca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia dell'artista", - "category": "Categoria", - "image": "Immagine del canale", - "description": "Descrizione", - "username": "Fediverso", - "language": "Lingua", - "name": "Nome", - "email": "Indirizzo email del proprietario", - "owner": "Nome proprietario", - "podcast": "Podcast", - "subcategory": "Sottocategoria", - "tags": "Tag" - }, - "placeholder": { - "name": "Nome del canale fantastico", - "username": "nomecanalefantastico" - }, - "header": { - "error": "Errore durante il salvataggio del canale" - }, - "help": { - "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", - "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", - "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", - "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non può essere cambiato una volta impostato." - }, - "loader": { - "loading": "Caricamento" - }, - "legend": { - "purpose": "Per cosa sarà utilizzato questo canale?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Annulla richiesta di follow", - "follow": "Segui", - "unfollow": "Smetti di seguire" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copia" - }, - "help": { - "embed": "Copia/incolla questo codice nel tuo sito HTML", - "width": "Lascia vuoto per un widget adattivo", - "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente." - }, - "label": { - "embed": "Incorpora codice", - "height": "Altezza del widget", - "width": "Larghezza del widget" - }, - "header": { - "preview": "Anteprima" - }, - "warning": { - "anonymous": "La condivisione non funzionerà perchè questa istanza non permette agli utenti anonimi di accedere al contenuto." - }, - "message": { - "copy": "Testo copiato negli appunti!" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Mostra altri" - }, - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Mostra altri" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "addDescription": "Aggiungi una descrizione…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } traccia in | { n } tracce in", - "albums": "{ n } album | { n } album" - }, - "title": "Artista", - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…", - "play": "Riproduci tutti gli album" - }, - "modal": { - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", - "builder": "Crea", - "created": "Radio creata", - "updated": "Radio aggiornata" - }, - "table": { - "filter": { - "header": { - "actions": "Azioni", - "candidates": "Candidati", - "config": "Configurazione", - "exclude": "Escludi", - "name": "Filtra nome" - } - } - }, - "button": { - "filter": "Aggiungi filtro", - "save": "Salva" - }, - "label": { - "filter": "Aggiungi filtri per personalizzare la tua radio", - "description": "Descrizione", - "public": "Mostra pubblicamente", - "name": "Nome radio" - }, - "placeholder": { - "description": "La mia stupenda descrizione", - "name": "La mia eccezionale radio" - }, - "title": "Creatore Radio", - "option": { - "filter": "Seleziona un filtro" - }, - "description": { - "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrà tracce in accordo con i tuoi criteri." - } - }, - "Filter": { - "cancelButton": "Annulla", - "excludeLabel": "Escludi", - "removeButton": "Rimuovi", - "matchingTracksModalHeader": "Tracce che corrispondono al filtro" - } - }, - "FileUpload": { - "tooltip": { - "network": "Si è verificato un errore di rete durante il caricamento del file", - "size": "Impossibile caricare questo file, controlla che non sia troppo grande", - "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", - "retry": "Riprova", - "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", - "timeout": "Caricamento scaduto, per favore riprova" - }, - "table": { - "upload": { - "header": { - "actions": "Azioni", - "filename": "Nome file", - "size": "Dimensione", - "status": "Stato" - }, - "status": { - "pending": "In sospeso", - "uploaded": "Caricato", - "uploading": "Caricamento…" - } - } - }, - "button": { - "cancel": "Annulla", - "retry": "Riprova upload falliti" - }, - "label": { - "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle", - "remainingSpace": "Spazio di archiviazione rimanente", - "extensions": "Estensioni supportate: { extensions }" - }, - "header": { - "failure": "Errore durante l'avvio dell'importazione", - "server": "Stato dell'importazione", - "status": "Stato dell'importazione", - "local": "Importa musica dalla tua memoria locale" - }, - "link": { - "processing": "Elaborazione", - "uploading": "Caricamento", - "picard": "Ti consigliamo di utilizzare Picard per quello scopo." - }, - "description": { - "import": "Risultati della tua importazione:", - "previousImport": "Risultati della tua precedente importazione:" - }, - "message": { - "local": { - "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", - "tag": "I file musicali che stai caricando sono correttamente etichettati.", - "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", - "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Un breve riassunto che descrive le tue modifiche." - }, - "button": { - "cancel": "Annulla", - "clear": "Svuota", - "reset": "Ripristina al valore iniziale", - "showUnreviewed": "Restringi alle modifiche non revisionate", - "showAll": "Mostra tutte le modifiche", - "submit": "Invia e applica modifica", - "new": "Invia un'altra modifica", - "suggest": "Invia suggerimento" - }, - "header": { - "failure": "Errore durante l'invio della modifica", - "recentEdits": "Modifiche recenti", - "unreviewed": "Modifiche recenti in attesa di revisione", - "success": "La tua modifica è stata inviata correttamente." - }, - "notApplicable": "N/D", - "empty": { - "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." - }, - "label": { - "summary": "Riassunto (opzionale)" - }, - "message": { - "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." - } - }, - "Albums": { - "link": { - "addMusic": "Aggiungi musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando gli album" - }, - "placeholder": { - "search": "Inserisci il titolo dell'album…" - }, - "empty": { - "noResults": "Nessun risultato corrispondente alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca", - "tags": "Etichette" - }, - "button": { - "search": "Cerca" - } - }, - "Artists": { - "button": { - "upload": "Aggiungi musica", - "search": "Cerca" - }, - "label": { - "search": "Nome dell'artista", - "excludeCompilation": "Escludi gli artisti della compilation", - "tags": "Etichette" - }, - "title": "Artisti", - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando artisti" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cerca…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Diritti d'autore", - "license": "Licenza", - "series": "Serie", - "url": "URL", - "year": "Anno" - }, - "track": { - "bitrate": { - "label": "Bitrate" - }, - "codec": "Codec", - "downloads": "Download", - "duration": "Durata", - "size": "Dimensione" - } - }, - "header": { - "episode": "Dettagli Episodio", - "library": "Librerie Correlate", - "playlists": "Playlist correlate", - "release": "Dettagli Rilascio", - "track": "Dettagli Traccia" - }, - "notApplicable": "N/D", - "description": { - "library": "Questa traccia è presente nelle seguenti librerie:" - }, - "link": { - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "header": { - "channels": "Canali", - "tracks": "Tracce" - } - }, - "ArtistDetail": { - "header": { - "album": "Album di questo artista", - "track": "Nuove tracce di questo artista", - "library": "Librerie dell'utente" - }, - "button": { - "more": "Carica di più…", - "filter": "Rimuovi filtro" - }, - "link": { - "filter": "Revisiona i miei filtri" - }, - "description": { - "library": "Questo artista è presente nelle seguenti librerie:" - }, - "message": { - "filter": "Stai attualmente nascondendo i contenuti di questo artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Si è verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", - "unknownError": { - "message": "Si è verificato un errore sconosciuto", - "label": "Errore sconosciuto" - }, - "invalidMetadata": { - "label": "Metadati non validi", - "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." - } - }, - "button": { - "close": "Chiudi" - }, - "table": { - "error": { - "debug": "Informazioni di debug", - "errorDetail": "Dettaglio dell'errore", - "errorType": "Tipo di errore", - "help": "Chiedi aiuto" - } - }, - "header": { - "importDetail": "Dettaglio dell'importazione" - }, - "link": { - "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)", - "documentation": "Leggi la nostra documentazione per questo errore" - }, - "message": { - "importDetail": "Il caricamento è ancora in corso e presto sarà processato dal server.", - "importSuccess": "Il caricamento è stato processato con successo dal server." - }, - "warning": { - "importSkipped": "Il caricamento è stato saltato perchè uno simile è già disponibile in una delle tue librerie." - } - }, - "EditCard": { - "button": { - "approve": "Approva", - "delete": "Elimina", - "reject": "Rifiuta" - }, - "status": { - "approved": "Approvato", - "applied": "Approvata ed applicata", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "modal": { - "delete": { - "header": "Eliminare questo suggerimento?" - }, - "content": { - "warning": "Il suggerimento sarà completamente rimosso, questa azione è irreversibile." - } - }, - "table": { - "update": { - "header": { - "field": "Campo", - "newValue": "Nuovo valore", - "oldValue": "Vecchio valore" - }, - "notApplicable": "N/D" - } - }, - "header": { - "modification": "Modifica { id }" - }, - "link": { - "track": "Traccia #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Navigare i podcast" - }, - "button": { - "cancel": "Annulla", - "channel": "Crea un Canale", - "search": "Cerca", - "subscribe": "Iscriviti", - "feed": "Iscriviti a un feed" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "label": { - "search": "Titolo del Podcast", - "tags": "Etichette" - }, - "title": "Podcast", - "pagination": { - "results": "Risultati per pagina" - }, - "placeholder": { - "search": "Cerca…" - }, - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "header": { - "browse": "Sfogliando radio", - "instance": "Radio dell'istanza", - "user": "Radio dell'utente" - }, - "button": { - "add": "Crea radio", - "create": "Crea la tua radio" - }, - "placeholder": { - "search": "Inserisci un nome di una radio…" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, - "title": "Radio", - "pagination": { - "results": "Risultati per pagina" - }, - "label": { - "search": "Cerca" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Annulla", - "delete": "Elimina…", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }", - "musicbrainz": "Vedi su MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Annulla", - "delete": "Elimina…", - "download": "Scarica", - "edit": "Modifica", - "embed": "Incorpora", - "more": "Di più…", - "play": "Riproduci" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarà rimossa, così come i relativi file e dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora questa traccia nel tuo sito web" - } - }, - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "discogs": "Cerca su Discogs", - "wikipedia": "Cerca su Wikipedia", - "django": "Vedi nell'amministrazione di Django", - "domain": "Visualizza su { dominio }" - }, - "title": "Traccia" - }, - "AlbumEdit": { - "header": { - "edit": "Modifica questo album", - "suggest": "Suggerisci una modifica su questo album" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modifica questo artista", - "suggest": "Suggerisci una modifica su questo artista" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "TrackEdit": { - "header": { - "edit": "Modifica questa traccia", - "suggest": "Suggerisci una modifica su questa traccia" - }, - "message": { - "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episodi", - "tracks": "Tracce", - "libraries": "Librerie dell'utente" - }, - "description": { - "libraries": "Questo album è presente nelle seguenti librerie:" - }, - "meta": { - "volume": "Volume { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importa" - } - }, - "FsLogs": { - "empty": { - "notStarted": "L'importazione non è ancora cominciata" - } - }, - "Home": { - "title": "Libreria", - "header": { - "newChannels": "Nuovi canali", - "playlists": "Playlist", - "recentlyAdded": "Aggiunte recentemente", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" - } - }, - "TagSelector": { - "placeholder": { - "search": "Cerca…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } preferito | { n } preferiti" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "link": { - "library": "Sfoglia libreria" - }, - "loader": { - "loading": "Caricando i tuoi preferiti…" - }, - "empty": { - "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" - }, - "pagination": { - "results": "Risultati per pagina" - }, - "title": "I Tuoi Preferiti" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Aggiungi ai preferiti", - "remove": "Rimuovi dai preferiti" - }, - "label": { - "inFavorites": "Nei preferiti" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } file | { n } file", - "quota": "Spazio di archiviazione rimanente:" - }, - "button": { - "cancel": "Annulla", - "close": "Chiudi", - "finishLater": "Finisci più tardi", - "next": "Prossimo passo", - "previous": "Passo precedente", - "publish": "Pubblica", - "update": "Aggiorna" - }, - "header": { - "uploadFiles": "File da caricare", - "processing": "Elaborazione file", - "publish": "Pubblica audio", - "uploadDetails": "Dettagli di caricamento" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "label": { - "album": "Album", - "series": "Serie" - }, - "option": { - "none": "Nessuno" - } - }, - "LicenseSelect": { - "link": { - "license": "A proposito di questa licenza" - }, - "label": { - "license": "Licenza" - }, - "option": { - "none": "Nessuno" - } - }, - "UploadForm": { - "help": { - "license": "Aggiungi una licenza al file per garantire alcune libertà al tuo pubblico." - }, - "label": { - "openBrowser": "Sfoglia…", - "channel": "Canale" - }, - "message": { - "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", - "pending": "Hai alcune bozze di upload in attesa di pubblicazione." - }, - "button": { - "edit": "Modifica", - "ignore": "Ignora", - "remove": "Rimuovi", - "resume": "Riprendi", - "retry": "Riprova" - }, - "header": { - "error": "Errore durante la pubblicazione" - }, - "status": { - "errored": "Errore", - "pending": "In sospeso", - "uploading": "Caricamento" - }, - "description": { - "extensions": "Estensioni supportate: { extensions }" - }, - "warning": { - "quota": "Non hai più spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." - } - }, - "AlbumModal": { - "button": { - "cancel": "Annulla", - "create": "Crea" - }, - "header": { - "newAlbum": "Nuovo album", - "newSeries": "Nuova serie" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descrizione", - "position": "Posizione", - "tags": "Etichette", - "title": "Titolo", - "image": "Immagine Traccia" - } - }, - "AlbumForm": { - "header": { - "error": "Errore durante la creazione" - }, - "label": { - "albumTitle": "Titolo" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Iscriviti", - "unsubscribe": "Disiscriviti" - }, - "help": { - "auth": "Per iscriverti a questo canale devi prima fare l'accesso" - } - } + "title": "Informazioni su" }, "AboutPod": { - "stat": { - "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", - "activeUsers": "{ n } utente attivo | { n } utenti attivi", - "albumsCount": "Album | Album", - "artistsCount": "Artista | Artisti", - "listeningsCount": "ascolti | ascolti", - "tracksCount": "traccia | tracce" + "feature": { + "allowList": "Lista dei consentiti", + "anonymousAccess": "Accesso anonimo", + "federation": "Federazione", + "quota": "Quota di upload", + "registrations": "Iscrizioni", + "status": { + "closed": "Chiuso", + "disabled": "Disabilitato", + "enabled": "Abilitato", + "open": "Aperto" + }, + "version": "Versione Funkwhale" + }, + "header": { + "about": "A proposito di questa istanza", + "contact": "Contatta", + "features": "Funzionalità", + "rules": "Regole", + "statistics": "Statistiche", + "terms": "Termini e regole sulla privacy" }, - "title": "Informazioni su", "link": { "about": "A proposito di questa istanza", "features": "Funzionalità", @@ -1438,27 +69,8 @@ "statistics": "Statistiche", "terms": "Termini e regole sulla privacy" }, - "header": { - "about": "A proposito di questa istanza", - "contact": "Contatta", - "features": "Funzionalità", - "rules": "Regole", - "statistics": "Statistiche", - "terms": "Termini e regole sulla privacy" - }, - "feature": { - "allowList": "Lista dei consentiti", - "anonymousAccess": "Accesso anonimo", - "status": { - "closed": "Chiuso", - "disabled": "Disabilitato", - "enabled": "Abilitato", - "open": "Aperto" - }, - "federation": "Federazione", - "version": "Versione Funkwhale", - "registrations": "Iscrizioni", - "quota": "Quota di upload" + "message": { + "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" }, "notApplicable": "N/D", "placeholder": { @@ -1466,332 +78,208 @@ "noRules": "Nessuna regola disponibile.", "noTerms": "Nessun termine disponibile." }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "albumsCount": "Album | Album", + "artistsCount": "Artista | Artisti", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica", + "listeningsCount": "ascolti | ascolti", + "tracksCount": "traccia | tracce" + }, + "title": "Informazioni su" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Su questo pod gira Funkwhale, un progetto guidato dalla comunità che ti permette di ascoltare e condividere musica e file audio in una rete aperta e decentralizzata.", + "paragraph2": "Funkwhale è gratuito e sviluppato da un'amichevole comunità di volontari." + }, + "quota": "Gli utenti su questa istanza ricevono anche { quota } di spazio di archiviazione in cui caricare i loro contenuti!", + "signup": "Iscriviti ora per tenere traccia dei tuoi preferiti, creare playlist, scoprire nuovi contenuti e molto altro!" + }, + "header": { + "about": "A proposito di questa istanza Funkwhale", + "aboutFunkwhale": "A proposito di Funkwhale", + "contact": "Contatta", + "links": "Link utili", + "login": "Accedi", + "newAlbums": "Album aggiunti di recente", + "newChannels": "Nuovi canali", + "signup": "Registrati", + "statistics": "Statistiche", + "welcome": "Benvenuto a { podName }!" + }, + "help": { + "registrationsClosed": "Le iscrizioni sono chiuse su questa istanza. Puoi registrarti su un'altra istanza usando il link sottostante." + }, + "link": { + "findOtherPod": "Trova un'altra istanza", + "funkwhale": "Visita funkwhale.audio", + "learnMore": "Scopri di più", + "mobileApps": { + "description": "Usa Funkwhale su altri dispositivi con le nostre app", + "label": "App mobile" + }, + "publicContent": { + "description": "Ascolta album e playlist pubbliche condivise su questa istanza", + "label": "Naviga tra i contenuti pubblici" + }, + "rules": "Regole del server", + "userGuides": { + "description": "Scopri tutto quello che devi sapere su Funkwhale e le sue funzionalità", + "label": "Manuali utente" + }, + "viewMore": "Visualizza altri…" + }, + "placeholder": { + "noDescription": "Nessuna descrizione disponibile." + }, + "stat": { + "activeUsers": "{ n } utente attivo | { n } utenti attivi", + "hoursOfMusic": "{ n } ora di musica | { n } ore di musica" + }, + "title": "Pagina Iniziale" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina non trovata!" + }, + "link": { + "home": "Vai alla pagina iniziale" + }, "message": { - "contact": "Scrivici un'email: {'{{'} contactEmail {'}}'}" + "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" + }, + "title": "Pagina Non Trovata" + }, + "Queue": { + "button": { + "clear": "Svuota", + "close": "Chiudi", + "stopRadio": "Ferma radio" + }, + "header": { + "failure": "La traccia non può essere caricata", + "noSources": "La traccia non ha sorgenti disponibili.", + "radio": "Hai una radio in riproduzione" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artista…", + "duration": "Durata", + "enterFullscreen": "Entra la modalità a schermo intero", + "exitFullscreen": "Esci dalla modalità a schermo intero", + "favorite": "Traccia preferita", + "next": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "populatingRadio": "Recupero traccia radio…", + "previous": "Traccia precedente", + "queue": "Coda", + "remove": "Rimuovi", + "restart": "Riavvia traccia", + "selectTrack": "Seleziona traccia", + "showCoverArt": "Mostra Copertina" + }, + "message": { + "automaticPlay": "La traccia seguente verrà riprodotta automaticamente tra pochi secondi…", + "radio": "Le nuove tracce saranno allegate qui automaticamente.", + "webglUnsupported": "Il tuo browser non sembra supportare WebGL2." + }, + "meta": { + "end": "Fine", + "queuePosition": "Traccia { index } su { length }", + "startTime": "00:00", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + }, + "warning": { + "connectivity": "Potresti avere un problema di connettività." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } su { total } selezionato | { n } su { total } selezionati", - "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", - "go": "Vai", - "launch": "Inizia", - "refresh": "Aggiorna tabella dei contenuti", - "select": "Seleziona", - "selectAll": "Seleziona tutti gli elementi", - "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", - "selectCurrentPage": "Seleziona solo la pagina attuale" + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverso", + "rss": "RSS", + "search": "Cerca" + }, + "description": { + "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", + "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." + }, + "error": { + "fetchFailed": "Questo oggetto non può essere recuperato" + }, + "header": { + "fetchFailed": "Errore durante il recupero dell'oggetto" + }, + "label": { + "fediverse": { + "fieldLabel": "Fediverso", + "fieldPlaceholder": "{'@'}username{'@'}esempio.com", + "title": "Iscriviti ad un podcast condiviso sul Fediverso" }, - "message": { - "success": "L'azione { action } è stata lanciata con successo su { n } elemento | L'azione { action } è stata lanciata con successo su { n } elementi", - "needsRefresh": "Il contenuto è stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato" - }, - "label": { - "actions": "Azioni", - "performAction": "Esegui azioni" - }, - "modal": { - "performAction": { - "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?", - "content": { - "warning": "Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se è proprio quello che vuoi." - } - } - }, - "header": { - "error": "Errore durante l'esecuzione dell'azione" + "rss": { + "fieldLabel": "Indirizzo del feed RSS", + "fieldPlaceholder": "https://website.example.com/rss.xml", + "title": "Iscriviti al feed RSS di un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "docs": "Documentazione", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - } - }, - "UserModal": { - "link": { - "about": "Informazioni", - "chat": "Chat", - "forum": "Forum", - "support": "Aiuto", - "git": "Elenco problemi", - "login": "Accedi", - "logout": "Disconnetti", - "notifications": "Notifiche", - "profile": "Profilo", - "settings": "Impostazioni", - "signup": "Registrati" - }, - "label": { - "shortcuts": "Scorciatoie da tastiera", - "language": "Lingua", - "theme": "Tema" - }, - "header": { - "options": "Opzioni" - }, - "button": { - "switchInstance": "Usa un'altra istanza" - } - }, - "DangerousButton": { - "button": { - "cancel": "Annulla", - "confirm": "Conferma" - }, - "header": { - "confirm": "Vuoi confermare questa azione?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Annulla", - "edit": "Modifica", - "less": "Mostra meno", - "more": "Mostra altri", - "update": "Aggiorna descrizione" - }, - "header": { - "failure": "Errore durante l'aggiornamento della descrizione" - }, - "empty": { - "noDescription": "Nessuna descrizione disponibile" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Pulisci" - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Riduci", - "expand": "Espandi" - } - }, - "CopyInput": { - "button": { - "copy": "Copia" - }, - "message": { - "success": "Testo copiato negli appunti!" - } - }, - "LoginModal": { - "link": { - "login": "Accedi", - "signup": "Registrati" - }, - "header": { - "unauthenticated": "Non autenticato" - }, - "description": { - "noAccess": "Non hai i permessi di accesso!" - } - }, - "ContentForm": { - "help": { - "markdown": "La sintassi Markdown è supportata." - }, - "empty": { - "noContent": "Nulla da visualizzare." - }, - "button": { - "preview": "Anteprima", - "write": "Scrivi" - }, - "placeholder": { - "input": "Scrivi alcune parole qui…" - } - }, - "EmptyState": { - "header": { - "noResults": "Nessun risultato trovato." - }, - "button": { - "refresh": "Aggiorna" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file è 5MB." - }, - "button": { - "remove": "Rimuovi" - }, - "label": { - "upload": "Carica Nuova Immagine…" - }, - "loader": { - "uploading": "Caricamento file…" - }, - "header": { - "failure": "Il tuo allegato non può essere salvato" - } - }, - "ExpandableDiv": { - "button": { - "less": "Mostra meno", - "more": "Mostra altri" - } + "warning": { + "unsupported": "Questo tipo di oggetto non è ancora supportato" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - } + "ShortcutsModal": { + "button": { + "close": "Chiudi" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } è già nella { 1 }." - }, - "button": { - "addDuplicate": "Aggiungi comunque", - "addToPlaylist": "Aggiungi a questa playlist", - "addTrack": "Aggiungi traccia", - "cancel": "Annulla", - "edit": "Modifica" - }, - "header": { - "addToPlaylist": "Aggiungi alla playlist", - "available": "Playlist disponibili", - "manage": "Gestisci playlist", - "noResults": "Nessun risultato che corrisponde al tuo filtro", - "addFailure": "La traccia non può essere aggiunta alla lista di riproduzione" - }, - "table": { - "edit": { - "header": { - "edit": "Modifica", - "lastModification": "Ultima modifica", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "placeholder": { - "filterPlaylist": "Inserisci il nome della playlist" - }, - "label": { - "filter": "Filtra" - }, - "empty": { - "noPlaylists": "Non sono ancora state create playlist" - } + "header": { + "modal": "Scorciatoie da tastiera" }, - "Editor": { - "button": { - "addDuplicate": "Aggiungi comunque", - "clear": "Pulisci playlist", - "copy": "Copia la coda corrente in questa playlist", - "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" + "shortcut": { + "audio": { + "clearQueue": "Svuota la coda", + "decreaseVolume": "Diminuisci volume", + "expandQueue": "Espandi coda/visualizzazione player", + "increaseVolume": "Aumenta volume", + "label": "Scorciatoie del lettore audio", + "playNext": "Riproduci traccia successiva", + "playPause": "Pausa/riproduci la traccia corrente", + "playPrevious": "Riproduci traccia precedente", + "seekBack30": "Salta indietro 30s", + "seekBack5": "Salta indietro 5s", + "seekForward30": "Salta avanti 30s", + "seekForward5": "Salta avanti 5s", + "shuffleQueue": "Mischia la tua coda", + "toggleFavorite": "Inverti preferito", + "toggleLoop": "Cambia tipo di riproduzione della coda", + "toggleMute": "Cambia muto" }, - "error": { - "sync": "Si è verificato un errore durante il salvataggio delle modifiche" - }, - "message": { - "sync": "Modifiche sincronizzate con il server" - }, - "modal": { - "clearPlaylist": { - "header": "Vuoi pulire la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerà tutte le tracce da questa lista di riproduzione e non può essere annullato." - } - } - }, - "help": { - "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" - }, - "header": { - "editor": "Modifica lista di riproduzione" - }, - "warning": { - "duplicate": "Alcune tracce nella tua coda sono già presenti in questo elenco di riproduzione:" - }, - "loading": { - "sync": "Sincronizzando le modifiche con il server…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Aggiungi alla playlist…" - } - }, - "Form": { - "header": { - "createPlaylist": "Crea una nuova lista di riproduzione", - "createSuccess": "Lista di riproduzione creata", - "updateSuccess": "Lista di riproduzione aggiornata", - "createFailure": "La lista di riproduzione non può essere creata" - }, - "button": { - "create": "Crea playlist", - "update": "Aggiorna lista di riproduzione" - }, - "placeholder": { - "name": "La mia eccezionale playlist" - }, - "label": { - "name": "Nome lista di riproduzione", - "visibility": "Visibilità lista di riproduzione" - } - }, - "Widget": { - "button": { - "create": "Crea Playlist", - "more": "Mostra altri" - }, - "placeholder": { - "noPlaylists": "Non sono ancora state create playlist" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", - "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", - "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" - }, - "button": { - "approve": "Approva", - "markRead": "Segna come letta", - "markUnread": "Segna come non letta", - "reject": "Rifiuta" + "general": { + "focus": "Metti in primo piano la barra di ricerca", + "label": "Scorciatoie generali", + "show": "Mostra scorciatoie da tastiera disponibili", + "unfocus": "Togli il primo piano dalla barra di ricerca" } } }, "Sidebar": { + "header": { + "administration": "Amministrazione", + "explore": "Esplora", + "library": "La Mia Libreria", + "main": "Navigazione principale", + "more": "Altri" + }, + "label": { + "add": "Aggiungi contenuto", + "administration": "Amministrazione", + "edits": "Revisioni delle modifiche in sospeso", + "follows": "Richiesta di seguire in sospeso", + "language": "Lingua", + "main": "Menu principale", + "play": "Riproduci questa traccia", + "theme": "Tema" + }, "link": { "about": "A proposito di questa istanza", "albums": "Albums", @@ -1809,44 +297,1976 @@ "radios": "Radio", "search": "Cerca", "settings": "Impostazioni", + "switchInstance": "Cambia istanza", "users": "Utenti" - }, - "label": { - "add": "Aggiungi contenuto", - "administration": "Amministrazione", - "language": "Lingua", - "main": "Menu principale", - "follows": "Richiesta di seguire in sospeso", - "edits": "Revisioni delle modifiche in sospeso", - "play": "Riproduci questa traccia", - "theme": "Tema" - }, - "header": { - "administration": "Amministrazione", - "explore": "Esplora", - "main": "Navigazione principale", - "more": "Altri", - "library": "La Mia Libreria" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Salva" + }, + "header": { + "error": "Errore durante il salvataggio delle impostazioni", + "image": "Immagine attuale" + }, + "message": { + "success": "Impostazioni aggiornate con successo." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Aggiungi campo", + "edit": "Modifica modulo", + "preview": "Anteprima modulo" + }, + "help": { + "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni è attiva.", + "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." + }, + "label": { + "additionalField": "Campo aggiuntivo", + "additionalFields": "Campi aggiuntivi", + "delete": "Elimina", + "helpText": "Suggerimento", + "moveDown": "Sposta giù", + "moveUp": "Sposta su" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Azioni", + "label": "Etichetta campo", + "required": "Richiesto", + "type": "Tipo campo" + }, + "required": { + "false": "No", + "true": "Si" + }, + "type": { + "long": "Testo lungo", + "short": "Testo breve" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Aggiornato il { date }" + }, + "ChannelEntries": { + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere il suo contenuto." + } + }, + "ChannelForm": { + "header": { + "error": "Errore durante il salvataggio del canale" + }, + "help": { + "discography": "Pubblica la musica che fai come una bella discografia di album e singoli.", + "podcast": "Carica i tuoi episodi e tieni aggiornata la tua community.", + "podcastFields": "Utilizzato per itunes:email e itunes:name field richiesto da alcune piattaforme come Spotify o iTunes.", + "username": "Utilizzato negli URL e per seguire questo canale nel Fediverso. Non può essere cambiato una volta impostato." + }, + "label": { + "category": "Categoria", + "description": "Descrizione", + "discography": "Discografia dell'artista", + "email": "Indirizzo email del proprietario", + "image": "Immagine del canale", + "language": "Lingua", + "name": "Nome", + "owner": "Nome proprietario", + "podcast": "Podcast", + "subcategory": "Sottocategoria", + "tags": "Tag", + "username": "Fediverso" + }, + "legend": { + "purpose": "Per cosa sarà utilizzato questo canale?" + }, + "loader": { + "loading": "Caricamento" + }, + "placeholder": { + "name": "Nome del canale fantastico", + "username": "nomecanalefantastico" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } episodio | { n } episodi" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Mostra altri" + }, + "help": { + "subscribe": "Potresti aver bisogno di seguire questo canale per vedere i suoi contenuti." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Mostra altri" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copia" + }, + "header": { + "preview": "Anteprima" + }, + "help": { + "anonymous": "Contatta i tuoi amministratori e chiedigli di cambiare l'impostazione corrispondente.", + "embed": "Copia/incolla questo codice nel tuo sito HTML", + "width": "Lascia vuoto per un widget adattivo" + }, + "label": { + "embed": "Incorpora codice", + "height": "Altezza del widget", + "width": "Larghezza del widget" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "warning": { + "anonymous": "La condivisione non funzionerà perchè questa istanza non permette agli utenti anonimi di accedere al contenuto." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Annulla richiesta di follow", + "follow": "Segui", + "unfollow": "Smetti di seguire" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda attuale", + "discretePlay": "Riproduci", + "episodeDetails": "Dettagli dell'episodio", + "hideArtist": "Nascondi contenuti di questo artista", + "playAlbum": "Riproduci album", + "playArtist": "Riproduci artista", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "playPlaylist": "Riproduci playlist", + "playTrack": "Riproduci traccia", + "playTracks": "Riproduci tracce", + "report": "Segnala…", + "startRadio": "Riproduci canzoni simili", + "trackDetails": "Dettagli sulla traccia" + }, + "title": { + "more": "Di più…", + "unavailable": "Questa traccia non è disponibile in nessuna libreria alla quale hai accesso" + } + }, + "Player": { + "header": { + "player": "Player audio e controlli" + }, + "label": { + "addArtistContentFilter": "Nascondi contenuti di questo artista…", + "audioPlayer": "Riproduttore musicale", + "clearQueue": "Pulisci la tua coda", + "expandQueue": "Espandi coda", + "loopingDisabled": "Ripetizione disattivata. Clicca per attivare la ripetizione della singola traccia.", + "loopingSingle": "Ripeti una singola traccia. Clicca per ripetere l'intera coda.", + "loopingWholeQueue": "Ripete l'intera coda. Clicca per disattivare la ripetizione.", + "mute": "Muto", + "nextTrack": "Prossima traccia", + "pause": "Pausa", + "play": "Riproduci", + "previousTrack": "Traccia precedente", + "shuffleQueue": "Mischia la tua coda", + "unmute": "Non silenziare" + }, + "meta": { + "position": "{ index } su { length }", + "unknownAlbum": "Album Sconosciuto", + "unknownArtist": "Artista Sconosciuto" + } + }, + "PlayerControls": { + "labels": { + "next": "Prossima traccia", + "pause": "Pausa", + "previous": "Traccia precedente" + } + }, + "Search": { + "empty": { + "noAlbums": "Nessun album corrisponde alla tua ricerca", + "noArtists": "Nessun artista corrisponde alla tua ricerca" + }, + "header": { + "albums": "Albums", + "artists": "Artisti", + "search": "Cerca un po' di musica" + }, + "placeholder": { + "search": "Artista, album, traccia…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Spiacente, questa ricerca non ha restituito risultati" + }, + "header": { + "noResults": "Nessun risultato trovato" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federazione", + "podcasts": "Podcast" + }, + "search": "Ricerca contenuti", + "tag": "Etichetta", + "track": "Traccia" + }, + "link": { + "fediverse": "Cerca sul fediverso", + "more": "Altri risultati 🡒", + "rss": "Iscriviti al podcast tramite RSS" + }, + "placeholder": { + "search": "Cerca per artisti, album, tracce…" + } + }, + "VolumeControl": { + "button": { + "mute": "Muto", + "unmute": "Non silenziare" + }, + "label": { + "slider": "Regola volume" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostra le azioni per la traccia" + } + }, + "Modal": { + "button": { + "addToFavorites": "Aggiungi ai preferiti", + "addToPlaylist": "Aggiungi alla playlist…", + "addToQueue": "Aggiungi alla coda", + "albumDetails": "Vedi album", + "artistDetails": "Vedi artisti", + "channelDetails": "Vedi canali", + "episodeDetails": "Dettagli dell'episodio", + "playNext": "Riproduci la prossima", + "playNow": "Riproduci ora", + "removeFromFavorites": "Rimuovi dai preferiti", + "seriesDetails": "Vedi serie", + "startRadio": "Riproduci radio", + "trackDetails": "Dettagli sulla traccia" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "Titolo" + } + } + }, + "Widget": { + "button": { + "more": "Mostra altri" + }, + "empty": { + "noResults": "Nessun risultato" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Rigenera token" + }, + "header": { + "appDetails": "Dettagli dell'applicazione", + "appSecretWarning": "Conserva una copia di questo token in un luogo sicuro.", + "editApp": "Modifica applicazione" + }, + "help": { + "appDetails": "L'ID dell'applicazione e il suo secret sono valori molto sensibili e devono essere trattati come password. Non condividerli con nessun altro." + }, + "label": { + "accessToken": "Token di accesso", + "appId": "ID Applicazione", + "appSecret": "Secret dell'applicazione" + }, + "link": { + "settings": "Torna alle impostazioni" + }, + "message": { + "appSecretWarning": "Non ti sarà possibile vederlo di nuovo una volta lasciata questa schermata." + }, + "title": "Modifica applicazione" + }, + "ApplicationForm": { + "button": { + "create": "Crea applicazione", + "update": "Aggiorna applicazione" + }, + "header": { + "failure": "Non è stato possibile salvare le tue modifiche" + }, + "help": { + "redirectUri": "Usa \"urn:ietf:wg:oauth:2.0:oob\" come URI di reindirizzamento se la tua applicazione non è servita sul web." + }, + "label": { + "name": "Nome", + "redirectUri": "URI di redirezione", + "scopes": { + "description": "Controllando i permessi \"Lettura\" o \"Scrittura\" del livello superiore implica l'accesso a tutti i corrispondenti permessi dei livelli inferiori.", + "read": { + "description": "Accesso in sola lettura ai dati utente", + "label": "Lettura" + }, + "write": { + "description": "Accesso in sola-scrittura ai dati utente", + "label": "Scrivi" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Torna alle impostazioni" + }, + "title": "Crea una nuova applicazione" + }, + "Authorize": { + "button": { + "authorize": "Autorizza { app }" + }, + "header": { + "access": "{ app } vuole accedere al tuo account Funkwhale", + "allScopes": "Accesso completo", + "authorize": "Autorizza app di terze parti", + "authorizeFailure": "Errore durante l'autorizzazione dell'applicazione", + "fetchFailure": "Errore durante il recupero dei dati dell'applicazione", + "readOnly": "Sola lettura", + "writeOnly": "Sola-scrittura" + }, + "help": { + "copyCode": "Ti sarà mostrato un codice da copiare-incollare nell'applicazione.", + "pasteCode": "Copia-incolla il codice seguente in questa applicazione:", + "redirect": "Sarai reindirizzato su { 0 }" + }, + "message": { + "unknownPermissions": "L'applicazione sta anche richiedendo i seguenti permessi sconosciuti:" + }, + "title": "Permetti applicazione" + }, + "LoginForm": { + "button": { + "login": "Accedi" + }, + "header": { + "loginFailure": "Non riusciamo a farti accedere" + }, + "help": { + "approvalRequired": "Se ti sei registrato di recente potresti dover aspettare che il nostro team di moderazione controlli il tuo account o verificare la tua email.", + "invalidCredentials": "Per favore, controlla che la combinazione username/password sia corretta e assicurati di aver verificato il tuo indirizzo email." + }, + "label": { + "password": "Password", + "username": "Nome utente o indirizzo email" + }, + "link": { + "createAccount": "Crea un account", + "resetPassword": "Resetta la tua password" + }, + "message": { + "redirect": "Verrai rediretto su {domain} per autenticarti" + }, + "placeholder": { + "username": "Inserisci il tuo nome utente o indirizzo email" + } + }, + "Logout": { + "button": { + "logout": "Si, disconnettimi!" + }, + "header": { + "confirm": "Sei sicuro di volerti disconnettere?", + "unauthenticated": "Non hai ancora effettuato l'accesso" + }, + "link": { + "login": "Accedi!" + }, + "message": { + "loggedIn": "Sei attualmente connesso come { username }" + }, + "title": "Disconnetti" + }, + "Plugin": { + "button": { + "save": "Salva", + "scan": "Scansiona" + }, + "description": { + "library": "Libreria dove i file dovrebbero essere importati." + }, + "header": { + "failure": "Errore durante il salvataggio del plugin" + }, + "label": { + "library": "Libreria", + "pluginEnabled": "Abilitato" + }, + "link": { + "documentation": "Documentazione" + } + }, + "Settings": { + "button": { + "delete": "Elimina", + "deleteAccount": "Elimina il mio account…", + "deleteAccountConfirm": "Elimina il mio account", + "disableSubsonic": "Disabilita accesso", + "edit": "Modifica", + "password": "Cambia password", + "refresh": "Aggiorna", + "remove": "Rimuovi", + "removeApp": "Rimuovi applicazione", + "revoke": "Revoca", + "revokeAccess": "Revoca accesso", + "update": "Aggiorna", + "updateSettings": "Aggiorna impostazioni" + }, + "description": { + "authorizedApps": "Questa è la lista di applicazioni che hanno accesso ai dati del tuo account.", + "changeEmail": "Cambia l'indirizzo email associato al tuo account. Ti invieremo una conferma al nuovo indirizzo.", + "changePassword": { + "paragraph1": "Cambiando la tua password cambierà anche la password della API Subsonic se ne hai richiesta una.", + "paragraph2": "Dovrai aggiornare la tua password sui tuoi dispositivi che utilizzano questa password." + }, + "contentFilters": "I filtri di contenuti ti aiutano a nascondere cose che non vuoi vedere su questo servizio.", + "deleteAccount": "Puoi eliminare permanentemente e irreversibilmente il tuo account e tutti i dati ad esso associati tramite il modulo qui sotto. Ti verrà richiesta una conferma.", + "plugins": "Usa i plugin per estendere Funkwhale ed ottenere funzionalità aggiuntive.", + "yourApps": "Questa è la lista di applicazioni che hai registrato." + }, + "header": { + "accountFailure": "Non possiamo eliminare il tuo account", + "accountSettings": "Impostazioni dell'account", + "authorizedApps": "App autorizzate", + "avatar": "Avatar", + "avatarFailure": "La tua immagine di profilo non può essere salvata", + "changeEmail": "Cambia il mio indirizzo email", + "changePassword": "Cambia la mia password", + "contentFilters": "Filtri di contenuto", + "deleteAccount": "Elimina il mio account", + "emailFailure": "Non possiamo cambiare il tuo indirizzo email", + "hiddenArtists": "Artisti nascosti", + "noApps": "Non hai nessuna applicazione connessa al tuo account.", + "noPersonalApps": "Non hai ancora registrato nessuna applicazione.", + "passwordFailure": "La tua password non può essere cambiata", + "plugins": "Plugin", + "settingsUpdated": "Impostazioni aggiornate", + "updateFailure": "Le tue impostazioni non possono essere aggiornate", + "yourApps": "Le tue applicazioni" + }, + "help": { + "changePassword": "Per favore controlla se la tua password è corretta", + "noApps": "Se autorizzi applicazioni di terze parti ad accedere ai tuoi dati, queste applicazioni verranno elencate qui.", + "noPersonalApps": "Creane una per integrare Funkwhale con applicazioni di terze parti." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Password corrente", + "newEmail": "Nuovo indirizzo email", + "newPassword": "Nuova password", + "password": "Password" + }, + "link": { + "managePlugins": "Gestisci i plugin", + "newApp": "Registra una nuova applicazione" + }, + "message": { + "confirmDelete": "La tua richiesta di eliminazione è stata inviata, il tuo account e il suo contenuto saranno eliminati a breve", + "currentEmail": "Il tuo indirizzo email corrente è { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Sarai disconnesso da questa sessione e dovrai accedere con una nuova", + "subsonic": "La tua password Subsonic sarà cambiata con una nuova e casuale, e sarai disconnesso dai dispositivi che utilizzano ancora la vecchia password Subsonic", + "warning": "Cambiare la tua password avrà queste conseguenze:" + }, + "header": "Cambiare la tua password?" + }, + "deleteAccount": { + "content": { + "warning": "Questo è irreversibile e rimuoverà permanentemente i tuoi dati dai nostri server. Sarai immediatamente disconnesso." + }, + "header": "Vuoi eliminare il tuo account?" + }, + "deleteApp": { + "content": { + "warning": "Questo cancellerà permanentemente l'applicazione e tutti i token associati." + }, + "header": "Rimuovere l'applicazione \"{ application }\"?" + }, + "revokeApp": { + "content": { + "warning": "Questo eviterà a questa applicazione di accedere al servizio a tuo nome." + }, + "header": "Revoca accesso per l'applicazione \"{ application }\"?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data di creazione", + "name": "Nome" + } + }, + "authorizedApps": { + "header": { + "application": "Applicazione", + "permissions": "Permessi" + } + }, + "yourApps": { + "header": { + "application": "Applicazione", + "creationDate": "Data di creazione", + "scopes": "Visibilità" + } + } + }, + "title": "Impostazioni dell'account", + "warning": { + "deleteAccount": "Il tuo account sarà eliminato dai nostri servers in pochi minuti. Notificheremo anche gli altri server che potrebbero avere una copia di alcuni dei tuoi dati in modo che possano procedere all'eliminazione. Nota però che alcuni di questi server potrebbero essere offline o potrebbero rifiutarsi di procedere." + } + }, + "SignupForm": { + "button": { + "create": "Crea il mio account" + }, + "header": { + "login": "Accedi al tuo account Funkwhale", + "signupFailure": "Il tuo account non può essere creato." + }, + "label": { + "email": "Indirizzo email", + "invitation": "Codice d'invito", + "password": "Password", + "username": "Nome utente" + }, + "message": { + "accountCreated": "Il tuo account è stato creato con successo. Verifica la tua email prima di fare il login.", + "awaitingReview": "La richiesta di registrazione è stata inviata con successo. Sarai notificato tramite email quando il nostro team di moderazione avrà verificato la tua richiesta.", + "registrationClosed": "Le registrazioni sono chiuse su questa istanza, è necessario un codice d'invito per registrarsi.", + "requiresReview": "Le iscrizioni su questa istanza sono aperte, ma sono revisionate dai moderatori prima di essere approvate." + }, + "placeholder": { + "email": "Inserisci il tuo indirizzo email", + "invitation": "Inserisci il tuo codice di invito (non tiene conto di maiuscole o minuscole)", + "username": "Inserisci il tuo nome utente" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Disabilita accesso", + "confirmNewPassword": "Richiedi una password", + "disable": "Disabilita accesso Subsonic", + "newPassword": "Richiedi una nuova password" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale è compatibile con altri lettori musicali che supportano le Subsonic API.", + "paragraph2": "Puoi usarli per ascoltare le tue playlist e musica anche quando non collegato, dal tuo cellulare o tablet, per esempio.", + "paragraph3": "Tuttavia, accedere a Funkwhale da quelle applicazioni richiede un'altra password che puoi impostare qui sotto." + } + }, + "header": { + "error": "Errore", + "subsonic": "Password API Subsonic" + }, + "label": { + "subsonicField": "La tua password per le API subsonic" + }, + "link": { + "apps": "Scopri come utilizzare Funkwhale attraverso altre app" + }, + "message": { + "accessDisabled": "Accesso disabilitato", + "passwordUpdated": "Password aggiornata", + "unavailable": "L'API Subsonic non è disponibile su questa istanza Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Questo disabiliterà completamente l'accesso alla API Subsonic dagli account." + }, + "header": "Disabilitare l'accesso alle API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "Questo ti disconnetterà dai dispositivi esistenti che utilizzano la password attuale." + }, + "header": "Richiedere una nuova password API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Errore durante la creazione" + }, + "label": { + "albumTitle": "Titolo" + } + }, + "AlbumModal": { + "button": { + "cancel": "Annulla", + "create": "Crea" + }, + "header": { + "newAlbum": "Nuovo album", + "newSeries": "Nuova serie" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serie" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "option": { + "none": "Nessuno" + } + }, + "LicenseSelect": { + "label": { + "license": "Licenza" + }, + "link": { + "license": "A proposito di questa licenza" + }, + "option": { + "none": "Nessuno" + } + }, + "SubscribeButton": { + "help": { + "auth": "Per iscriverti a questo canale devi prima fare l'accesso" + }, + "title": { + "subscribe": "Iscriviti", + "unsubscribe": "Disiscriviti" + } + }, + "UploadForm": { + "button": { + "edit": "Modifica", + "ignore": "Ignora", + "remove": "Rimuovi", + "resume": "Riprendi", + "retry": "Riprova" + }, + "description": { + "extensions": "Estensioni supportate: { extensions }" + }, + "header": { + "error": "Errore durante la pubblicazione" + }, + "help": { + "license": "Aggiungi una licenza al file per garantire alcune libertà al tuo pubblico." + }, + "label": { + "channel": "Canale", + "openBrowser": "Sfoglia…" + }, + "message": { + "dragAndDrop": "Trascina qui i file da caricare oppure apri Esplora file", + "pending": "Hai alcune bozze di upload in attesa di pubblicazione." + }, + "status": { + "errored": "Errore", + "pending": "In sospeso", + "uploading": "Caricamento" + }, + "warning": { + "quota": "Non hai più spazio disponibile per caricare i tuoi file. Per piacere contatta i moderatori." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descrizione", + "image": "Immagine Traccia", + "position": "Posizione", + "tags": "Etichette", + "title": "Titolo" + } + }, + "UploadModal": { + "button": { + "cancel": "Annulla", + "close": "Chiudi", + "finishLater": "Finisci più tardi", + "next": "Prossimo passo", + "previous": "Passo precedente", + "publish": "Pubblica", + "update": "Aggiorna" + }, + "header": { + "processing": "Elaborazione file", + "publish": "Pubblica audio", + "uploadDetails": "Dettagli di caricamento", + "uploadFiles": "File da caricare" + }, + "meta": { + "files": "{ n } file | { n } file", + "quota": "Spazio di archiviazione rimanente:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Tutto, { n } elemento, selezionato | Tutti gli { n } elementi selezionati", + "go": "Vai", + "launch": "Inizia", + "refresh": "Aggiorna tabella dei contenuti", + "select": "Seleziona", + "selectAll": "Seleziona tutti gli elementi", + "selectCurrentPage": "Seleziona solo la pagina attuale", + "selectElement": "Seleziona un elemento | Seleziona tutti e { n } gli elementi", + "selected": "{ n } su { total } selezionato | { n } su { total } selezionati" + }, + "header": { + "error": "Errore durante l'esecuzione dell'azione" + }, + "label": { + "actions": "Azioni", + "performAction": "Esegui azioni" + }, + "message": { + "needsRefresh": "Il contenuto è stato aggiornato, clicca aggiorna per visualizzare il contenuto aggiornato", + "success": "L'azione { action } è stata lanciata con successo su { n } elemento | L'azione { action } è stata lanciata con successo su { n } elementi" + }, + "modal": { + "performAction": { + "content": { + "warning": "Questo può coinvolgere molti elementi o avere conseguenze irreversibili, per favore ricontrolla se è proprio quello che vuoi." + }, + "header": "Vuoi eseguire { action } su { n } elemento? | Vuoi eseguire { action } su { n } elementi?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Rimuovi" + }, + "header": { + "failure": "Il tuo allegato non può essere salvato" + }, + "help": { + "upload": "PNG o JPG. Le dimensioni devono essere tra 1400x1400px e 3000x3000px. La dimensione massima consentita per il file è 5MB." + }, + "label": { + "upload": "Carica Nuova Immagine…" + }, + "loader": { + "uploading": "Caricamento file…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Riduci", + "expand": "Espandi" + } + }, + "ContentForm": { + "button": { + "preview": "Anteprima", + "write": "Scrivi" + }, + "empty": { + "noContent": "Nulla da visualizzare." + }, + "help": { + "markdown": "La sintassi Markdown è supportata." + }, + "placeholder": { + "input": "Scrivi alcune parole qui…" + } + }, + "CopyInput": { + "button": { + "copy": "Copia" + }, + "message": { + "success": "Testo copiato negli appunti!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Annulla", + "confirm": "Conferma" + }, + "header": { + "confirm": "Vuoi confermare questa azione?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } h { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Aggiorna" + }, + "header": { + "noResults": "Nessun risultato trovato." + } + }, + "ExpandableDiv": { + "button": { + "less": "Mostra meno", + "more": "Mostra altri" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Pulisci" + }, + "label": { + "search": "Cerca" + }, + "placeholder": { + "search": "Cerca…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Non hai i permessi di accesso!" + }, + "header": { + "unauthenticated": "Non autenticato" + }, + "link": { + "login": "Accedi", + "signup": "Registrati" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "less": "Mostra meno", + "more": "Mostra altri", + "update": "Aggiorna descrizione" + }, + "empty": { + "noDescription": "Nessuna descrizione disponibile" + }, + "header": { + "failure": "Errore durante l'aggiornamento della descrizione" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + }, + "UserModal": { + "button": { + "switchInstance": "Usa un'altra istanza" + }, + "header": { + "options": "Opzioni" + }, + "label": { + "language": "Lingua", + "shortcuts": "Scorciatoie da tastiera", + "theme": "Tema" + }, + "link": { + "about": "Informazioni", + "chat": "Chat", + "docs": "Documentazione", + "forum": "Forum", + "git": "Elenco problemi", + "login": "Accedi", + "logout": "Disconnetti", + "notifications": "Notifiche", + "profile": "Profilo", + "settings": "Impostazioni", + "signup": "Registrati", + "support": "Aiuto" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Non sono ancora state aggiunte tracce ai tuoi preferiti" + }, + "header": { + "favorites": "{ n } preferito | { n } preferiti" + }, + "link": { + "library": "Sfoglia libreria" + }, + "loader": { + "loading": "Caricando i tuoi preferiti…" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "title": "I Tuoi Preferiti" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Aggiungi ai preferiti", + "remove": "Rimuovi dai preferiti" + }, + "label": { + "inFavorites": "Nei preferiti" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Chiudi", + "reload": "Chiudi e ricarica pagina" + }, + "description": { + "failure": "Si è verificato un errore durante il tentativo di aggiornamento dei dati:", + "pending": "La richiesta di aggiornamento non è stata processata in tempo dal nostro server. Sarà processata più tardi.", + "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale.", + "success": "I dati sono stati aggiornati con successo dal server remoto." + }, + "header": { + "failure": "Errore di aggiornamento", + "pending": "Aggiornamento in sospeso", + "refresh": "Sto aggiornando l'oggetto dal server remoto…", + "saveFailure": "Errore durante il salvataggio delle impostazioni", + "skipped": "L'aggiornamento è stato rimandato", + "success": "Aggiornamento riuscito" + }, + "loader": { + "awaitingResult": "Aspettando i risultati…", + "fetchRequest": "Richiedendo un recupero…" + }, + "table": { + "error": { + "label": { + "detail": "Dettaglio dell'errore", + "type": "Tipo di errore" + }, + "value": { + "connectionError": "Impossibile connettersi al server remoto", + "httpError": "Si è verificato un errore HTTP durante il tentativo di contatto del server remoto", + "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", + "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", + "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", + "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", + "unknownError": "Errore sconosciuto" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Mostra altri" + }, + "empty": { + "noMatch": "Nessuna libreria corrispondente." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copia" + }, + "message": { + "copy": "Testo copiato negli appunti!" + }, + "title": "Mostra/nascondi password" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Aggiungi una descrizione…" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Questo album è presente nelle seguenti librerie:" + }, + "header": { + "episodes": "Episodi", + "libraries": "Librerie dell'utente", + "tracks": "Tracce" + }, + "meta": { + "volume": "Volume { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Annulla", + "delete": "Elimina…", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." + }, + "header": "Eliminare questo album?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modifica questo album", + "suggest": "Suggerisci una modifica su questo album" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "Albums": { + "button": { + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato corrispondente alla tua ricerca" + }, + "header": { + "browse": "Sfogliando gli album" + }, + "label": { + "search": "Cerca", + "tags": "Etichette" + }, + "link": { + "addMusic": "Aggiungi musica" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci il titolo dell'album…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Annulla", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…", + "play": "Riproduci tutti gli album" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "musicbrainz": "Vedi su MusicBrainz", + "wikipedia": "Cerca su Wikipedia" + }, + "meta": { + "albums": "{ n } album | { n } album", + "tracks": "{ n } traccia in | { n } tracce in" + }, + "modal": { + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Rimuovi filtro", + "more": "Carica di più…" + }, + "description": { + "library": "Questo artista è presente nelle seguenti librerie:" + }, + "header": { + "album": "Album di questo artista", + "library": "Librerie dell'utente", + "track": "Nuove tracce di questo artista" + }, + "link": { + "filter": "Revisiona i miei filtri" + }, + "message": { + "filter": "Stai attualmente nascondendo i contenuti di questo artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modifica questo artista", + "suggest": "Suggerisci una modifica su questo artista" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "Artists": { + "button": { + "search": "Cerca", + "upload": "Aggiungi musica" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando artisti" + }, + "label": { + "excludeCompilation": "Escludi gli artisti della compilation", + "search": "Nome dell'artista", + "tags": "Etichette" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cerca…" + }, + "title": "Artisti" + }, + "EditCard": { + "button": { + "approve": "Approva", + "delete": "Elimina", + "reject": "Rifiuta" + }, + "header": { + "modification": "Modifica { id }" + }, + "link": { + "track": "Traccia #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Il suggerimento sarà completamente rimosso, questa azione è irreversibile." + }, + "delete": { + "header": "Eliminare questo suggerimento?" + } + }, + "status": { + "applied": "Approvata ed applicata", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "table": { + "update": { + "header": { + "field": "Campo", + "newValue": "Nuovo valore", + "oldValue": "Vecchio valore" + }, + "notApplicable": "N/D" + } + } + }, + "EditForm": { + "button": { + "cancel": "Annulla", + "clear": "Svuota", + "new": "Invia un'altra modifica", + "reset": "Ripristina al valore iniziale", + "showAll": "Mostra tutte le modifiche", + "showUnreviewed": "Restringi alle modifiche non revisionate", + "submit": "Invia e applica modifica", + "suggest": "Invia suggerimento" + }, + "empty": { + "suggestEdit": "Suggerisci una modifica utilizzando il modulo qui sotto." + }, + "header": { + "failure": "Errore durante l'invio della modifica", + "recentEdits": "Modifiche recenti", + "success": "La tua modifica è stata inviata correttamente.", + "unreviewed": "Modifiche recenti in attesa di revisione" + }, + "label": { + "summary": "Riassunto (opzionale)" + }, + "message": { + "noPermission": "Non hai i permessi per modificare questo oggetto, ma puoi suggerire modifiche. Una volta inviati, i suggerimenti saranno revisionati prima dell'approvazione." + }, + "notApplicable": "N/D", + "placeholder": { + "summary": "Un breve riassunto che descrive le tue modifiche." + } + }, + "FileUpload": { + "button": { + "cancel": "Annulla", + "retry": "Riprova upload falliti" + }, + "description": { + "import": "Risultati della tua importazione:", + "previousImport": "Risultati della tua precedente importazione:" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Errore durante l'avvio dell'importazione", + "local": "Importa musica dalla tua memoria locale", + "server": "Stato dell'importazione", + "status": "Stato dell'importazione" + }, + "label": { + "extensions": "Estensioni supportate: { extensions }", + "remainingSpace": "Spazio di archiviazione rimanente", + "uploadWidget": "Clicca per selezionare i file da caricare o trascina e rilascia file o cartelle" + }, + "link": { + "picard": "Ti consigliamo di utilizzare Picard per quello scopo.", + "processing": "Elaborazione", + "uploading": "Caricamento" + }, + "message": { + "local": { + "copyright": "Non stai caricando contenuti protetti da diritti d'autore in una libreria pubblica, altrimenti potresti infrangere la legge", + "format": "I file musicali che stai caricando sono in formato OGG, Flac, MP3 o AIFF", + "message": "Stai per caricare della musica nella tua libreria. Prima di procedere, per favore assicurati che:", + "tag": "I file musicali che stai caricando sono correttamente etichettati." + } + }, + "table": { + "upload": { + "header": { + "actions": "Azioni", + "filename": "Nome file", + "size": "Dimensione", + "status": "Stato" + }, + "status": { + "pending": "In sospeso", + "uploaded": "Caricato", + "uploading": "Caricamento…" + } + } + }, + "tooltip": { + "denied": "Caricamento non riuscito, assicurati che il file non sia troppo grande e di non aver esaurito la tua quota", + "extension": "Tipo di file non valido, assicurati che stai caricando un file audio. Le estensioni di file supportate sono { extensions }", + "network": "Si è verificato un errore di rete durante il caricamento del file", + "retry": "Riprova", + "size": "Impossibile caricare questo file, controlla che non sia troppo grande", + "timeout": "Caricamento scaduto, per favore riprova" + } + }, + "FsBrowser": { + "button": { + "import": "Importa" + } + }, + "FsLogs": { + "empty": { + "notStarted": "L'importazione non è ancora cominciata" + } + }, + "Home": { + "header": { + "newChannels": "Nuovi canali", + "playlists": "Playlist", + "recentlyAdded": "Aggiunte recentemente", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + }, + "title": "Libreria" + }, + "ImportStatusModal": { + "button": { + "close": "Chiudi" + }, + "error": { + "importFailure": "Si è verificato un errore durante l'elaborazione del file. Sono disponibili dettagli qui sotto.", + "invalidMetadata": { + "label": "Metadati non validi", + "message": "I metadati inclusi nel file non sono validi o alcuni campi obbligatori sono mancanti." + }, + "unknownError": { + "label": "Errore sconosciuto", + "message": "Si è verificato un errore sconosciuto" + } + }, + "header": { + "importDetail": "Dettaglio dell'importazione" + }, + "link": { + "documentation": "Leggi la nostra documentazione per questo errore", + "support": "Apri una conversazione di supporto (includi nel tuo messaggio le informazioni di debug qui sotto)" + }, + "message": { + "importDetail": "Il caricamento è ancora in corso e presto sarà processato dal server.", + "importSuccess": "Il caricamento è stato processato con successo dal server." + }, + "table": { + "error": { + "debug": "Informazioni di debug", + "errorDetail": "Dettaglio dell'errore", + "errorType": "Tipo di errore", + "help": "Chiedi aiuto" + } + }, + "warning": { + "importSkipped": "Il caricamento è stato saltato perchè uno simile è già disponibile in una delle tue librerie." + } + }, + "Podcasts": { + "button": { + "cancel": "Annulla", + "channel": "Crea un Canale", + "feed": "Iscriviti a un feed", + "search": "Cerca", + "subscribe": "Iscriviti" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Navigare i podcast" + }, + "label": { + "search": "Titolo del Podcast", + "tags": "Etichette" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Cerca…" + }, + "title": "Podcast" + }, + "Radios": { + "button": { + "add": "Crea radio", + "create": "Crea la tua radio", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando radio", + "instance": "Radio dell'istanza", + "user": "Radio dell'utente" + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Risultati per pagina" + }, + "placeholder": { + "search": "Inserisci un nome di una radio…" + }, + "title": "Radio" + }, + "TagDetail": { + "header": { + "channels": "Canali", + "tracks": "Tracce" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "moderation": "Apri nell'interfaccia di moderazione" + } + }, + "TagSelector": { + "placeholder": { + "search": "Cerca…" + } + }, + "TrackBase": { + "button": { + "cancel": "Annulla", + "delete": "Elimina…", + "download": "Scarica", + "edit": "Modifica", + "embed": "Incorpora", + "more": "Di più…", + "play": "Riproduci" + }, + "link": { + "discogs": "Cerca su Discogs", + "django": "Vedi nell'amministrazione di Django", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "wikipedia": "Cerca su Wikipedia" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarà rimossa, così come i relativi file e dati. Questa azione è irreversibile." + }, + "header": "Eliminare questa traccia?" + }, + "embed": { + "header": "Incorpora questa traccia nel tuo sito web" + } + }, + "title": "Traccia" + }, + "TrackDetail": { + "description": { + "library": "Questa traccia è presente nelle seguenti librerie:" + }, + "header": { + "episode": "Dettagli Episodio", + "library": "Librerie Correlate", + "playlists": "Playlist correlate", + "release": "Dettagli Rilascio", + "track": "Dettagli Traccia" + }, + "link": { + "musicbrainz": "Vedi su MusicBrainz" + }, + "notApplicable": "N/D", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Diritti d'autore", + "license": "Licenza", + "series": "Serie", + "url": "URL", + "year": "Anno" + }, + "track": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Download", + "duration": "Durata", + "size": "Dimensione" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modifica questa traccia", + "suggest": "Suggerisci una modifica su questa traccia" + }, + "message": { + "remote": "Questo oggetto è gestito da un altro server, non puoi modificarlo." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Aggiungi filtro", + "save": "Salva" + }, + "description": { + "builder": "Puoi usare questa interfaccia per creare la tua radio personalizzata, che riprodurrà tracce in accordo con i tuoi criteri." + }, + "header": { + "builder": "Crea", + "created": "Radio creata", + "matches": "{ n } traccia corrisponde ai filtri selezionati | { n } tracce corrispondono ai filtri selezionati", + "updated": "Radio aggiornata" + }, + "label": { + "description": "Descrizione", + "filter": "Aggiungi filtri per personalizzare la tua radio", + "name": "Nome radio", + "public": "Mostra pubblicamente" + }, + "option": { + "filter": "Seleziona un filtro" + }, + "placeholder": { + "description": "La mia stupenda descrizione", + "name": "La mia eccezionale radio" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data di accesso", - "account": "Account", - "creationDate": "Data di creazione", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "name": "Nome", - "size": "Dimensione", - "visibility": "Visibilità" + "actions": "Azioni", + "candidates": "Candidati", + "config": "Configurazione", + "exclude": "Escludi", + "name": "Filtra nome" } } }, + "title": "Creatore Radio" + }, + "Filter": { + "cancelButton": "Annulla", + "excludeLabel": "Escludi", + "matchingTracksModalHeader": "Tracce che corrispondono al filtro", + "removeButton": "Rimuovi" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, account…" + }, + "table": { + "channel": { + "header": { + "account": "Account", + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, ID MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Titolo", + "releaseDate": "Data di rilascio", + "tracks": "Tracce" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "category": "Categoria", + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, nome, ID MusicBrainz…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data di creazione", + "domain": "Dominio", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "all": "Tutto", + "approved": "Approvato", + "pending": "Revisione in sospeso", + "rejected": "Rifiutato" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominio…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca", + "visibility": "Visibilità" + }, + "link": { + "local": "Locale" + }, + "option": { + "all": "Tutto" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, attore, nome, descrizione…" + }, + "table": { + "library": { + "header": { + "account": "Account", + "creationDate": "Data di creazione", + "domain": "Dominio", + "followers": "Seguito da", + "name": "Nome", + "uploads": "Caricamenti", + "visibility": "Visibilità" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il tag selezionato sarà rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per nome" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artisti", + "creationDate": "Data di creazione", + "name": "Nome", + "tracks": "Tracce" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca" + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data di creazione", + "domain": "Dominio", + "license": "Licenza", + "title": "Titolo" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Elimina", + "warning": "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." + } + }, + "label": { + "search": "Cerca", + "status": "Stato", + "visibility": "Visibilità" + }, + "link": { + "local": "Locale" + }, + "notApplicable": "N/D", "option": { "all": "Tutto", "failed": "Fallito", @@ -1862,396 +2282,68 @@ }, "label": "Ordinamento" }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il caricamento selezionato sarà rimosso. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca", - "status": "Stato", - "visibility": "Visibilità" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per dominio, attore, nome, riferimento, sorgente…" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data di accesso", "account": "Account", "creationDate": "Data di creazione", "domain": "Dominio", - "followers": "Seguito da", + "importStatus": "Stato dell'importazione", + "library": "Libreria", "name": "Nome", - "uploads": "Caricamenti", + "size": "Dimensione", "visibility": "Visibilità" } } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le librerie selezionate saranno rimosse, ed anche i caricamenti associati, ed iscritti. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "label": { - "search": "Cerca", - "visibility": "Visibilità" - }, - "placeholder": { - "search": "Cerca per dominio, attore, nome, descrizione…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "license": "Licenza", - "title": "Titolo" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Le tracce selezionate saranno rimosse, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, album, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli artisti selezionati saranno rimossi, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale" - }, - "placeholder": { - "search": "Cerca per dominio, nome, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artisti", - "creationDate": "Data di creazione", - "name": "Nome", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Il tag selezionato sarà rimosso e scollegato dai contenuti ad esso associati, se essi esistono. Questa azione è irreversibile." - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per nome" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tutto", - "approved": "Approvato", - "pending": "Revisione in sospeso", - "rejected": "Rifiutato" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominio…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "label": { - "status": "Stato" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Titolo", - "releaseDate": "Data di rilascio", - "tracks": "Tracce" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "action": { - "delete": { - "label": "Elimina", - "warning": "Gli album selezionati saranno rimossi, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "notApplicable": "N/D", - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, titolo, artista, ID MusicBrainz…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Account", - "domain": "Dominio", - "local": "Locale", - "owner": "Proprietario", - "type": "Tipo" - }, - "status": { - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "resolutionDate": "Data di risoluzione", - "resolved": "Risolti", - "status": "Stato", - "unresolved": "Non risolto" - }, - "report": { - "category": "Categoria", - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" + "AccountsTable": { + "action": { + "purge": { + "label": "Rimuovi" } }, - "header": { - "actions": "Azioni", - "notes": "Note interne", - "message": "Messaggio", - "reportedObject": "Oggetto segnalato" - }, - "button": { - "confirmDelete": "Elimina", - "delete": "Elimina oggetto segnalato", - "resolve": "Risolvi", - "unresolve": "Non risolto" - }, - "modal": { - "delete": { - "header": "Eliminare oggetto segnalato?", - "content": { - "warning": "Questo eliminerà l'oggetto associato con questa segnalazione e la segnerà come risolta. La cancellazione è irreversibile." - } - } - }, - "notApplicable": "N/D", - "link": { - "moderation": "Apri nell'interfaccia di moderazione", - "report": "Segnala { id }", - "publicPage": "Visualizza pagina pubblica" - }, - "warning": { - "objectDeleted": "L'oggetto associato a questa segnalazione è stato eliminato." - } - }, - "UserRequestCard": { - "header": { - "actions": "Azioni", - "notes": "Note interne", - "signup": "Messaggio" - }, - "button": { - "approve": "Approva", - "reject": "Rifiuta" - }, - "table": { - "status": { - "approved": "Approvato", - "assignedTo": "Assegnato a", - "internalNotes": "Note interne", - "pending": "In sospeso", - "refused": "Rifiutata", - "status": "Stato" - }, - "request": { - "creationDate": "Data di creazione", - "submittedBy": "Inviata da" - } - }, - "notApplicable": "N/D", - "link": { - "request": "Richiesta { id }" - }, - "message": { - "signup": "Questo utente vuole registrarsi alla tua istanza." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Aggiungi una nuova regola di moderazione", - "editRule": "Modifica regola di moderazione", - "failure": "Errore durante la creazione della regola" - }, "label": { - "blockAll": "Blocca tutto", - "policyDisabled": "Disabilitato", - "policyEnabled": "Abilitato", - "silenceActivity": "Silenzia attività", - "silenceNotifications": "Silenzia notifiche", - "customizeRule": "O personalizza la tua regola", - "policyReason": "Motivo", - "rejectMedia": "Rifiuta media" + "search": "Cerca" }, - "tooltip": { - "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirà qualsiasi interazione con l'entità, ed eliminerà i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", - "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'account…) da questo account o dominio. Questo eliminerà anche i contenuti già esistenti.", - "summary": "Spiega perché stai applicando questa regola: ti aiuterà a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrà essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore.", - "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", - "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", - "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente." + "link": { + "local": "Account locale" }, - "button": { - "cancel": "Annulla", - "create": "Crea", - "delete": "Elimina", - "confirm": "Elimina regola di moderazione", - "update": "Aggiorna" + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" }, - "modal": { - "delete": { - "header": "Eliminare questa regola di moderazione?", - "content": { - "warning": "Questa azione è irreversibile." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Aggiungi nota" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { - "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questo…" + "search": "Cerca per dominio, nome utente, descrizione…" }, - "header": { - "failure": "Errore durante l'invio della nota" + "table": { + "account": { + "header": { + "domain": "Dominio", + "firstSeen": "Visto per la prima volta", + "lastSeen": "Visto l'ultima volta", + "moderationRule": "Sotto regole di moderazione", + "name": "Nome", + "uploads": "Caricamenti" + }, + "moderationRule": "Si" + } } }, "DomainsTable": { @@ -2266,6 +2358,16 @@ "label": "Rimuovi dalla lista dei consentiti" } }, + "empty": { + "noPods": "Nessun altro pod trovato" + }, + "label": { + "inList": "è presente sulla lista dei consentiti", + "search": "Cerca" + }, + "link": { + "list": "Questo dominio è presente nella tua lista dei consentiti" + }, "option": { "all": "Tutto", "no": "No", @@ -2279,76 +2381,32 @@ }, "label": "Ordinamento" }, - "table": { - "domain": { - "header": { - "firstSeen": "Visto per la prima volta", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "moderationRule": "Sotto regole di moderazione", - "users": "Utenti" - }, - "moderationRule": "Si" - } - }, - "label": { - "inList": "è presente sulla lista dei consentiti", - "search": "Cerca" - }, - "empty": { - "noPods": "Nessun altro pod trovato" + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" }, "placeholder": { "search": "Cerca per nome…" }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - }, - "link": { - "list": "Questo dominio è presente nella tua lista dei consentiti" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Dominio", "firstSeen": "Visto per la prima volta", - "lastSeen": "Visto l'ultima volta", - "name": "Nome", "moderationRule": "Sotto regole di moderazione", - "uploads": "Caricamenti" + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "users": "Utenti" }, "moderationRule": "Si" } - }, - "link": { - "local": "Account locale" - }, - "action": { - "purge": { - "label": "Rimuovi" - } - }, - "label": { - "search": "Cerca" - }, - "placeholder": { - "search": "Cerca per dominio, nome utente, descrizione…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modifica" + }, + "header": { + "rule": "Regola" + }, "label": { "blockAll": "Blocca tutto", "muteActivity": "Silenzia attività", @@ -2356,15 +2414,49 @@ "reason": "Motivo", "rejectMedia": "Rifiuta media" }, - "button": { - "edit": "Modifica" - }, "status": { "enabled": "Abilitato", "paused": "In pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina regola di moderazione", + "create": "Crea", + "delete": "Elimina", + "update": "Aggiorna" }, "header": { - "rule": "Regola" + "addRule": "Aggiungi una nuova regola di moderazione", + "editRule": "Modifica regola di moderazione", + "failure": "Errore durante la creazione della regola" + }, + "label": { + "blockAll": "Blocca tutto", + "customizeRule": "O personalizza la tua regola", + "policyDisabled": "Disabilitato", + "policyEnabled": "Abilitato", + "policyReason": "Motivo", + "rejectMedia": "Rifiuta media", + "silenceActivity": "Silenzia attività", + "silenceNotifications": "Silenzia notifiche" + }, + "modal": { + "delete": { + "content": { + "warning": "Questa azione è irreversibile." + }, + "header": "Eliminare questa regola di moderazione?" + } + }, + "tooltip": { + "blockAll": "Blocca tutto da questo account o dominio. Questo prevenirà qualsiasi interazione con l'entità, ed eliminerà i relativi contenuti (caricamenti, librerie, richieste di seguire, ecc.)", + "isActive": "Usa questa impostazione per abilitare/disabilitare temporaneamente la regola senza rimuoverla completamente.", + "rejectMedia": "Non scaricare nessun media (audio, copertina dell'album, avatar dell'account…) da questo account o dominio. Questo eliminerà anche i contenuti già esistenti.", + "silenceActivity": "Nascondi contenuto dell'account o del dominio, ad esclusione dei seguaci.", + "silenceNotifications": "Evita che l'account o il dominio facciano scattare notifiche, ad esclusione dei seguaci.", + "summary": "Spiega perché stai applicando questa regola: ti aiuterà a ricordare il motivo per cui la hai aggiunta. In base alla configurazione della tua istanza, questa potrà essere mostrata pubblicamente per aiutare gli utenti a capire le regole di moderazione in vigore." } }, "InstancePolicyModal": { @@ -2374,161 +2466,129 @@ }, "modal": { "manage": { - "header": "Gestisci regole di moderazione per { obj }", "content": { "warning": "Questa entità è soggetta a regole specifiche di moderazione" - } + }, + "header": "Gestisci regole di moderazione per { obj }" } } }, + "NoteForm": { + "button": { + "add": "Aggiungi nota" + }, + "header": { + "failure": "Errore durante l'invio della nota" + }, + "placeholder": { + "summary": "Descrivi quali azioni sono state eseguite, o qualsiasi altro aggiornamento relativo a questo…" + } + }, "NotesThread": { "button": { "delete": "Elimina" }, "modal": { "delete": { - "header": "Eliminare questa nota?", "content": { "warning": "La nota sarà rimossa. Questa azione è irreversibile." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Account", - "albums": "Albums", - "creationDate": "Data di creazione", - "domain": "Dominio", - "name": "Nome", - "tracks": "Tracce" + }, + "header": "Eliminare questa nota?" } } }, - "option": { - "all": "Tutto" - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" + "ReportCard": { + "button": { + "confirmDelete": "Elimina", + "delete": "Elimina oggetto segnalato", + "resolve": "Risolvi", + "unresolve": "Non risolto" }, - "label": "Ordinamento" + "header": { + "actions": "Azioni", + "message": "Messaggio", + "notes": "Note interne", + "reportedObject": "Oggetto segnalato" + }, + "link": { + "moderation": "Apri nell'interfaccia di moderazione", + "publicPage": "Visualizza pagina pubblica", + "report": "Segnala { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo eliminerà l'oggetto associato con questa segnalazione e la segnerà come risolta. La cancellazione è irreversibile." + }, + "header": "Eliminare oggetto segnalato?" + } + }, + "notApplicable": "N/D", + "table": { + "object": { + "account": "Account", + "domain": "Dominio", + "local": "Locale", + "owner": "Proprietario", + "type": "Tipo" + }, + "report": { + "category": "Categoria", + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "resolutionDate": "Data di risoluzione", + "resolved": "Risolti", + "status": "Stato", + "unresolved": "Non risolto" + } + }, + "warning": { + "objectDeleted": "L'oggetto associato a questa segnalazione è stato eliminato." + } }, - "label": { - "category": "Categoria", - "search": "Cerca" - }, - "link": { - "local": "Locale", - "moderation": "Apri nell'interfaccia di moderazione" - }, - "placeholder": { - "search": "Cerca per dominio, nome, account…" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" + "UserRequestCard": { + "button": { + "approve": "Approva", + "reject": "Rifiuta" + }, + "header": { + "actions": "Azioni", + "notes": "Note interne", + "signup": "Messaggio" + }, + "link": { + "request": "Richiesta { id }" + }, + "message": { + "signup": "Questo utente vuole registrarsi alla tua istanza." + }, + "notApplicable": "N/D", + "table": { + "request": { + "creationDate": "Data di creazione", + "submittedBy": "Inviata da" + }, + "status": { + "approved": "Approvato", + "assignedTo": "Assegnato a", + "internalNotes": "Note interne", + "pending": "In sospeso", + "refused": "Rifiutata", + "status": "Stato" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Stato dell'account", - "email": "Email", - "lastActivity": "Ultima attività", - "permissions": "Permessi", - "signup": "Registrati", - "status": "Stato", - "username": "Nome utente" - }, - "accountStatus": { - "active": "Attivo", - "inactive": "Inattivo" - }, - "status": { - "admin": "Amministratore", - "regular": "Utente semplice", - "staff": "Membro dello staff" - } - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Direzione di ordinamento" - }, - "label": "Ordinamento" - }, - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - }, - "notApplicable": "N/D", - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, nome…" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tutto", - "expired": "Scaduto/utilizzato", - "open": "Aperto" - }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "creationDate": "Data di creazione", - "expirationDate": "Data di scadenza", - "owner": "Proprietario", - "status": "Stato" - } - } - }, - "action": { - "delete": "Elimina" - }, - "label": { - "expired": "Scaduto", - "unused": "Non utilizzato", - "search": "Cerca", - "status": "Stato", - "used": "Usati" - }, - "ordering": { - "label": "Ordinamento" - }, - "placeholder": { - "search": "Cerca per nome utente, indirizzo e-mail, codice…" - }, - "pagination": { - "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" - } - }, "InvitationForm": { "button": { "clear": "Pulisci", "new": "Ottieni un nuovo invito" }, - "table": { - "invitation": { - "header": { - "code": "Codice", - "link": "Condividi collegamento" - } - } - }, "header": { "failure": "Errore durante la creazione dell'invito" }, @@ -2537,523 +2597,59 @@ }, "placeholder": { "invitation": "Lascia vuoto per un codice casuale" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Azioni", - "label": "Etichetta campo", - "type": "Tipo campo", - "required": "Richiesto" - }, - "type": { - "long": "Testo lungo", - "short": "Testo breve" - }, - "required": { - "false": "No", - "true": "Si" - } - } - }, - "button": { - "add": "Aggiungi campo", - "edit": "Modifica modulo", - "preview": "Anteprima modulo" - }, - "label": { - "additionalField": "Campo aggiuntivo", - "additionalFields": "Campi aggiuntivi", - "delete": "Elimina", - "helpText": "Suggerimento", - "moveDown": "Sposta giù", - "moveUp": "Sposta su" - }, - "help": { - "additionalFields": "Campi aggiuntivi da visualizzare nel modulo. Visualizzati solo se la convalida manuale delle iscrizioni è attiva.", - "helpText": "Testo opzionale da visualizzare all'inizio del modulo di iscrizione." - } - }, - "SettingsGroup": { - "header": { - "image": "Immagine attuale", - "error": "Errore durante il salvataggio delle impostazioni" - }, - "button": { - "save": "Salva" - }, - "message": { - "success": "Impostazioni aggiornate con successo." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tutto" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", - "modal": "Vuoi segnalare questo oggetto?", - "submissionFailure": "Errore durante l'invio della segnalazione" - }, - "button": { - "cancel": "Annulla", - "submit": "Invia segnalazione" - }, - "label": { - "email": "Email", - "forwardToDomain": "Inoltra a { domain}", - "message": "Messaggio" - }, - "description": { - "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", - "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirà la tua segnalazione.", - "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione.", - "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione." - }, - "message": { - "submissionSuccess": "Segnalazione inviata con successo, grazie" - } - }, - "FilterModal": { - "button": { - "cancel": "Annulla", - "hide": "Nascondi contenuto" - }, - "message": { - "success": "Filtro di contenuto aggiunto con successo" - }, - "header": { - "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?", - "failure": "Errore durante la creazione del filtro" - }, - "warning": { - "createFilter": { - "listItem2": "Nel widget \"Aggiunti recentemente\"", - "listItem3": "Negli elenchi di artisti ed album", - "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", - "listItem4": "Nei suggerimenti radio", - "listIntro": "Non vedrai tracce, album e attività dell'utente collegate a questo artista in futuro:" - } - }, - "help": { - "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Si è verificato un errore durante il tentativo di aggiornamento dei dati:", - "success": "I dati sono stati aggiornati con successo dal server remoto.", - "pending": "La richiesta di aggiornamento non è stata processata in tempo dal nostro server. Sarà processata più tardi.", - "skipped": "Il server remoto ha risposto, ma i dati ricevuti non sono supportati da Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Si è verificato un errore HTTP durante il tentativo di contatto del server remoto", - "invalidAttributesError": "I dati riportati dal server remoto hanno attributi invalidi o mancanti", - "connectionError": "Impossibile connettersi al server remoto", - "httpStatus": "Il server remoto ha risposto con il codice HTTP { status }", - "timeoutError": "Il server remoto non ha risposto abbastanza velocemente", - "invalidJsonError": "Il server remoto ha risposto con dati JSON o JSON-LD non validi", - "unknownError": "Errore sconosciuto" - }, - "label": { - "detail": "Dettaglio dell'errore", - "type": "Tipo di errore" - } - } - }, - "button": { - "close": "Chiudi", - "reload": "Chiudi e ricarica pagina" - }, - "header": { - "saveFailure": "Errore durante il salvataggio delle impostazioni", - "failure": "Errore di aggiornamento", - "pending": "Aggiornamento in sospeso", - "success": "Aggiornamento riuscito", - "skipped": "L'aggiornamento è stato rimandato", - "refresh": "Sto aggiornando l'oggetto dal server remoto…" - }, - "loader": { - "fetchRequest": "Richiedendo un recupero…", - "awaitingResult": "Aspettando i risultati…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Nessuna libreria corrispondente." - }, - "button": { - "showMore": "Mostra altri" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Scorciatoie del lettore audio", - "clearQueue": "Svuota la coda", - "decreaseVolume": "Diminuisci volume", - "expandQueue": "Espandi coda/visualizzazione player", - "increaseVolume": "Aumenta volume", - "playPause": "Pausa/riproduci la traccia corrente", - "playNext": "Riproduci traccia successiva", - "playPrevious": "Riproduci traccia precedente", - "seekBack30": "Salta indietro 30s", - "seekBack5": "Salta indietro 5s", - "seekForward30": "Salta avanti 30s", - "seekForward5": "Salta avanti 5s", - "shuffleQueue": "Mischia la tua coda", - "toggleFavorite": "Inverti preferito", - "toggleMute": "Cambia muto", - "toggleLoop": "Cambia tipo di riproduzione della coda" - }, - "general": { - "focus": "Metti in primo piano la barra di ricerca", - "label": "Scorciatoie generali", - "show": "Mostra scorciatoie da tastiera disponibili", - "unfocus": "Togli il primo piano dalla barra di ricerca" - } - }, - "button": { - "close": "Chiudi" - }, - "header": { - "modal": "Scorciatoie da tastiera" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Annulla", - "submit": "Invia" - }, - "header": { - "chooseInstance": "Scegli la tua istanza", - "failure": "Non è possibile connettersi all'URL dato", - "suggestions": "Scelte suggerite" - }, - "label": { - "url": "URL dell'istanza" - }, - "help": { - "notFunkwhaleServer": "L'indirizzo fornito non è quello di un server Funkwhale", - "serverDown": "Il server potrebbe essere caduto", - "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti." - }, - "message": { - "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" - } - }, - "Queue": { - "button": { - "clear": "Svuota", - "close": "Chiudi", - "stopRadio": "Ferma radio" - }, - "label": { - "duration": "Durata", - "addArtistContentFilter": "Nascondi contenuti di questo artista…", - "next": "Prossima traccia", - "pause": "Pausa", - "play": "Riproduci", - "previous": "Traccia precedente", - "queue": "Coda", - "remove": "Rimuovi", - "restart": "Riavvia traccia" - }, - "message": { - "radio": "Le nuove tracce saranno allegate qui automaticamente.", - "automaticPlay": "La traccia seguente verrà riprodotta automaticamente tra pochi secondi…" - }, - "header": { - "failure": "La traccia non può essere caricata", - "radio": "Hai una radio in riproduzione" - }, - "meta": { - "queuePosition": "Traccia { index } su { length }" - }, - "warning": { - "connectivity": "Potresti avere un problema di connettività." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copia" - }, - "title": "Mostra/nascondi password", - "message": { - "copy": "Testo copiato negli appunti!" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modifica" - } - }, - "Button": { - "startRadio": "Riproduci radio", - "stopRadio": "Ferma radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Errore durante il recupero dell'oggetto" - }, - "button": { - "fediverse": "Fediverso", - "rss": "RSS", - "search": "Cerca" - }, - "label": { - "fediverse": { - "fieldLabel": "Fediverso", - "title": "Iscriviti ad un podcast condiviso sul Fediverso" - }, - "rss": { - "fieldPlaceholder": "https://website.example.com/rss.xml", - "fieldLabel": "Indirizzo del feed RSS", - "title": "Iscriviti al feed RSS di un podcast" - } - }, - "warning": { - "unsupported": "Questo tipo di oggetto non è ancora supportato" - }, - "error": { - "fetchFailed": "Questo oggetto non può essere recuperato" - }, - "description": { - "fediverse": "Usa questo modulo per recuperare un oggetto ospitato da qualche altra parte nel Fediverso.", - "rss": "Usa questo modulo per iscriverti a un feed RSS dall'URL relativo." - } - }, - "PageNotFound": { - "link": { - "home": "Vai alla pagina iniziale" - }, - "title": "Pagina Non Trovata", - "header": { - "pageNotFound": "Pagina non trovata!" - }, - "message": { - "pageNotFound": "Ci dispiace, la pagina che hai richiesto non esiste:" - } - }, - "vui": { - "Pagination": { - "next": "Pagina Successiva", - "label": "Impaginazione", - "previous": "Pagina Precedente" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostra 1 altro tag | Mostra { n } altri tag" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episodio | { n } episodi", - "listenings": "{ n } ascolto | { n } ascolti", - "subscribers": "{ n } iscritto | { n } iscritti", - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "channelEpisodes": "Tutti gli Episodi", - "mirrored": "Mirror da { dominio }", - "moderation": "Apri nell'interfaccia di moderazione", - "channelOverview": "Panoramica", - "channelTracks": "Tracce", - "domainView": "Visualizza su { dominio }" - }, - "header": { - "artistChannel": "Canale dell'artista", - "podcastChannel": "Canale podcast" - }, - "button": { - "cancel": "Annulla", - "confirm": "Elimina", - "delete": "Elimina…", - "edit": "Modifica…", - "embed": "Incorpora", - "play": "Riproduci", - "updateChannel": "Aggiorna canale", - "upload": "Carica" - }, - "title": "Canale", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" - }, - "header": "Iscriviti via RSS" - }, - "fediverse": { - "content": { - "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" - }, - "header": "Iscriviti sul Fediverso" - }, - "funkwhale": { - "header": "Iscriviti su Funkwhale" - }, - "header": "Iscriviti a questo canale" }, - "delete": { - "header": "Eliminare questo Canale?", - "content": { - "warning": "Il canale sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." - } - }, - "embed": { - "header": "Incorpora il lavoro di questo artista nel tuo sito web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Aggiungi nuovo", - "erroredUploads": "Visualizza caricamenti falliti", - "skippedUploads": "Visualizza caricamenti saltati" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Ultimi episodi", - "latestTracks": "Ultime tracce", - "series": "Serie", - "uploadsFailure": "Non è stato possibile pubblicare alcuni file", - "uploadsProcessing": "I file caricati stanno venendo elaborati", - "uploadsSuccess": "Upload pubblicati con successo" - }, - "meta": { - "progress": "File processati:" - }, - "message": { - "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "button": { - "cancel": "Annulla", - "subscribe": "Iscriviti" - }, - "placeholder": { - "search": "Filtra per nome…" - }, - "title": "Canali a cui sei iscritto", - "modal": { - "subscription": { - "header": "Iscrizione" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "details": "Dettagli Libreria" - }, - "label": { - "size": "Dimensione totale dei file in questa libreria" - }, - "button": { - "upload": "Carica" - } - }, - "Quota": { - "label": { - "currentUsage": "{ current } usato su { max } consentito", - "errored": "File con errore", - "pending": "File in sospeso", - "skipped": "File saltati" - }, - "header": { - "currentUsage": "Utilizzo attuale" - }, - "loading": { - "currentUsage": "Caricando i dati di utilizzo…" - }, - "button": { - "purge": "Rimuovi" - }, - "modal": { - "purgeErrored": { - "header": "Rimuovere file con errori?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgePending": { - "header": "Rimuovere file in attesa?", - "content": { - "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." - } - }, - "purgeSkipped": { - "header": "Rimuovere file saltati?", - "content": { - "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." - } - } - }, - "link": { - "viewFiles": "Vedi files" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durata", - "importStatus": "Stato dell'importazione", - "size": "Dimensione", - "title": "Titolo", - "uploadDate": "Data di caricamento" + "code": "Codice", + "link": "Condividi collegamento" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Elimina" + }, + "label": { + "expired": "Scaduto", + "search": "Cerca", + "status": "Stato", + "unused": "Non utilizzato", + "used": "Usati" }, "option": { - "status": { - "all": "Tutto", - "draft": "Bozza", - "failed": "Fallito", - "finished": "Finito", - "pending": "In sospeso", - "skipped": "Saltato" - } + "all": "Tutto", + "expired": "Scaduto/utilizzato", + "open": "Aperto" }, + "ordering": { + "label": "Ordinamento" + }, + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" + }, + "placeholder": { + "search": "Cerca per nome utente, indirizzo e-mail, codice…" + }, + "table": { + "invitation": { + "header": { + "code": "Codice", + "creationDate": "Data di creazione", + "expirationDate": "Data di scadenza", + "owner": "Proprietario", + "status": "Stato", + "user": "Utente" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Cerca" + }, + "notApplicable": "N/D", "ordering": { "direction": { "ascending": "Crescente", @@ -3062,397 +2658,550 @@ }, "label": "Ordinamento" }, - "action": { - "delete": "Elimina", - "restartImport": "Riavvia importazione" + "pagination": { + "results": "Sto mostrando un risultato | Sto mostrando i risultati { start }-{ end } di { total }" }, - "label": { - "importStatus": "Stato dell'importazione", - "search": "Cerca" - }, - "notApplicable": "N/D", - "empty": { - "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" }, "placeholder": { - "search": "Cerca per titolo, artista, album…" + "search": "Cerca per nome utente, indirizzo e-mail, nome…" }, - "button": { - "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" - }, - "pagination": { - "results": "Mostrando i risultati da { start } a { end } su { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crea una nuova libreria" - }, - "loading": { - "libraries": "Caricando le Librerie…" - }, - "empty": { - "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." - }, - "header": { - "libraries": "Le mie librerie" - } - }, - "Form": { - "button": { - "create": "Crea libreria", - "delete": "Elimina", - "confirm": "Elimina libreria", - "update": "Aggiorna libreria" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione è irreversibile." + "table": { + "user": { + "accountStatus": { + "active": "Attivo", + "inactive": "Inattivo" + }, + "header": { + "accountStatus": "Stato dell'account", + "email": "Email", + "lastActivity": "Ultima attività", + "permissions": "Permessi", + "signup": "Registrati", + "status": "Stato", + "username": "Nome utente" + }, + "status": { + "admin": "Amministratore", + "regular": "Utente semplice", + "staff": "Membro dello staff" } } - }, - "label": { - "description": "Descrizione", - "name": "Nome", - "visibility": "Visibilità" - }, - "header": { - "failure": "Errore" - }, - "description": { - "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", - "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilità." - }, - "message": { - "libraryCreated": "Libreria creata", - "libraryDeleted": "Libreria eliminata", - "libraryUpdated": "Libreria aggiornata" - }, - "placeholder": { - "name": "La mia eccezionale libreria", - "description": "Questa libreria contiene la mia musica personale, spero vi piaccia." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } traccia | { n } tracce", - "failedTracks": "Tracce con errore:", - "lastUpdate": "Ultimo aggiornamento:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." - }, - "header": "Smettere di seguire questa libreria?" - } - }, - "button": { - "cancel": "Annulla richiesta di seguire", - "follow": "Segui", - "pending": "Richiesta di seguire in attesa di approvazione", - "unfollow": "Smetti di seguire" - }, - "link": { - "scanDetails": "Dettagli", - "scan": "Scansiona ora" - }, - "label": { - "scanFailure": "Errore durante la scansione", - "scanPending": "Scansione in sospeso", - "scanSuccess": "Scansionata", - "scanPartialSuccess": "Scansione eseguita con errori", - "scanProgress": "Scansionando… ({ progress }%)", - "sharingLink": "Condividi collegamento" - }, - "message": { - "scanLaunched": "Scansione avviata", - "scanSkipped": "Scansione saltata (la scansione precedente è troppo recente)" - }, - "tooltip": { - "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", - "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" - } - }, - "ScanForm": { - "header": { - "failure": "Non è stato possibile recuperare la libreria remota" - }, - "placeholder": { - "url": "Inserisci l'URL di una libreria" - }, - "label": { - "search": "Cerca una libreria remota" - }, - "button": { - "submit": "Invia ricerca" - } - }, - "Home": { - "header": { - "knownLibraries": "Librerie conosciute", - "remoteLibraries": "Librerie remote" - }, - "loading": { - "remoteLibraries": "Caricando le librerie remote…" - }, - "button": { - "refresh": "Aggiorna" - }, - "description": { - "remoteLibraries": "Le librerie remote sono di proprietà di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti è stato dato l'accesso ad esse." - } - } - }, - "Home": { - "title": "Aggiungi e gestisci contenuti", - "description": { - "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", - "channel": { - "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", - "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." - }, - "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." - }, - "header": { - "follow": "Segui librerie remote", - "channel": "Pubblica le tue opere in un canale", - "upload": "Carica contenuto di terze parti in una libreria" - }, - "button": { - "start": "Per iniziare" - }, - "help": { - "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." - } - }, - "Base": { - "title": "Aggiungi contenuto", - "link": { - "libraries": "Librerie", - "tracks": "Tracce" - }, - "menu": { - "secondary": "Menu secondario" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } traccia | { n } tracce" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "moderation": "Apri nell'interfaccia di moderazione", - "owner": "Proprietà di { username }", - "tracks": "Tracce", - "domain": "Visualizza su { dominio }" - }, - "button": { - "edit": "Modifica", - "upload": "Carica" - }, - "title": "Libreria", - "label": { - "private": "Privato", - "public": "Pubblico", - "instance": "Ristretto", - "sharingLink": "Condividi collegamento" - }, - "description": { - "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." - }, - "tooltip": { - "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", - "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente", - "instance": "Questa libreria è ristretta agli utenti di questa istanza" - } - }, - "Edit": { - "button": { - "accept": "Accetta", - "reject": "Rifiuta" - }, - "table": { - "action": { - "status": { - "accepted": "Accettato", - "pending": "Approvazione in sospeso", - "rejected": "Rifiutato" - }, - "header": { - "action": "Azione", - "date": "Data", - "status": "Stato", - "user": "Utente" - } - } - }, - "header": { - "followers": "Seguito da", - "libraryContents": "Contenuto della libreria" - }, - "loading": { - "followers": "Caricando la lista di chi ti segue…" - }, - "empty": { - "noFollowers": "Nessuno segue questa libreria" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailOverview": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - }, - "DetailTracks": { - "empty": { - "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!", - "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profilo di { username }", - "link": { - "activity": "Attività", - "moderation": "Apri nell'interfaccia di moderazione", - "overview": "Panoramica", - "domainView": "Visualizza su { dominio }" - }, - "label": { - "self": "Questo sei tu!" - } - }, - "PasswordReset": { - "label": { - "email": "Indirizzo email dell'account" - }, - "button": { - "requestReset": "Chiedi un reset della password" - }, - "link": { - "back": "Torna alla pagina di accesso" - }, - "placeholder": { - "email": "Inserisci l'indirizzo email collegato al tuo account" - }, - "header": { - "failure": "Errore durante la richiesta di un reset della password", - "reset": "Resetta la tua password" - }, - "title": "Resetta la tua password", - "help": { - "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Aggiungi nuovo" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Canale dell'artista" - }, - "header": "Crea canale", - "podcast": { - "header": "Canale podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Annulla", - "createChannel": "Crea canale", - "next": "Prossimo passo", - "previous": "Passo precedente" + "hide": "Nascondi contenuto" }, "header": { - "channels": "Canali", - "sharedLibraries": "Questo utente ha condiviso le seguenti librerie", - "libraries": "Librerie dell'Utente" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Torna alla pagina di accesso", - "login": "Procedi all'accesso" + "failure": "Errore durante la creazione del filtro", + "modal": "Vuoi nascondere i contenuti dell'artista \"{ name }\"?" }, - "title": "Cambia la tua password", - "header": { - "failure": "Errore durante la modifica della password", - "success": "Password aggiornata con successo" + "help": { + "createFilter": "Puoi gestire ed modificare i tuoi filtri in qualsiasi momento dalle impostazioni del tuo account." }, "message": { - "requestSent": "Se l'indirizzo email fornito nel passo precedente è valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", - "success": "La tua password è stata aggiornata con successo." + "success": "Filtro di contenuto aggiunto con successo" }, + "warning": { + "createFilter": { + "listIntro": "Non vedrai tracce, album e attività dell'utente collegate a questo artista in futuro:", + "listItem1": "Nei preferiti di altri utenti e nella cronologia di ascolto", + "listItem2": "Nel widget \"Aggiunti recentemente\"", + "listItem3": "Negli elenchi di artisti ed album", + "listItem4": "Nei suggerimenti radio" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Nuova password" + "category": "Categoria" }, + "option": { + "all": "Tutto" + } + }, + "ReportModal": { "button": { - "update": "Aggiorna la tua password" - } - }, - "EmailConfirm": { - "title": "Conferma il tuo indirizzo e-mail", - "label": { - "confirmationCode": "Codice di conferma" + "cancel": "Annulla", + "submit": "Invia segnalazione" + }, + "description": { + "email": "Utilizzeremo questo indirizzo email qualora avessimo bisogno di contattarti per questa segnalazione.", + "forwardToDomain": "Inoltra una copia anonima della segnalazione al server che ospita questo elemento.", + "message": "Usa questo campo per fornire contesto aggiuntivo al moderatore che gestirà la tua segnalazione.", + "modal": "Usa questo modulo per inviare una segnalazione al nostro team di moderazione." }, "header": { - "failure": "Non è stato possibile confermare il tuo indirizzo e-mail", - "success": "Indirizzo e-mail confermato" + "disabled": "Le segnalazioni anonime sono disabilitate, per favore accedi per inviare una segnalazione.", + "modal": "Vuoi segnalare questo oggetto?", + "submissionFailure": "Errore durante l'invio della segnalazione" }, - "link": { - "login": "Procedi all'accesso", - "back": "Torna alla pagina di accesso" + "label": { + "email": "Email", + "forwardToDomain": "Inoltra a { domain}", + "message": "Messaggio" }, "message": { - "success": "Ora puoi usare il servizio senza limitazioni." - } - }, - "Signup": { - "header": { - "createAccount": "Crea un account su Funkwhale" - }, - "title": "Registrati" - }, - "Login": { - "title": "Accedi", - "header": { - "login": "Accedi al tuo account Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Accesso in corso…" - } - }, - "Plugins": { - "title": "Gestisci i plugin" - }, - "ProfileActivity": { - "header": { - "playlists": "Playlist", - "recentlyFavorited": "Preferiti recenti", - "recentlyListened": "Ascoltate recentemente" + "submissionSuccess": "Segnalazione inviata con successo, grazie" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Approva", + "markRead": "Segna come letta", + "markUnread": "Segna come non letta", + "reject": "Rifiuta" + }, + "message": { + "libraryAcceptFollow": "{ username } ha accettato la tua richiesta di seguire la libreria \"{ library }\"", + "libraryFollow": "{ username } segue la tua libreria \"{ library }\"", + "libraryPendingFollow": "{ username } vuole seguire la tua libreria \"{ library }\"" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "Editor": { + "button": { + "addDuplicate": "Aggiungi comunque", + "clear": "Pulisci playlist", + "copy": "Copia la coda corrente in questa playlist", + "insertFromQueue": "Inserisci dalla coda ({ n } traccia) | Inserisci dalla coda ({ n } tracce)" + }, + "error": { + "sync": "Si è verificato un errore durante il salvataggio delle modifiche" + }, + "header": { + "editor": "Modifica lista di riproduzione" + }, + "help": { + "reorder": "Trascina e rilascia righe per riordinare le tracce nella playlist" + }, + "loading": { + "sync": "Sincronizzando le modifiche con il server…" + }, + "message": { + "sync": "Modifiche sincronizzate con il server" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Questo cancellerà tutte le tracce da questa lista di riproduzione e non può essere annullato." + }, + "header": "Vuoi pulire la playlist \"{ playlist }\"?" + } + }, + "warning": { + "duplicate": "Alcune tracce nella tua coda sono già presenti in questo elenco di riproduzione:" + } + }, + "Form": { + "button": { + "create": "Crea playlist", + "update": "Aggiorna lista di riproduzione" + }, + "header": { + "createFailure": "La lista di riproduzione non può essere creata", + "createPlaylist": "Crea una nuova lista di riproduzione", + "createSuccess": "Lista di riproduzione creata", + "updateSuccess": "Lista di riproduzione aggiornata" + }, + "label": { + "name": "Nome lista di riproduzione", + "visibility": "Visibilità lista di riproduzione" + }, + "placeholder": { + "name": "La mia eccezionale playlist" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Aggiungi comunque", + "addToPlaylist": "Aggiungi a questa playlist", + "addTrack": "Aggiungi traccia", + "cancel": "Annulla", + "edit": "Modifica" + }, + "empty": { + "noPlaylists": "Non sono ancora state create playlist" + }, + "header": { + "addFailure": "La traccia non può essere aggiunta alla lista di riproduzione", + "addToPlaylist": "Aggiungi alla playlist", + "available": "Playlist disponibili", + "manage": "Gestisci playlist", + "noResults": "Nessun risultato che corrisponde al tuo filtro" + }, + "label": { + "filter": "Filtra" + }, + "placeholder": { + "filterPlaylist": "Inserisci il nome della playlist" + }, + "table": { + "edit": { + "header": { + "edit": "Modifica", + "lastModification": "Ultima modifica", + "name": "Nome", + "tracks": "Tracce" + } + } + }, + "warning": { + "duplicate": "{ 0 } è già nella { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Aggiungi alla playlist…" + } + }, + "Widget": { + "button": { + "create": "Crea Playlist", + "more": "Mostra altri" + }, + "placeholder": { + "noPlaylists": "Non sono ancora state create playlist" + } + } + }, + "radios": { + "Button": { + "startRadio": "Riproduci radio", + "stopRadio": "Ferma radio" + }, + "Card": { + "button": { + "edit": "Modifica" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostra 1 altro tag | Mostra { n } altri tag" + } + } + }, + "vui": { + "Pagination": { + "label": "Impaginazione", + "next": "Pagina Successiva", + "previous": "Pagina Precedente" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{ n } traccia è stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Altro", + "podcast": "Podcast" + }, + "label": "Categoria del contenuto" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Questa traccia è stata caricata, ma la sua elaborazione non è ancora stata programmata", + "label": "Bozza" + }, + "errored": { + "help": "Non è stato possibile processare questa traccia, assicurati che sia etichettata correttamente", + "label": "Si è verificato un errore" + }, + "finished": { + "help": "Importato", + "label": "Finito" + }, + "pending": { + "help": "Questa traccia è stata caricata, ma non è ancora stata processata dal server", + "label": "In sospeso" + }, + "skipped": { + "help": "Questa traccia è già presente in una delle tue librerie", + "label": "Saltato" + } + }, + "label": "Clicca per visualizzare più informazioni sul processo di importazione di questo caricamento" + }, + "privacyLevel": { + "choices": { + "instance": "Tutti su questa istanza", + "private": "Nessuno tranne me", + "public": "Tutti, su tutte le istanze" + }, + "help": "Imposta il livello di visibilità delle tue attività", + "label": "Visibilità dell'attività", + "shortChoices": { + "instance": "Istanza", + "private": "Privato", + "public": "Tutti" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contenuto illegale", + "invalidMetadata": "Metadati non validi", + "offensiveContent": "Contenuto offensivo", + "other": "Altro", + "takedownRequest": "Richiesta di rimozione" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data di accesso", + "albumTitle": "Nome album", + "artistName": "Nome dell'artista", + "bitrate": "Bitrate", + "creationDate": "Data di creazione", + "dateJoined": "Data di registrazione", + "domain": "Dominio", + "duration": "Durata", + "expirationDate": "Data di scadenza", + "firstSeen": "Visto per la prima volta in data", + "followers": "Seguito da", + "itemsCount": "Oggetti", + "lastActivity": "Ultima attività", + "lastSeen": "Visto l'ultima volta in data", + "modificationDate": "Data di modifica", + "name": "Nome", + "receivedMessages": "Messaggi ricevuti", + "releaseDate": "Data di rilascio", + "size": "Dimensione", + "trackTitle": "Nome traccia", + "uploads": "Caricamenti", + "username": "Nome utente", + "users": "Utenti" + }, + "scopes": { + "edits": { + "description": "Accesso alle modifiche", + "label": "Modifiche" + }, + "favorites": { + "label": "Preferiti" + }, + "filters": { + "description": "Accesso ai filtri del contenuto", + "label": "Filtri di contenuto" + }, + "follows": { + "description": "Accesso ai seguiti", + "label": "Segue" + }, + "libraries": { + "description": "Accedi ai file audio, librerie, artisti, album e tracce", + "label": "Librerie e caricamenti" + }, + "listenings": { + "description": "Accedi alla cronologia di ascolto", + "label": "Ascolti" + }, + "notifications": { + "description": "Accesso alle notifiche", + "label": "Notifiche" + }, + "playlists": { + "description": "Accesso alle playlist", + "label": "Playlist" + }, + "profile": { + "description": "Accedi a email, nome utente e informazioni del profilo", + "label": "Profilo" + }, + "radios": { + "description": "Accesso alle radio", + "label": "Radio" + }, + "reports": { + "description": "Accesso ai report di moderazione", + "label": "Segnalazioni" + }, + "security": { + "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", + "label": "Sicurezza" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "name": "Nome" + }, + "cover": { + "label": "Cover" + }, + "description": { + "label": "Descrizione" + }, + "tags": { + "label": "Tag" + }, + "track": { + "copyright": "Diritti d'autore", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + } + }, + "useReport": { + "account": { + "typeLabel": "Account" + }, + "album": { + "label": "Segnala questo album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Segnala questo artista…", + "typeLabel": "Artista", + "unknownLabel": "Artista sconosciuto" + }, + "channel": { + "label": "Segnala questo canale…", + "typeLabel": "Canale" + }, + "library": { + "label": "Segnala questa libreria…", + "typeLabel": "Libreria" + }, + "playlist": { + "label": "Segnala questa playlist…", + "typeLabel": "Playlist" + }, + "track": { + "label": "Segnala questa traccia…", + "typeLabel": "Traccia" + } + }, + "useReportConfigs": { + "account": { + "label": "Account", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data di rilascio", + "title": "Titolo" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Canale" + }, + "creationDate": { + "label": "Data di creazione" + }, + "library": { + "description": "Descrizione", + "label": "Libreria" + }, + "musicbrainzId": { + "label": "ID MusicBrainz" + }, + "name": { + "label": "Nome" + }, + "playlist": { + "label": "Playlist" + }, + "tags": { + "label": "Etichette" + }, + "track": { + "copyright": "Diritti d'autore", + "label": "Traccia", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "visibility": { + "label": "Visibilità" + } + } + }, + "useThemeList": { + "darkTheme": "Scuro", + "lightTheme": "Chiaro" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", + "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova più tardi" + }, + "serviceWorker": { + "actions": { + "later": "Dopo", + "update": "Aggiorna" + }, + "newAppVersion": "È disponibile una nuova versione dell'app." + } + }, + "views": { "Notifications": { + "button": { + "read": "Segna tutte come lette", + "submit": "Ho capito!" + }, + "empty": { + "notifications": "Nessuna notifica da visualizzare." + }, + "header": { + "funkwhaleSupport": "Ti piace Funkwhale?", + "instanceSupport": "Supporta questo pod di Funkwhale", + "messages": "I tuoi messaggi", + "notifications": "Le tue notifiche" + }, + "label": { + "reminder": "Ricordamelo tra:", + "showRead": "Mostra notifiche lette" + }, + "link": { + "donate": "Dona", + "help": "Scopri altri modi per aiutare" + }, + "loading": { + "notifications": "Caricando le notifiche…" + }, + "message": { + "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti è utile, potresti aiutarci a renderlo ancora migliore!" + }, "option": { "delay": { "30": "30 giorni", @@ -3461,584 +3210,63 @@ "never": "Mai" } }, - "link": { - "help": "Scopri altri modi per aiutare", - "donate": "Dona" + "title": "Notifiche" + }, + "Search": { + "button": { + "submit": "Invia Query di Ricerca" }, "header": { - "funkwhaleSupport": "Ti piace Funkwhale?", - "instanceSupport": "Supporta questo pod di Funkwhale", - "messages": "I tuoi messaggi", - "notifications": "Le tue notifiche" + "remote": "Cerca un oggetto remoto", + "rss": "Iscriviti al feed RSS di un podcast", + "search": "Cerca" }, - "button": { - "submit": "Ho capito!", - "read": "Segna tutte come lette" - }, - "loading": { - "notifications": "Caricando le notifiche…" - }, - "empty": { - "notifications": "Nessuna notifica da visualizzare." - }, - "title": "Notifiche", "label": { - "reminder": "Ricordamelo tra:", - "showRead": "Mostra notifiche lette" - }, - "message": { - "funkwhaleSupport": "Abbiamo notato che sei qui da un po'. Se Funkwhale ti è utile, potresti aiutarci a renderlo ancora migliore!" + "albums": "Albums", + "artists": "Artisti", + "playlists": "Playlist", + "podcasts": "Podcast", + "radios": "Radio", + "series": "Serie", + "tags": "Tag", + "tracks": "Tracce" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nome utente", - "loginStatus": { - "disabled": "Disabilitato", - "enabled": "Abilitato", - "label": "Stato dell'accesso" - }, - "displayName": "Nome visualizzato", - "email": "Indirizzo email", - "lastActivity": "Ultima attività", - "lastChecked": "Controllato l'ultima volta", - "permissions": "Permessi", - "signupDate": "Data di registrazione", - "userType": "Tipo" - }, - "audioContent": { - "cachedSize": "Dimensione in cache", - "megabyte": "MB", - "totalSize": "Dimensione totale", - "uploadQuota": "Quota di upload" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - } - }, - "header": { - "accountData": "Dati dell'account", - "activity": "Attività", - "audioContent": "Contenuto audio", - "localAccount": "Account locale", - "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo account." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "domain": "Dominio", - "libraries": "Librerie", - "linkedReports": "Segnalazioni collegate", - "openProfile": "Apri profilo", - "remoteProfile": "Apri profilo remoto", - "requests": "Richieste", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "tooltip": { - "uploadQuota": "Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il valore predefinito dell'istanza." - }, - "option": { - "permission": { - "library": "Libreria", - "moderation": "Moderazione", - "settings": "Impostazioni" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "Base": { - "link": { - "accounts": "Account", - "domains": "Domini", - "reports": "Segnalazioni", - "userRequests": "Richieste dell'Utente" - }, - "title": "Moderazione", - "menu": { - "secondary": "Menu secondario" - } - }, - "DomainsDetail": { - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "instanceData": "Dati dell'istanza", - "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", - "noPolicy": "Non hai nessuna regola attiva per questo dominio." - }, - "button": { - "addPolicy": "Aggiungi una nuova regola di moderazione", - "addToAllowList": "Aggiungi alla lista dei consentiti", - "refreshNodeInfo": "Aggiorna informazioni del nodo", - "removeFromAllowList": "Rimuovi dalla lista dei consentiti" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "knownAccounts": "Account conosciuti", - "libraries": "Librerie", - "website": "Apri sito web", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "activity": { - "emittedFollows": "Emessi i follow della libreria", - "emittedMessages": "Messaggi emessi", - "firstSeen": "Visto per la prima volta", - "receivedFollows": "Ricevuto un follow della libreria" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Errore durante il recupero delle informazioni del nodo", - "label": "Stato" - }, - "inAllowList": { - "label": "è presente sulla lista dei consentiti", - "false": "No", - "true": "Si" - }, - "lastChecked": "Controllato l'ultima volta", - "domainName": "Nome", - "software": { - "label": "Software" - }, - "totalUsers": "Utenti totali" - } - }, - "description": { - "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." - }, - "notApplicable": "N/D", - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "DomainsList": { - "button": { - "add": "Aggiungi" - }, - "label": { - "addDomain": "Aggiungi un dominio", - "addToAllowList": "Aggiungi alla lista dei consentiti" - }, - "title": "Domini", - "header": { - "domains": "Domini", - "failure": "Errore durante la creazione del dominio" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tutto", - "resolved": "Risolti", - "unresolved": "Non risolto" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "title": "Segnalazioni", - "header": { - "reports": "Segnalazioni" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per account, informazioni, dominio…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tutto", - "approved": "Approvato", - "pending": "In sospeso", - "refused": "Rifiutata" - } - }, - "ordering": { - "direction": { - "ascending": "Crescente", - "descending": "Decrescente", - "label": "Ordine" - }, - "label": "Ordinamento" - }, - "label": { - "search": "Cerca", - "status": "Stato" - }, - "placeholder": { - "search": "Cerca per username…" - }, - "title": "Richieste dell'Utente", - "header": { - "userRequests": "Richieste dell'Utente" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data di accesso", - "firstSeen": "Visto per la prima volta" - }, - "audioContent": { - "bitrate": { - "label": "Bitrate" - }, - "cachedSize": "Dimensione in cache", - "duration": "Durata", - "size": "Dimensione", - "track": "Traccia" - }, - "upload": { - "name": "Nome" - } - }, - "link": { - "account": "Account", - "domain": "Dominio", - "importStatus": "Stato dell'importazione", - "library": "Libreria", - "remoteProfile": "Apri profilo remoto", - "type": "Tipo", - "django": "Vedi nell'amministrazione di Django", - "visibility": "Visibilità" - }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "local": "Locale", - "uploadData": "Data di caricamento" - }, - "button": { - "delete": "Elimina", - "download": "Scarica" - }, - "modal": { - "delete": { - "header": "Eliminare questo caricamento?", - "content": { - "warning": "Il caricamento sarà rimosso. Questa azione è irreversibile." - } - } - }, - "notApplicable": "N/D" - }, - "LibraryDetail": { - "link": { - "account": "Account", - "albums": "Albums", - "artists": "Artisti", - "domain": "Dominio", - "reports": "Segnalazioni collegate", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django", - "visibility": "Visibilità" - }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "libraryData": "Dati della libreria", - "local": "Locale" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "library": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "firstSeen": "Visto per la prima volta", - "followers": "Seguito da" - } - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questa libreria?", - "content": { - "warning": "La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "AlbumDetail": { - "header": { - "activity": "Attività", - "albumData": "Dati dell'album", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "album": { - "description": "Descrizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo album?", - "content": { - "warning": "L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "ArtistDetail": { - "header": { - "activity": "Attività", - "artistData": "Dati dell'artista", - "audioContent": "Contenuto audio", - "local": "Locale" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "tracks": "Tracce", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "audioContent": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "artist": { - "description": "Descrizione", - "name": "Nome" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo artista?", - "content": { - "warning": "L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "TagDetail": { - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "tagData": "Dati del tag" - }, - "link": { - "albums": "Albums", - "artists": "Artisti", - "localProfile": "Apri profilo locale", - "tracks": "Tracce", - "django": "Vedi nell'amministrazione di Django" - }, - "button": { - "delete": "Elimina" - }, - "modal": { - "delete": { - "header": "Eliminare questo tag?", - "content": { - "warning": "Il tag selezionato sarà rimosso e scollegato da tutte le entità esistenti. Questa azione è irreversibile." - } - } - }, - "table": { - "activity": { - "firstSeen": "Visto per la prima volta" - }, - "tag": { - "name": "Nome" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Attività", - "local": "Locale", - "trackData": "Dati della traccia" - }, - "link": { - "album": "Album", - "albumArtist": "Artista dell'album", - "artist": "Artista", - "domain": "Dominio", - "edits": "Modifiche", - "libraries": "Librerie", - "reports": "Segnalazioni collegate", - "localProfile": "Apri profilo locale", - "musicbrainz": "Apri su MusicBrainz", - "remoteProfile": "Apri profilo remoto", - "uploads": "Caricamenti", - "django": "Vedi nell'amministrazione di Django" - }, - "table": { - "trackData": { - "cachedSize": "Dimensione in cache", - "totalSize": "Dimensione totale" - }, - "track": { - "copyright": "Diritti d'autore", - "description": "Descrizione", - "discNumber": "Numero disco", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "activity": { - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "listenings": "Ascolti", - "playlists": "Playlist" - } - }, - "button": { - "delete": "Elimina", - "edit": "Modifica", - "remoteRefresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questa traccia?", - "content": { - "warning": "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." - } - } - }, - "warning": { - "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artisti", - "channels": "Canali", - "edits": "Modifiche", - "libraries": "Librerie", - "tags": "Etichette", - "tracks": "Tracce", - "uploads": "Caricamenti" - }, - "title": "Gestisci libreria", - "menu": { - "secondary": "Menu secondario" - } - }, - "EditsList": { - "title": "Modifiche", - "header": { - "edits": "Modifiche della libreria" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Elimina", + "openRemote": "Apri profilo remoto", + "refresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "channelData": "Dati del canale" + }, + "label": { + "local": "Locale" + }, + "link": { + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarà rimosso, così come i file caricati, le tracce e gli album ad esso associati. Questa azione è irreversibile." + }, + "header": "Eliminare questo canale?" + } + }, "table": { - "channelData": { - "account": "Account", - "category": "Categoria", - "description": "Descrizione", - "domain": "Dominio", - "name": "Nome", - "rss": "Feed RSS", - "url": "URL" + "activity": { + "edits": "Modifiche", + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "linkedReports": "Segnalazioni collegate", + "listenings": "Ascolti", + "playlists": "Playlist" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3275,16 @@ "tracks": "Tracce", "uploads": "Caricamenti" }, - "activity": { - "edits": "Modifiche", - "favorited": "Tracce preferite", - "firstSeen": "Visto per la prima volta", - "linkedReports": "Segnalazioni collegate", - "listenings": "Ascolti", - "playlists": "Playlist" + "channelData": { + "account": "Account", + "category": "Categoria", + "description": "Descrizione", + "domain": "Dominio", + "name": "Nome", + "rss": "Feed RSS", + "url": "URL" } }, - "header": { - "activity": "Attività", - "audioContent": "Contenuto audio", - "channelData": "Dati del canale" - }, - "button": { - "delete": "Elimina", - "openRemote": "Apri profilo remoto", - "refresh": "Aggiorna da un server remoto" - }, - "modal": { - "delete": { - "header": "Eliminare questo canale?", - "content": { - "warning": "Il canale sarà rimosso, così come i file caricati, le tracce e gli album ad esso associati. Questa azione è irreversibile." - } - } - }, - "label": { - "local": "Locale" - }, - "link": { - "localProfile": "Apri profilo locale", - "django": "Vedi nell'amministrazione di Django" - }, "warning": { "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" } @@ -4104,53 +3308,1200 @@ "channels": "Canali", "federation": "Federazione", "instanceInfo": "Informazioni sull'istanza", - "settings": "Impostazioni dell'istanza", "moderation": "Moderazione", "music": "Musica", "playlists": "Playlist", "sections": "Sezioni", "security": "Sicurezza", + "settings": "Impostazioni dell'istanza", "signups": "Registrazioni", "stats": "Statistiche", "subsonic": "Subsonic", "ui": "Interfaccia Utente" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "albumData": "Dati dell'album", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'album sarà rimosso, ed anche i caricamenti associati, tracce, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questo album?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "album": { + "description": "Descrizione", + "title": "Titolo" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "ArtistDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "artistData": "Dati dell'artista", + "audioContent": "Contenuto audio", + "local": "Locale" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "L'artista sarà rimosso, ed anche i caricamenti associati, tracce, album, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questo artista?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "artist": { + "description": "Descrizione", + "name": "Nome" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "edits": "Modifiche", + "libraries": "Librerie", + "tags": "Etichette", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Gestisci libreria" + }, + "EditsList": { + "header": { + "edits": "Modifiche della libreria" + }, + "title": "Modifiche" + }, + "LibraryDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "libraryData": "Dati della libreria", + "local": "Locale" + }, + "link": { + "account": "Account", + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "tracks": "Tracce", + "uploads": "Caricamenti", + "visibility": "Visibilità" + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria sarà rimossa, ed anche i caricamenti associati e gli iscritti. Questa azione è irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta", + "followers": "Seguito da" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "library": { + "description": "Descrizione", + "name": "Nome" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "TagDetail": { + "button": { + "delete": "Elimina" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "tagData": "Dati del tag" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "django": "Vedi nell'amministrazione di Django", + "localProfile": "Apri profilo locale", + "tracks": "Tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il tag selezionato sarà rimosso e scollegato da tutte le entità esistenti. Questa azione è irreversibile." + }, + "header": "Eliminare questo tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Visto per la prima volta" + }, + "tag": { + "name": "Nome" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Elimina", + "edit": "Modifica", + "remoteRefresh": "Aggiorna da un server remoto" + }, + "header": { + "activity": "Attività", + "local": "Locale", + "trackData": "Dati della traccia" + }, + "link": { + "album": "Album", + "albumArtist": "Artista dell'album", + "artist": "Artista", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "edits": "Modifiche", + "libraries": "Librerie", + "localProfile": "Apri profilo locale", + "musicbrainz": "Apri su MusicBrainz", + "remoteProfile": "Apri profilo remoto", + "reports": "Segnalazioni collegate", + "uploads": "Caricamenti" + }, + "modal": { + "delete": { + "content": { + "warning": "La traccia sarà rimossa, ed anche i caricamenti associati, preferiti e cronologia di ascolto. Questa azione è irreversibile." + }, + "header": "Eliminare questa traccia?" + } + }, + "table": { + "activity": { + "favorited": "Tracce preferite", + "firstSeen": "Visto per la prima volta", + "listenings": "Ascolti", + "playlists": "Playlist" + }, + "track": { + "copyright": "Diritti d'autore", + "description": "Descrizione", + "discNumber": "Numero disco", + "license": "Licenza", + "position": "Posizione", + "title": "Titolo" + }, + "trackData": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "UploadDetail": { + "button": { + "delete": "Elimina", + "download": "Scarica" + }, + "header": { + "activity": "Attività", + "audioContent": "Contenuto audio", + "local": "Locale", + "uploadData": "Data di caricamento" + }, + "link": { + "account": "Account", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "importStatus": "Stato dell'importazione", + "library": "Libreria", + "remoteProfile": "Apri profilo remoto", + "type": "Tipo", + "visibility": "Visibilità" + }, + "modal": { + "delete": { + "content": { + "warning": "Il caricamento sarà rimosso. Questa azione è irreversibile." + }, + "header": "Eliminare questo caricamento?" + } + }, + "notApplicable": "N/D", + "table": { + "activity": { + "accessedDate": "Data di accesso", + "firstSeen": "Visto per la prima volta" + }, + "audioContent": { + "bitrate": { + "label": "Bitrate", + "value": "{bitrate}/s" + }, + "cachedSize": "Dimensione in cache", + "duration": "Durata", + "size": "Dimensione", + "track": "Traccia" + }, + "upload": { + "name": "Nome" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "accountData": "Dati dell'account", + "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", + "activity": "Attività", + "audioContent": "Contenuto audio", + "localAccount": "Account locale", + "noPolicy": "Non hai nessuna regola attiva per questo account." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "domain": "Dominio", + "libraries": "Librerie", + "linkedReports": "Segnalazioni collegate", + "openProfile": "Apri profilo", + "remoteProfile": "Apri profilo remoto", + "requests": "Richieste", + "tracks": "Tracce", + "uploads": "Caricamenti" + }, + "notApplicable": "N/D", + "option": { + "permission": { + "library": "Libreria", + "moderation": "Moderazione", + "settings": "Impostazioni" + } + }, + "table": { + "accountData": { + "displayName": "Nome visualizzato", + "email": "Indirizzo email", + "lastActivity": "Ultima attività", + "lastChecked": "Controllato l'ultima volta", + "loginStatus": { + "disabled": "Disabilitato", + "enabled": "Abilitato", + "label": "Stato dell'accesso" + }, + "permissions": "Permessi", + "signupDate": "Data di registrazione", + "userType": "Tipo", + "username": "Nome utente" + }, + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "megabyte": "MB", + "totalSize": "Dimensione totale", + "uploadQuota": "Quota di upload" + } + }, + "tooltip": { + "uploadQuota": "Determina quanto contenuto un utente può caricare. Lascia vuoto per usare il valore predefinito dell'istanza." + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "Base": { + "link": { + "accounts": "Account", + "domains": "Domini", + "reports": "Segnalazioni", + "userRequests": "Richieste dell'Utente" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Moderazione" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Aggiungi una nuova regola di moderazione", + "addToAllowList": "Aggiungi alla lista dei consentiti", + "refreshNodeInfo": "Aggiorna informazioni del nodo", + "removeFromAllowList": "Rimuovi dalla lista dei consentiti" + }, + "description": { + "policy": "Le regole di moderazione ti aiutano a controllare come la tua istanza interagisce con un dato dominio o account." + }, + "header": { + "activePolicy": "Questo dominio è soggetto a regole specifiche di moderazione", + "activity": "Attività", + "audioContent": "Contenuto audio", + "instanceData": "Dati dell'istanza", + "noPolicy": "Non hai nessuna regola attiva per questo dominio." + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "channels": "Canali", + "django": "Vedi nell'amministrazione di Django", + "knownAccounts": "Account conosciuti", + "libraries": "Librerie", + "tracks": "Tracce", + "uploads": "Caricamenti", + "website": "Apri sito web" + }, + "notApplicable": "N/D", + "table": { + "activity": { + "emittedFollows": "Emessi i follow della libreria", + "emittedMessages": "Messaggi emessi", + "firstSeen": "Visto per la prima volta", + "receivedFollows": "Ricevuto un follow della libreria" + }, + "audioContent": { + "cachedSize": "Dimensione in cache", + "totalSize": "Dimensione totale" + }, + "instanceData": { + "domainName": "Nome", + "inAllowList": { + "false": "No", + "label": "è presente sulla lista dei consentiti", + "true": "Si" + }, + "lastChecked": "Controllato l'ultima volta", + "nodeInfoStatus": { + "label": "Stato", + "value": "Errore durante il recupero delle informazioni del nodo" + }, + "software": { + "label": "Software", + "value": "{name} ({version})" + }, + "totalUsers": "Utenti totali" + } + }, + "warning": { + "stats": "Le statistiche sono calcolate da attività conosciute e contenuti della tua istanza, e non riflette l'attività generale per questo oggetto" + } + }, + "DomainsList": { + "button": { + "add": "Aggiungi" + }, + "header": { + "domains": "Domini", + "failure": "Errore durante la creazione del dominio" + }, + "label": { + "addDomain": "Aggiungi un dominio", + "addToAllowList": "Aggiungi alla lista dei consentiti" + }, + "title": "Domini" + }, + "ReportsList": { + "header": { + "reports": "Segnalazioni" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "resolved": "Risolti", + "unresolved": "Non risolto" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per account, informazioni, dominio…" + }, + "title": "Segnalazioni" + }, + "RequestsList": { + "header": { + "userRequests": "Richieste dell'Utente" + }, + "label": { + "search": "Cerca", + "status": "Stato" + }, + "option": { + "status": { + "all": "Tutto", + "approved": "Approvato", + "pending": "In sospeso", + "refused": "Rifiutata" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Ordine" + }, + "label": "Ordinamento" + }, + "placeholder": { + "search": "Cerca per username…" + }, + "title": "Richieste dell'Utente" + } + }, "users": { "Base": { "link": { "invitations": "Inviti", "users": "Utenti" }, - "title": "Gestisci utenti", "menu": { "secondary": "Menu secondario" + }, + "title": "Gestisci utenti" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Accesso in corso…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Non è stato possibile confermare il tuo indirizzo e-mail", + "success": "Indirizzo e-mail confermato" + }, + "label": { + "confirmationCode": "Codice di conferma" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "success": "Ora puoi usare il servizio senza limitazioni." + }, + "title": "Conferma il tuo indirizzo e-mail" + }, + "Login": { + "header": { + "login": "Accedi al tuo account Funkwhale" + }, + "title": "Accedi" + }, + "PasswordReset": { + "button": { + "requestReset": "Chiedi un reset della password" + }, + "header": { + "failure": "Errore durante la richiesta di un reset della password", + "reset": "Resetta la tua password" + }, + "help": { + "form": "Usa questo modulo per richiedere un reset della password. Ti invieremo una email all'indirizzo fornito con le istruzioni per resettare la tua password." + }, + "label": { + "email": "Indirizzo email dell'account" + }, + "link": { + "back": "Torna alla pagina di accesso" + }, + "placeholder": { + "email": "Inserisci l'indirizzo email collegato al tuo account" + }, + "title": "Resetta la tua password" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aggiorna la tua password" + }, + "header": { + "failure": "Errore durante la modifica della password", + "success": "Password aggiornata con successo" + }, + "label": { + "newPassword": "Nuova password" + }, + "link": { + "back": "Torna alla pagina di accesso", + "login": "Procedi all'accesso" + }, + "message": { + "requestSent": "Se l'indirizzo email fornito nel passo precedente è valido e collegato a un account utente, dovresti ricevere un'email con le istruzioni per il reset nei prossimi minuti.", + "success": "La tua password è stata aggiornata con successo." + }, + "title": "Cambia la tua password" + }, + "Plugins": { + "title": "Gestisci i plugin" + }, + "ProfileActivity": { + "header": { + "playlists": "Playlist", + "recentlyFavorited": "Preferiti recenti", + "recentlyListened": "Ascoltate recentemente" + } + }, + "ProfileBase": { + "label": { + "self": "Questo sei tu!" + }, + "link": { + "activity": "Attività", + "domainView": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "overview": "Panoramica" + }, + "title": "Profilo di { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Annulla", + "createChannel": "Crea canale", + "next": "Prossimo passo", + "previous": "Passo precedente" + }, + "header": { + "channels": "Canali", + "libraries": "Librerie dell'Utente", + "sharedLibraries": "Questo utente ha condiviso le seguenti librerie" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Canale dell'artista" + }, + "header": "Crea canale", + "podcast": { + "header": "Canale podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crea un account su Funkwhale" + }, + "title": "Registrati" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina", + "delete": "Elimina…", + "edit": "Modifica…", + "embed": "Incorpora", + "play": "Riproduci", + "updateChannel": "Aggiorna canale", + "upload": "Carica" + }, + "header": { + "artistChannel": "Canale dell'artista", + "podcastChannel": "Canale podcast" + }, + "link": { + "channelEpisodes": "Tutti gli Episodi", + "channelOverview": "Panoramica", + "channelTracks": "Tracce", + "domainView": "Visualizza su { dominio }", + "mirrored": "Mirror da { dominio }", + "moderation": "Apri nell'interfaccia di moderazione" + }, + "meta": { + "episodes": "{ n } episodio | { n } episodi", + "listenings": "{ n } ascolto | { n } ascolti", + "subscribers": "{ n } iscritto | { n } iscritti", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "delete": { + "content": { + "warning": "Il canale sarà rimosso, così come i file ad esso associati e i dati. Questa azione è irreversibile." + }, + "header": "Eliminare questo Canale?" + }, + "embed": { + "header": "Incorpora il lavoro di questo artista nel tuo sito web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Se stai usando Mastodon o altre applicazioni per il fediverso, puoi iscriverti a questo account:" + }, + "header": "Iscriviti sul Fediverso" + }, + "funkwhale": { + "header": "Iscriviti su Funkwhale" + }, + "header": "Iscriviti a questo canale", + "rss": { + "content": { + "help": "Copia-incolla il seguente url nella tua app di podcasting preferita:" + }, + "header": "Iscriviti via RSS" + } + } + }, + "title": "Canale" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Ultimi episodi", + "latestTracks": "Ultime tracce", + "series": "Serie", + "uploadsFailure": "Non è stato possibile pubblicare alcuni file", + "uploadsProcessing": "I file caricati stanno venendo elaborati", + "uploadsSuccess": "Upload pubblicati con successo" + }, + "link": { + "addAlbum": "Aggiungi nuovo", + "erroredUploads": "Visualizza caricamenti falliti", + "skippedUploads": "Visualizza caricamenti saltati" + }, + "message": { + "processing": "I file caricati stanno venendo elaborati da Funkwhale e saranno pubblicati a breve." + }, + "meta": { + "progress": "File processati:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Annulla", + "subscribe": "Iscriviti" + }, + "link": { + "addNew": "Aggiungi nuovo" + }, + "modal": { + "subscription": { + "header": "Iscrizione" + } + }, + "placeholder": { + "search": "Filtra per nome…" + }, + "title": "Canali a cui sei iscritto" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Librerie", + "tracks": "Tracce" + }, + "menu": { + "secondary": "Menu secondario" + }, + "title": "Aggiungi contenuto" + }, + "Home": { + "button": { + "start": "Per iniziare" + }, + "description": { + "channel": { + "1": "Se sei un musicista o un podcaster, i canali sono pensati per te!", + "2": "Condividi le tue opere pubblicamente e ottieni iscritti su Funkwhale, il Fediverso o qualsiasi applicazione di podcasting." + }, + "follow": "Segui librerie di altri utenti per avere accesso a nuova musica. Le librerie pubbliche possono essere seguite immediatamente, mentre seguire le librerie private richiedono l'approvazione del loro proprietario.", + "upload": "Carica la tua libreria musicale personale su Funkwhale per ascoltarla da ovunque e condividerla con amici e famiglia." + }, + "header": { + "channel": "Pubblica le tue opere in un canale", + "follow": "Segui librerie remote", + "upload": "Carica contenuto di terze parti in una libreria" + }, + "help": { + "uploadQuota": "Questa istanza offre fino a {quota} di spazio di archiviazione per ogni utente." + }, + "title": "Aggiungi e gestisci contenuti" + }, + "libraries": { + "Card": { + "button": { + "upload": "Carica" + }, + "label": { + "size": "Dimensione totale dei file in questa libreria" + }, + "link": { + "details": "Dettagli Libreria" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + } + }, + "FilesTable": { + "action": { + "delete": "Elimina", + "restartImport": "Riavvia importazione" + }, + "button": { + "showStatus": "Mostra informazioni sullo stato di caricamento di questa traccia" + }, + "empty": { + "noTracks": "Non sono ancora state aggiunte tracce a questa libreria" + }, + "label": { + "importStatus": "Stato dell'importazione", + "search": "Cerca" + }, + "notApplicable": "N/D", + "option": { + "status": { + "all": "Tutto", + "draft": "Bozza", + "failed": "Fallito", + "finished": "Finito", + "pending": "In sospeso", + "skipped": "Saltato" + } + }, + "ordering": { + "direction": { + "ascending": "Crescente", + "descending": "Decrescente", + "label": "Direzione di ordinamento" + }, + "label": "Ordinamento" + }, + "pagination": { + "results": "Mostrando i risultati da { start } a { end } su { total }" + }, + "placeholder": { + "search": "Cerca per titolo, artista, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durata", + "importStatus": "Stato dell'importazione", + "size": "Dimensione", + "title": "Titolo", + "uploadDate": "Data di caricamento" + } + } + } + }, + "Form": { + "button": { + "confirm": "Elimina libreria", + "create": "Crea libreria", + "delete": "Elimina", + "update": "Aggiorna libreria" + }, + "description": { + "library": "Le librerie sono di aiuto per organizzare e condividere la tua collezione musicale. Puoi caricare la tua musica su Funkwhale e condividerla con amici e parenti.", + "visibility": "Sarai in grado di condividere la tua libreria con altre persone, indipendentemente dalla sua visibilità." + }, + "header": { + "failure": "Errore" + }, + "label": { + "description": "Descrizione", + "name": "Nome", + "visibility": "Visibilità" + }, + "message": { + "libraryCreated": "Libreria creata", + "libraryDeleted": "Libreria eliminata", + "libraryUpdated": "Libreria aggiornata" + }, + "modal": { + "delete": { + "content": { + "warning": "La libreria e tutte le sue tracce saranno eliminate. Questa azione è irreversibile." + }, + "header": "Eliminare questa libreria?" + } + }, + "placeholder": { + "description": "Questa libreria contiene la mia musica personale, spero vi piaccia.", + "name": "La mia eccezionale libreria" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembra che tu non abbia ancora nessuna libreria, è tempo di crearne una." + }, + "header": { + "libraries": "Le mie librerie" + }, + "link": { + "createLibrary": "Crea una nuova libreria" + }, + "loading": { + "libraries": "Caricando le Librerie…" + } + }, + "Quota": { + "button": { + "purge": "Rimuovi" + }, + "header": { + "currentUsage": "Utilizzo attuale" + }, + "label": { + "currentUsage": "{ current } usato su { max } consentito", + "errored": "File con errore", + "pending": "File in sospeso", + "skipped": "File saltati" + }, + "link": { + "viewFiles": "Vedi files" + }, + "loading": { + "currentUsage": "Caricando i dati di utilizzo…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che non sono state processate correttamente, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file con errori?" + }, + "purgePending": { + "content": { + "description": "Rimuovi completamente tracce caricate ma non ancora processate, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file in attesa?" + }, + "purgeSkipped": { + "content": { + "description": "Rimuove completamente le tracce caricate ma che sono state saltate durante la fase di importazione, aggiungendo lo spazio corrispondente alla tua quota." + }, + "header": "Rimuovere file saltati?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Annulla richiesta di seguire", + "follow": "Segui", + "pending": "Richiesta di seguire in attesa di approvazione", + "unfollow": "Smetti di seguire" + }, + "label": { + "scanFailure": "Errore durante la scansione", + "scanPartialSuccess": "Scansione eseguita con errori", + "scanPending": "Scansione in sospeso", + "scanProgress": "Scansionando… ({ progress }%)", + "scanSuccess": "Scansionata", + "sharingLink": "Condividi collegamento" + }, + "link": { + "scan": "Scansiona ora", + "scanDetails": "Dettagli" + }, + "message": { + "scanLaunched": "Scansione avviata", + "scanSkipped": "Scansione saltata (la scansione precedente è troppo recente)" + }, + "meta": { + "failedTracks": "Tracce con errore:", + "lastUpdate": "Ultimo aggiornamento:", + "tracks": "{ n } traccia | { n } tracce" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Smettendo di seguire questa libreria, perderai l'accesso al suo contenuto." + }, + "header": "Smettere di seguire questa libreria?" + } + }, + "tooltip": { + "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", + "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" + } + }, + "Home": { + "button": { + "refresh": "Aggiorna" + }, + "description": { + "remoteLibraries": "Le librerie remote sono di proprietà di altri utenti nella rete. Puoi accedervi se sono pubbliche o se ti è stato dato l'accesso ad esse." + }, + "header": { + "knownLibraries": "Librerie conosciute", + "remoteLibraries": "Librerie remote" + }, + "loading": { + "remoteLibraries": "Caricando le librerie remote…" + } + }, + "ScanForm": { + "button": { + "submit": "Invia ricerca" + }, + "header": { + "failure": "Non è stato possibile recuperare la libreria remota" + }, + "label": { + "search": "Cerca una libreria remota" + }, + "placeholder": { + "url": "Inserisci l'URL di una libreria" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artisti", - "playlists": "Playlist", - "podcasts": "Podcast", - "radios": "Radio", - "series": "Serie", - "tags": "Tag", - "tracks": "Tracce" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } }, - "header": { - "search": "Cerca", - "remote": "Cerca un oggetto remoto", - "rss": "Iscriviti al feed RSS di un podcast" + "DetailOverview": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } }, - "button": { - "submit": "Invia Query di Ricerca" + "DetailTracks": { + "empty": { + "follow": "Potresti aver bisogno di seguire questa libreria per vedere il suo contenuto.", + "upload": "Questa libreria è vuota, dovresti caricarci qualcosa!" + } + }, + "Edit": { + "button": { + "accept": "Accetta", + "reject": "Rifiuta" + }, + "empty": { + "noFollowers": "Nessuno segue questa libreria" + }, + "header": { + "followers": "Seguito da", + "libraryContents": "Contenuto della libreria" + }, + "loading": { + "followers": "Caricando la lista di chi ti segue…" + }, + "table": { + "action": { + "header": { + "action": "Azione", + "date": "Data", + "status": "Stato", + "user": "Utente" + }, + "status": { + "accepted": "Accettato", + "pending": "Approvazione in sospeso", + "rejected": "Rifiutato" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modifica", + "upload": "Carica" + }, + "description": { + "sharingLink": "Condividi questo link con altri utenti in modo che possano richiedere l'accesso alla tua libreria incollandolo nella barra di ricerca della loro istanza." + }, + "label": { + "instance": "Ristretto", + "private": "Privato", + "public": "Pubblico", + "sharingLink": "Condividi collegamento" + }, + "link": { + "albums": "Albums", + "artists": "Artisti", + "domain": "Visualizza su { dominio }", + "moderation": "Apri nell'interfaccia di moderazione", + "owner": "Proprietà di { username }", + "tracks": "Tracce" + }, + "meta": { + "tracks": "{ n } traccia | { n } tracce" + }, + "title": "Libreria", + "tooltip": { + "instance": "Questa libreria è ristretta agli utenti di questa istanza", + "private": "Questa libreria è privata e la tua approvazione dal suo proprietario è necessaria per accedere al suo contenuto", + "public": "Questa libreria è pubblica e tu puoi accedere al suo contenuto liberamente" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Annulla", + "confirm": "Elimina playlist", + "delete": "Elimina", + "edit": "Modifica", + "embed": "Incorpora", + "playAll": "Riproduci tutto", + "stopEdit": "Smetti di modificare" + }, + "empty": { + "noTracks": "Non ci sono ancora tracce in questa playlist" + }, + "header": { + "tracks": "Tracce" + }, + "meta": { + "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" + }, + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerà questa lista di riproduzione e non può essere annullato." + }, + "header": "Vuoi eliminare la playlist \"{ playlist }\"?" + }, + "embed": { + "header": "Incorpora questo album nel tuo sito web" + } + }, + "title": "Playlist" + }, "List": { + "button": { + "create": "Crea playlist", + "manage": "Gestisci le tue playlist", + "search": "Cerca" + }, + "empty": { + "noResults": "Nessun risultato che corrisponde alla tua ricerca" + }, + "header": { + "browse": "Sfogliando playlists", + "playlists": "Playlist" + }, + "label": { + "search": "Cerca" + }, "ordering": { "direction": { "ascending": "Crescente", @@ -4159,58 +4510,11 @@ }, "label": "Ordinamento" }, - "header": { - "browse": "Sfogliando playlists", - "playlists": "Playlist" - }, - "button": { - "create": "Crea playlist", - "manage": "Gestisci le tue playlist", - "search": "Cerca" - }, - "placeholder": { - "search": "Inserisci il nome di una playlist…" - }, - "empty": { - "noResults": "Nessun risultato che corrisponde alla tua ricerca" - }, "pagination": { "results": "Risultati per pagina" }, - "label": { - "search": "Cerca" - } - }, - "Detail": { - "button": { - "cancel": "Annulla", - "delete": "Elimina", - "confirm": "Elimina playlist", - "edit": "Modifica", - "embed": "Incorpora", - "playAll": "Riproduci tutto", - "stopEdit": "Smetti di modificare" - }, - "modal": { - "delete": { - "header": "Vuoi eliminare la playlist \"{ playlist }\"?", - "content": { - "warning": "Questo cancellerà questa lista di riproduzione e non può essere annullato." - } - }, - "embed": { - "header": "Incorpora questo album nel tuo sito web" - } - }, - "title": "Playlist", - "meta": { - "tracks": "Lista di riproduzione contenente { n } traccia, di { username } | Lista di riproduzione contenente { n } tracce, di { username }" - }, - "empty": { - "noTracks": "Non ci sono ancora tracce in questa playlist" - }, - "header": { - "tracks": "Tracce" + "placeholder": { + "search": "Inserisci il nome di una playlist…" } } }, @@ -4218,289 +4522,47 @@ "Detail": { "button": { "confirm": "Elimina radio", + "delete": "Elimina", "edit": "Modifica…" }, - "modal": { - "delete": { - "header": "Vuoi eliminare la radio \"{ radio }\"?", - "content": { - "warning": "Questo cancellerà questa radio e non può essere annullato." - } - } - }, "empty": { "noTracks": "Non sono ancora state aggiunte tracce a questa radio" }, - "title": "Radio", "header": { "tracks": "Tracce" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } traccia è stata aggiunta alla tua coda | { n } tracce sono state aggiunte alla tua coda" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Accedi ai file audio, librerie, artisti, album e tracce", - "label": "Librerie e caricamenti" - }, - "filters": { - "description": "Accesso ai filtri del contenuto", - "label": "Filtri di contenuto" - }, - "profile": { - "description": "Accedi a email, nome utente e informazioni del profilo", - "label": "Profilo" - }, - "edits": { - "description": "Accesso alle modifiche", - "label": "Modifiche" - }, - "follows": { - "description": "Accesso ai seguiti", - "label": "Segue" - }, - "listenings": { - "description": "Accedi alla cronologia di ascolto", - "label": "Ascolti" - }, - "reports": { - "description": "Accesso ai report di moderazione", - "label": "Segnalazioni" - }, - "notifications": { - "description": "Accesso alle notifiche", - "label": "Notifiche" - }, - "playlists": { - "description": "Accesso alle playlist", - "label": "Playlist" - }, - "radios": { - "description": "Accesso alle radio", - "label": "Radio" - }, - "security": { - "description": "Accesso alle impostazioni di sicurezza come password e autorizzazioni", - "label": "Sicurezza" - }, - "favorites": { - "label": "Preferiti" - } }, - "filters": { - "accessedDate": "Data di accesso", - "albumTitle": "Nome album", - "artistName": "Nome dell'artista", - "bitrate": "Bitrate", - "creationDate": "Data di creazione", - "domain": "Dominio", - "duration": "Durata", - "expirationDate": "Data di scadenza", - "firstSeen": "Visto per la prima volta in data", - "followers": "Seguito da", - "itemsCount": "Oggetti", - "lastActivity": "Ultima attività", - "lastSeen": "Visto l'ultima volta in data", - "modificationDate": "Data di modifica", - "name": "Nome", - "receivedMessages": "Messaggi ricevuti", - "releaseDate": "Data di rilascio", - "dateJoined": "Data di registrazione", - "size": "Dimensione", - "trackTitle": "Nome traccia", - "uploads": "Caricamenti", - "username": "Nome utente", - "users": "Utenti" - }, - "fields": { - "privacyLevel": { - "label": "Visibilità dell'attività", - "help": "Imposta il livello di visibilità delle tue attività", - "shortChoices": { - "public": "Tutti", - "instance": "Istanza", - "private": "Privato" + "modal": { + "delete": { + "content": { + "warning": "Questo cancellerà questa radio e non può essere annullato." }, - "choices": { - "instance": "Tutti su questa istanza", - "public": "Tutti, su tutte le istanze", - "private": "Nessuno tranne me" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contenuto illegale", - "invalidMetadata": "Metadati non validi", - "offensiveContent": "Contenuto offensivo", - "other": "Altro", - "takedownRequest": "Richiesta di rimozione" - } - }, - "importStatus": { - "label": "Clicca per visualizzare più informazioni sul processo di importazione di questo caricamento", - "choices": { - "draft": { - "label": "Bozza", - "help": "Questa traccia è stata caricata, ma la sua elaborazione non è ancora stata programmata" - }, - "errored": { - "label": "Si è verificato un errore", - "help": "Non è stato possibile processare questa traccia, assicurati che sia etichettata correttamente" - }, - "finished": { - "label": "Finito", - "help": "Importato" - }, - "pending": { - "label": "In sospeso", - "help": "Questa traccia è stata caricata, ma non è ancora stata processata dal server" - }, - "skipped": { - "label": "Saltato", - "help": "Questa traccia è già presente in una delle tue librerie" - } - } - }, - "contentCategory": { - "label": "Categoria del contenuto", - "choices": { - "music": "Musica", - "other": "Altro", - "podcast": "Podcast" - } + "header": "Vuoi eliminare la radio \"{ radio }\"?" } - } + }, + "title": "Radio" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Account" - }, - "album": { - "typeLabel": "Album", - "label": "Segnala questo album…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Segnala questo artista…" - }, - "channel": { - "typeLabel": "Canale", - "label": "Segnala questo canale…" - }, - "library": { - "typeLabel": "Libreria", - "label": "Segnala questa libreria…" - }, - "playlist": { - "typeLabel": "Playlist", - "label": "Segnala questa playlist…" - }, - "track": { - "label": "Segnala questa traccia…", - "typeLabel": "Traccia" - } + "ChooseInstance": { + "button": { + "submit": "Invia" }, - "useReportConfigs": { - "account": { - "label": "Account", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Canale" - }, - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo", - "label": "Traccia" - }, - "creationDate": { - "label": "Data di creazione" - }, - "library": { - "description": "Descrizione", - "label": "Libreria" - }, - "musicbrainzId": { - "label": "ID MusicBrainz" - }, - "name": { - "label": "Nome" - }, - "playlist": { - "label": "Playlist" - }, - "tags": { - "label": "Etichette" - }, - "visibility": { - "label": "Visibilità" - } + "header": { + "chooseInstance": "Scegli la tua istanza", + "failure": "Non è possibile connettersi all'URL dato", + "suggestions": "Scelte suggerite" }, - "useEditConfigs": { - "track": { - "copyright": "Diritti d'autore", - "license": "Licenza", - "position": "Posizione", - "title": "Titolo" - }, - "cover": { - "label": "Cover" - }, - "description": { - "label": "Descrizione" - }, - "artist": { - "name": "Nome" - }, - "album": { - "releaseDate": "Data di rilascio", - "title": "Titolo" - }, - "tags": { - "label": "Tag" - } + "help": { + "notFunkwhaleServer": "L'indirizzo fornito non è quello di un server Funkwhale", + "selectPod": "Per continuare, per favore seleziona l'istanza Funkwhale alla quale vuoi connetterti. Inserisci l'indirizzo direttamente, o selezionane uno dalla lista di suggerimenti.", + "serverDown": "Il server potrebbe essere caduto" + }, + "label": { + "url": "URL dell'istanza" + }, + "message": { + "currentConnection": "Attualmente sei connesso a { 0 }. Se continui, sarai disconnesso dalla tua istanza corrente e tutti i tuoi dati locali saranno eliminati.", + "newUrl": "Ora stai utilizzando l'istanza Funkwhale su { url }" } - }, - "useThemeList": { - "darkTheme": "Scuro", - "lightTheme": "Chiaro" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "È disponibile una nuova versione dell'app.", - "actions": { - "later": "Dopo", - "update": "Aggiorna" - } - }, - "axios": { - "rateLimitDelay": "Hai inviato troppe richieste e sei stato limitato, riprova tra { delay }", - "rateLimitLater": "Hai inviato troppe richieste e sei stato limitato, riprova più tardi" } } } diff --git a/front/src/locales/ja_JP.json b/front/src/locales/ja_JP.json index f8b2ae8ed..8646c2ce3 100644 --- a/front/src/locales/ja_JP.json +++ b/front/src/locales/ja_JP.json @@ -8,7 +8,7 @@ "findApp": "その他のデバイスでFunkwhaleを公式アプリを利用して楽しむ。", "funkwhale": "Funkwhaleはコミュニティによるプロジェクトであり、脱中央集権的な開かれたネットワークの中で音楽や音声を聞いたり、シェアすることができます。", "publicContent": "このポッドでシェアされている、公開アルバムやプレイリストを聞く。", - "quota": "また、このポッドのユーザーは自分のコンテンツをアップロードするための、{ quota }の無料ストレージを使えます!", + "quota": "また、このポッドのユーザーは自分のコンテンツをアップロードするための、{quota}の無料ストレージを使うことができます!", "signup": "今すぐ新規アカウント登録をして、あなたの好みの曲をお気に入りに追加する、プレイリストを作成する、新しいコンテンツを探す等々をしてみましょう!" }, "header": { @@ -18,6 +18,9 @@ "publicContent": "公開コンテンツを探す", "signup": "アカウント登録" }, + "help": { + "closedRegistrations": "このポッドでの新規アカウント登録は開放されていません。以下のリンクから、他のポッドに新規アカウント登録することができます。" + }, "link": { "findOtherPod": "他のポッドを探す", "learnMore": "さらに詳しく" @@ -31,7 +34,7 @@ }, "stat": { "activeUsers": "{ count } 人のアクティブユーザー", - "hoursOfMusic": "時間の音楽" + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽" }, "title": "このポッドについて" }, @@ -41,7 +44,7 @@ "anonymousAccess": "匿名アクセス", "federation": "連合機能", "quota": "アップロード上限", - "registrations": "アカウントの登録", + "registrations": "新規アカウント登録", "status": { "closed": "不可能", "disabled": "無効", @@ -79,7 +82,7 @@ "activeUsers": "アクティブユーザー", "albumsCount": "アルバム", "artistsCount": "アーティスト", - "hoursOfMusic": "時間の音楽", + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽", "listeningsCount": "再生", "tracksCount": "曲" }, @@ -104,7 +107,10 @@ "newChannels": "新しいチャンネル", "signup": "アカウント登録", "statistics": "統計", - "welcome": "{ podName }へようこそ!" + "welcome": "{podName} へようこそ!" + }, + "help": { + "registrationsClosed": "このポッドでの新規アカウント登録は開放されていません。以下のリンクから、他のポッドに新規アカウント登録することができます。" }, "link": { "findOtherPod": "他のポッドを探す", @@ -130,7 +136,7 @@ }, "stat": { "activeUsers": "{ count } 人のアクティブユーザー", - "hoursOfMusic": "{ count } 時間分の音楽" + "hoursOfMusic": "0 時間分の音楽 | {n} 時間分の音楽 | {n} 時間分の音楽" }, "title": "ホーム" }, @@ -154,24 +160,34 @@ }, "header": { "failure": "曲を読み込むことができませんでした", + "noSources": "この曲には利用可能な情報がありません。", "radio": "ラジオを再生中です" }, "label": { "addArtistContentFilter": "このアーティストのコンテンツを隠す…", "duration": "再生時間", + "enterFullscreen": "フルスクリーンモードにする", + "exitFullscreen": "フルスクリーンモードから離れる", + "favorite": "曲をお気に入りにする", "next": "次の曲", "pause": "停止する", "play": "再生", + "populatingRadio": "ラジオの曲を取得しています...", "previous": "前の曲", "queue": "再生キュー", - "remove": "除く" + "remove": "削除", + "restart": "曲の再生を再開", + "selectTrack": "曲を選ぶ", + "showCoverArt": "カバーアートを表示" }, "message": { "automaticPlay": "次の曲を数秒以内に自動的に再生します…", - "radio": "新しい曲は自動的に追加されます。" + "radio": "新しい曲は自動的に追加されます。", + "webglUnsupported": "あなたのブラウザーはWebGL2をサポートしていないようです。" }, "meta": { - "queuePosition": "{ length } 曲中 { index } 曲目", + "end": "再生予定時間", + "queuePosition": "{length} 曲中 {index} 曲目", "startTime": "00:00", "unknownAlbum": "不明なアルバム", "unknownArtist": "不明なアーティスト" @@ -190,12 +206,16 @@ "fediverse": "このフォームを利用して、Fediverseのどこかでホストされているチャンネルを購読しましょう。", "rss": "このフォームを利用して、URLからRSSフィードを購読しましょう。" }, + "error": { + "fetchFailed": "このオブジェクトを読み込むことができません" + }, "header": { - "fetchFailed": "オブジェクトをフェッチ中にエラーが発生しました" + "fetchFailed": "オブジェクトを取得中にエラーが発生しました" }, "label": { "fediverse": { "fieldLabel": "Fediverseのオブジェクト", + "fieldPlaceholder": "{'@'}username{'@'}example.com", "title": "Fediverse上でホストされている、ポッドキャストを登録する" }, "rss": { @@ -208,32 +228,12 @@ "unsupported": "このようなタイプのオブジェクトは、サポートされていません" } }, - "SetInstanceModal": { - "button": { - "cancel": "キャンセル" - }, - "header": { - "chooseInstance": "インスタンスを選んでください", - "failure": "入力されたURLにアクセスできません", - "suggestions": "おすすめのポッド" - }, - "help": { - "notFunkwhaleServer": "入力されたURL先はFunkwhaleのサーバーではありません", - "serverDown": "サーバーがダウンしてるかもしれません" - }, - "label": { - "url": "FunkwhaleインスタンスのURL" - }, - "message": { - "newUrl": "現在{ url }のFunkwhaleインスタンスを利用しています" - } - }, "ShortcutsModal": { "button": { "close": "閉じる" }, "header": { - "modal": "キーボードショートカット一" + "modal": "キーボードショートカット" }, "shortcut": { "audio": { @@ -243,7 +243,7 @@ "increaseVolume": "音量を上げる", "label": "オーディオプレイヤーのキーボードショートカット", "playNext": "次の曲を再生", - "playPause": "曲を止める・再生する", + "playPause": "曲を停止する、再生する", "playPrevious": "前の曲を再生", "seekBack30": "30秒戻る", "seekBack5": "5秒戻る", @@ -252,7 +252,7 @@ "shuffleQueue": "再生キューをシャッフルする", "toggleFavorite": "お気に入りにする・お気に入りから外す", "toggleLoop": "再生キューの曲をループ再生する・ループ再生の停止", - "toggleMute": "ミュート・ミュート解除" + "toggleMute": "ミュート、ミュート解除" }, "general": { "focus": "検索窓に移動する", @@ -296,6 +296,7 @@ "radios": "ラジオ", "search": "検索する", "settings": "設定", + "switchInstance": "インスタンスを切り替える", "users": "ユーザー" } }, @@ -365,6 +366,10 @@ "header": { "error": "チャンネルの保存中にエラーが発生しました。" }, + "help": { + "discography": "あなたが作成した音楽を投稿します。アルバムとシングルの魅力的なディスコグラフィーとして。", + "podcast": "あなたのエピソードをホストし、コミュニティに最新情報を届けましょう。" + }, "label": { "category": "カテゴリ", "description": "説明", @@ -484,6 +489,14 @@ "unknownArtist": "不明なアーティスト" } }, + "PlayerControls": { + "labels": { + "next": "次の曲", + "pause": "停止", + "play": "再生", + "previous": "前の曲" + } + }, "Search": { "empty": { "noAlbums": "入力した内容にマッチするアルバムはありません", @@ -632,6 +645,7 @@ }, "header": { "appDetails": "アプリケーションの詳細", + "appSecretWarning": "このトークンを安全な場所にコピーしてください。", "editApp": "アプリケーションの編集" }, "help": { @@ -645,6 +659,9 @@ "link": { "settings": "設定に戻る" }, + "message": { + "appSecretWarning": "一度このスクリーンを離れると、二度と見ることはできません。" + }, "title": "アプリケーションの編集" }, "ApplicationForm": { @@ -655,6 +672,9 @@ "header": { "failure": "変更を保存できません" }, + "help": { + "redirectUri": "もしあなたのアプリケーションをWeb上で利用できない場合、\"urn:ietf:wg:oauth:2.0:oob\"をリダイレクトURIとして利用してください" + }, "label": { "name": "名前", "redirectUri": "リダイレクトURL", @@ -686,8 +706,8 @@ "access": "{ app } があなたのFunkwhaleアカウントへのアクセスを要求しています", "allScopes": "フルアクセス", "authorize": "サードパーティアプリを認証", - "authorizeFailure": "アプリケーションの認証中にエラーが発生しました", - "fetchFailure": "アプリケーションのデータをフェッチ中にエラーが発生しました", + "authorizeFailure": "アプリケーションデータを取得中にエラーが発生しました", + "fetchFailure": "アプリケーションデータを取得中にエラーが発生しました", "readOnly": "読込専用", "writeOnly": "書き込み専用" }, @@ -767,7 +787,7 @@ "edit": "編集する", "password": "パスワードを変更", "refresh": "更新", - "remove": "除く", + "remove": "削除", "removeApp": "アプリを削除", "revoke": "取り消し", "revokeAccess": "アクセスの取り消し", @@ -782,6 +802,7 @@ "paragraph2": "以前のSubsonic API パスワードを使っているクライアントアプリのパスワードを更新する必要があります。" }, "contentFilters": "コンテンツフィルターは見たくないコンテンツを隠すのに役立ちます。", + "deleteAccount": "以下のフォームを利用することで、あなたのアカウントと関連した全てのデータを永久に、そして元に戻せないように削除します。削除の際に確認を求められます。", "plugins": "プラグインを使うことでFunkwhaleを拡張し、追加の機能を導入します。", "yourApps": "あなたが登録したアプリケーションのリストです。" }, @@ -838,7 +859,10 @@ "header": "アカウントを削除しますか?" }, "deleteApp": { - "header": "「{ application }」を削除しますか?" + "content": { + "warning": "アプリケーションと関連した全てのトークンを永久に削除します。" + }, + "header": "{app}を削除しますか?" }, "revokeApp": { "header": "\"{ application }\"のアプリケーションへのアクセスを取り消しますか?" @@ -867,7 +891,7 @@ }, "title": "アカウント設定", "warning": { - "deleteAccount": "あなたのアカウントは数分でサーバーから削除されます。また、あなたのデータのコピーを保持しているかもしれない、他のサーバーに通知されます。これによって、他のサーバーであなたのデータを削除するための処理ができるようになります。いくつかのサーバーはオフライン状態にある、または削除処理に積極的には応じないかもしれませんが、ご了承下さい。" + "deleteAccount": "あなたのアカウントは数分以内にサーバーから削除されます。また、このサーバーからあなたのデータの一部のコピーを保持しているかもしれない、他のサーバーに通知します。これによって、あなたのデータを削除するための処理が他のサーバーで可能になります。いくつかのサーバーはオフライン状態にあるかもしれない、または削除処理に積極的には応じないかもしれませんが、ご了承下さい。" } }, "SignupForm": { @@ -887,7 +911,7 @@ "message": { "accountCreated": "アカウントの作成に成功しました。ログインを試みる前に、メールアドレスの認証を行って下さい。", "awaitingReview": "アカウントリクエストの送信に成功しました。あなたのアカウントリクエストへのモデレーションチームによる審査が完了した際は、メールでお知らせします。", - "registrationClosed": "このインスタンスでの新規アカウント登録はできません。アカウント登録には招待コードが必要です。", + "registrationClosed": "このポッドでの新規アカウント登録はできません。新規アカウント登録には招待コードが必要です。", "requiresReview": "このポッドでは新規アカウント登録は開放されてますが、登録が認められる前にモデレーターによって審査されます。" }, "placeholder": { @@ -933,6 +957,9 @@ "header": "Subsonic APIアクセスを無効にしますか?" }, "newPassword": { + "content": { + "warning": "これによって、あなたは現在のパスワードを使用しているデバイスからログアウトされます。" + }, "header": "新しいSubsonic APIのパスワードをリクエストしますか?" } } @@ -993,7 +1020,7 @@ "button": { "edit": "編集する", "ignore": "無視する", - "remove": "除く", + "remove": "削除", "resume": "再開する", "retry": "再度試す" }, @@ -1020,6 +1047,7 @@ "label": { "description": "説明", "image": "曲画像", + "position": "トラックナンバー", "tags": "タグ", "title": "曲名" } @@ -1069,7 +1097,7 @@ }, "AttachmentInput": { "button": { - "remove": "除く" + "remove": "削除" }, "header": { "failure": "アップロードしたファイルを保存できませんでした" @@ -1124,7 +1152,7 @@ }, "Duration": { "meta": { - "hours": "{ hours } 時間 { minutes } 分", + "hours": "{hours} 時間 {minutes} 分", "minutes": "{ minutes } 分" } }, @@ -1155,7 +1183,7 @@ }, "LoginModal": { "description": { - "noAccess": "" + "noAccess": "あなたにはアクセス権限がありません" }, "header": { "unauthenticated": "認証されていません" @@ -1180,6 +1208,11 @@ "failure": "説明の更新中にエラーが発生しました" } }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, "UserMenu": { "label": { "language": "言語", @@ -1232,7 +1265,7 @@ "favorites": { "List": { "empty": { - "noFavorites": "お気に入りに加えられた曲がまだありません" + "noFavorites": "まだお気に入りに追加された曲はありません" }, "header": { "favorites": "{ count } 個のお気に入り" @@ -1271,10 +1304,13 @@ }, "description": { "failure": "データの更新中にエラーが発生しました:", + "pending": "更新リクエストがこのサーバーでは時間内に処理されませんでした。後ほど処理されます。", + "skipped": "リモートサーバーから応答はありましたが、返されたデータはFunkwhaleではサポートされていません。", "success": "リモートサーバーからのデータが正常に更新されました。" }, "header": { "failure": "更新エラー", + "pending": "更新保留中", "refresh": "リモートサーバーからのオブジェクトを更新中…", "saveFailure": "設定の保存中にエラーが発生しました", "skipped": "更新がスキップされました", @@ -1282,7 +1318,7 @@ }, "loader": { "awaitingResult": "フェッチの結果を待っています…", - "fetchRequest": "フェッチをリクエストする…" + "fetchRequest": "フェッチをリクエストしています…" }, "table": { "error": { @@ -1293,8 +1329,10 @@ "value": { "connectionError": "リモートのサーバーに接続できません", "httpError": "リモートサーバーとの通信中にHTTPエラーが発生しました", - "invalidAttributesError": "リモートサーバーから返されたデータに無効な属性があるか、属性がありません", + "httpStatus": "リモートサーバーが HTTP {status} を返しました", + "invalidAttributesError": "リモートサーバーから返されたデータに無効な属性があるか、属性自体がありません", "invalidJsonError": "リモートのサーバーが無効なJSONまたはJSON-LDデータを返しました", + "timeoutError": "リモートサーバーが十分なスピードで応答しませんでした", "unknownError": "不明なエラー" } } @@ -1505,7 +1543,13 @@ "header": { "modification": "修正 { id }" }, + "link": { + "track": "曲 #{id} - {name}" + }, "modal": { + "content": { + "warning": "この提案は完全に削除され、この削除アクションを取り消すことはできません。" + }, "delete": { "header": "この提案を削除しますか?" } @@ -1519,7 +1563,9 @@ "table": { "update": { "header": { - "field": "フィールド" + "field": "フィールド", + "newValue": "新しい値", + "oldValue": "古い値" }, "notApplicable": "N/A" } @@ -1529,21 +1575,25 @@ "button": { "cancel": "キャンセル", "clear": "クリア", + "new": "別の編集を提案", "reset": "初期値にリセット", + "showAll": "すべての編集を表示", "suggest": "提案を提出" }, "empty": { "suggestEdit": "下記のフォームを利用して変更を提案する" }, "header": { + "failure": "編集の提出中にエラーが発生しました", "recentEdits": "最近の編集", + "success": "あなたの編集は無事に提出されました。", "unreviewed": "チェック待ちの最近の編集" }, "label": { "summary": "概要(オプション)" }, "message": { - "noPermission": "あなたにはこのオブジェクトを編集する権限はありませんが、変更を提案することができます。一度提案すると、認められる前にその提案はレビューされます。" + "noPermission": "あなたにはこのオブジェクトを編集する権限はありませんが、変更を提案することができます。一度提案すると、承認される前にその提案はレビューされます。" }, "notApplicable": "N/A", "placeholder": { @@ -1571,12 +1621,19 @@ "label": { "extensions": "サポートされている拡張子: { extensions }", "remainingSpace": "残りのストレージ容量", - "uploadWidget": "クリックしてファイルを選択するか、ファイルやディレクトリをドラッグアンドドロップしてください" + "uploadWidget": "クリックしてアップロードするファイルを選択するか、ファイルまたはディレクトリをドラッグ&ドロップしてください" }, "link": { "processing": "処理中", "uploading": "アップロード中" }, + "message": { + "local": { + "format": "アップロードしようとしている音楽ファイルのフォーマットは、「OGG」「Flac」「MP3」または「AIFF」などにしましょう", + "message": "あなたはライブラリに音楽をアップロードしようとしています。処理を行う前に確認してください:", + "tag": "アップロードしようとしている音楽ファイルに適切にタグ付けをしましょう。" + } + }, "table": { "upload": { "header": { @@ -1770,6 +1827,9 @@ "header": "この曲をWebサイトに埋め込む" } }, + "subtitle": { + "with-uploader": "{1} に、{0} によってアップロードされました" + }, "title": "曲" }, "TrackDetail": { @@ -1810,7 +1870,8 @@ }, "TrackEdit": { "header": { - "edit": "この曲を編集する" + "edit": "この曲を編集する", + "suggest": "このアルバムについての編集を提案" }, "message": { "remote": " このオブジェクトは別のサーバーで管理されており、あなたはこれを編集できません。" @@ -1860,7 +1921,7 @@ "Filter": { "cancelButton": "キャンセル", "excludeLabel": "除く", - "removeButton": "除く" + "removeButton": "削除" } } }, @@ -2408,6 +2469,7 @@ "internalNotes": "管理用ノート", "pending": "保留中", "refused": "拒否", + "resolutionDate": "解決日", "status": "状態" } } @@ -2548,7 +2610,7 @@ "modal": "このフォームを利用してモデレーションチームに通報の届け出をしてください" }, "error": { - "nodeinfoFetch": "ノードの情報をフェッチできませんでした: {error}" + "nodeinfoFetch": "Node infoを取得できませんでした: {error}" }, "header": { "disabled": "匿名での通報は無効となっています。ログインして通報を提出してください。", @@ -2574,7 +2636,7 @@ "reject": "拒否" }, "message": { - "libraryAcceptFollow": "{ username } が ライブラリ\"{ library }\"のフォローを許可しました", + "libraryAcceptFollow": "{username} が、ライブラリ\"{library}\"へのフォローを許可しました", "libraryFollow": "{ username } があなたのライブラリ\"{ library }\"をフォローしました", "libraryPendingFollow": "{ username } があなたのライブラリ\"{ library }\"をフォローしたいようです" } @@ -2591,7 +2653,7 @@ "addDuplicate": "とにかく追加する", "clear": "プレイリストをクリア", "copy": "キューの曲をプレイリストへコピー", - "insertFromQueue": "再生キューから({ count } 曲)が加えられます" + "insertFromQueue": "再生キューから({n} 曲)が追加されます | 再生キューから({n} 曲)が追加されます" }, "error": { "sync": "変更の保存中にエラーが発生しました" @@ -2599,11 +2661,20 @@ "header": { "editor": "プレイリストエディター" }, + "help": { + "reorder": "プレイリスト内の曲を並び替えるには、各曲の行をドラッグ&ドロップしてください" + }, + "loading": { + "sync": "変更内容をサーバーと同期中…" + }, "message": { - "sync": "サーバーと同期された変更" + "sync": "変更内容をサーバーと同期しました" }, "modal": { "clearPlaylist": { + "content": { + "warning": "このプレイリストから全ての曲が削除されます。元に戻すことはできません。" + }, "header": "このプレイリスト「{ playlist }」をクリアしますか?" } }, @@ -2739,6 +2810,7 @@ "label": "完了" }, "pending": { + "help": "この曲はアップロードされましたが、まだサーバーによって処理されていません", "label": "保留中" }, "skipped": { @@ -2802,9 +2874,11 @@ }, "scopes": { "edits": { + "description": "編集へのアクセス", "label": "編集" }, "favorites": { + "description": "お気に入りへのアクセス", "label": "お気に入り" }, "filters": { @@ -2871,6 +2945,7 @@ "track": { "copyright": "コピーライト", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" } }, @@ -2944,6 +3019,7 @@ "copyright": "コピーライト", "label": "曲", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" }, "visibility": { @@ -2962,8 +3038,14 @@ } }, "init": { + "axios": { + "rateLimitDelay": "非常に多くのリクエストを送ったため、レートリミット制限されました。{delay}後にもう一度お試しください", + "rateLimitLater": "非常に多くのリクエストを送ったため、レートリミット制限されました。後ほど、もう一度お試しください" + }, "sentry": { - "funkwhaleInstance": "Funkwhaleの公式Glitchtipインスタンス" + "allow": "許可", + "funkwhaleInstance": "Funkwhaleの公式Glitchtipインスタンス", + "title": "私たちのサービスの質を高めるため、あなたのセッション中のクラッシュに関する情報を集めたい。" }, "serviceWorker": { "actions": { @@ -2999,6 +3081,9 @@ "loading": { "notifications": "通知を読み込んでいます…" }, + "message": { + "funkwhaleSupport": "どうやら、このサーバーに一定期間いらっしゃるようですね。もしFunkwhaleがあなたのお役に立つのであれば、Funkwhaleをより良いものにするためにあなたの助けが必要です!" + }, "option": { "delay": { "30": "30日", @@ -3341,6 +3426,7 @@ "description": "説明", "discNumber": "ディスク番号", "license": "ライセンス", + "position": "トラックナンバー", "title": "曲名" }, "trackData": { @@ -3841,9 +3927,11 @@ }, "description": { "channel": { - "1": "あなたがミュージシャンまたはポッドキャスターなら、専用のチャンネルが提供されます!" + "1": "あなたがミュージシャンまたはポッドキャスターなら、専用のチャンネルが作成されます!", + "2": "あなたの作品をみなさんとシェアして、Funkwhale、Fediverse、またはその他のポッドキャスティング・アプリケーションの購読者を獲得しましょう。" }, - "follow": "他のユーザーのライブラリをフォローして、新しい音楽に出会いましょう。公開ライブラリはすぐにフォローできますが、プライベートライブラリへのフォローはその所有者からの承認が必須です。" + "follow": "他のユーザーのライブラリをフォローして、新しい音楽に出会いましょう。公開ライブラリはすぐにフォローできますが、プライベートライブラリへのフォローはその所有者からの承認が必須です。", + "upload": "あなたの個人的な音楽ライブラリをFunkwhaleにアップロードして、どのような場所にいても音楽を楽しんだり、友人や家族とシェアしましょう。" }, "header": { "channel": "あなたの作品をチャンネルで公開", @@ -3851,7 +3939,7 @@ "upload": "サードパーティー・コンテンツをライブラリにアップロード" }, "help": { - "uploadQuota": "このインスタンスは全てのユーザーに{quota}のストレージを提供しています。" + "uploadQuota": "このインスタンスは各ユーザーに{quota}までのストレージスペースを提供しています。" }, "title": "コンテンツの追加と編集" }, @@ -4054,6 +4142,7 @@ "remoteLibraries": "リモートのライブラリは、Funkwhaleネットワーク上の他のユーザーが所有しています。ライブラリが公開されている、またはライブラリへのアクセス権を得ている限りは、アクセスできます。" }, "header": { + "knownLibraries": "既知のライブラリ", "remoteLibraries": "リモートのライブラリ" }, "loading": { @@ -4129,9 +4218,10 @@ "upload": "アップロード" }, "description": { - "sharingLink": "以下のリンクを他のユーザーとシェアしてみましょう。そのユーザーが属するポッドの検索バーに以下のリンクをコピー&ペーストすることで、このライブラリにアクセスすることができます。" + "sharingLink": "以下のリンクを他のユーザーとシェアしてみましょう。他のユーザーが属するポッドの検索バーに以下のリンクをコピー&ペーストすることで、このライブラリにアクセスすることができます。" }, "label": { + "instance": "限定公開", "private": "プライベート", "public": "公開", "sharingLink": "リンクをシェア" @@ -4141,7 +4231,7 @@ "artists": "アーティスト", "domain": "{ domain }で聞く", "moderation": "モデレーション画面で開く", - "owner": "{ username }が所有しています", + "owner": "{ username }が所有", "tracks": "曲一覧" }, "meta": { @@ -4163,7 +4253,7 @@ "edit": "編集する", "embed": "埋め込む", "playAll": "全曲再生", - "stopEdit": "編集を止める" + "stopEdit": "編集をやめる" }, "empty": { "noTracks": "まだこのプレイリストには曲がありません" @@ -4172,14 +4262,14 @@ "tracks": "曲一覧" }, "meta": { - "tracks": "このプレイリストには{ count }曲あり、{ username }がアップロードしました" + "tracks": "プレイリストには{n}曲が存在し、{username}が追加しました | プレイリストには{n}曲が存在し、{username}が追加しました" }, "modal": { "delete": { "content": { - "warning": "プレイリストを完全に削除しますが、元に戻すことはできません。" + "warning": "このプレイリストを完全に削除します。元に戻すことはできません。" }, - "header": "このプレイリスト「{ playlist }」を削除しますか?" + "header": "プレイリスト{ playlist }を削除しますか?" }, "embed": { "header": "このプレイリストをWebサイトに埋め込む" @@ -4237,11 +4327,29 @@ "content": { "warning": "ラジオを完全に削除しますが、元に戻すことはできません。" }, - "header": "ラジオ「{ radio }」を削除しますか?" + "header": "ラジオ{radio}を削除しますか?" } }, "title": "ラジオ" } + }, + "ChooseInstance": { + "button": {}, + "header": { + "chooseInstance": "インスタンスを選んでください", + "failure": "入力されたURLにアクセスできません", + "suggestions": "おすすめのポッド" + }, + "help": { + "notFunkwhaleServer": "入力されたURL先はFunkwhaleのサーバーではありません", + "serverDown": "サーバーがダウンしてるかもしれません" + }, + "label": { + "url": "FunkwhaleインスタンスのURL" + }, + "message": { + "newUrl": "現在{url}のFunkwhaleインスタンスを利用しています" + } } } } diff --git a/front/src/locales/kab_DZ.json b/front/src/locales/kab_DZ.json index ca8e5311b..7377b6eed 100644 --- a/front/src/locales/kab_DZ.json +++ b/front/src/locales/kab_DZ.json @@ -1390,12 +1390,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Sefex", - "submit": "Envoyer" - } - }, "Queue": { "button": { "clear": "Effacer", @@ -2176,6 +2170,11 @@ "header": { "search": "Anadi" } + }, + "ChooseInstance": { + "button": { + "submit": "Envoyer" + } } }, "composables": { diff --git a/front/src/locales/ml.json b/front/src/locales/ml.json index 19ac2546c..495be8718 100644 --- a/front/src/locales/ml.json +++ b/front/src/locales/ml.json @@ -1026,12 +1026,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "റദ്ദാക്കുക", - "submit": "സമർപ്പിക്കുക" - } - }, "Queue": { "button": { "clear": "മായ്ക്കുക", @@ -1617,6 +1611,11 @@ }, "title": "റേഡിയോ" } + }, + "ChooseInstance": { + "button": { + "submit": "സമർപ്പിക്കുക" + } } }, "init": { diff --git a/front/src/locales/nb_NO.json b/front/src/locales/nb_NO.json index 703c48253..c13ab85d2 100644 --- a/front/src/locales/nb_NO.json +++ b/front/src/locales/nb_NO.json @@ -2092,19 +2092,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Avbryt", - "submit": "Send inn" - }, - "header": { - "chooseInstance": "Velg din instans", - "suggestions": "Anbefalte valg" - }, - "label": { - "url": "Instansradiostasjoner" - } - }, "Queue": { "button": { "clear": "Tøm", @@ -3297,6 +3284,18 @@ "label": { "showRead": "Vis lesningsmerkander" } + }, + "ChooseInstance": { + "button": { + "submit": "Send inn" + }, + "header": { + "chooseInstance": "Velg din instans", + "suggestions": "Anbefalte valg" + }, + "label": { + "url": "Instansradiostasjoner" + } } }, "composables": { diff --git a/front/src/locales/nl.json b/front/src/locales/nl.json index a4a385a72..7e80030a7 100644 --- a/front/src/locales/nl.json +++ b/front/src/locales/nl.json @@ -109,6 +109,9 @@ "statistics": "Statistieken", "welcome": "Welkom bij { podName }!" }, + "help": { + "registrationsClosed": "Registraties zijn gesloten in deze pod. Je kan je registreren in een andere pod via de link hieronder." + }, "link": { "findOtherPod": "Zoek een andere pod", "funkwhale": "Bezoek funkwhale.audio", @@ -165,9 +168,11 @@ "duration": "Duur", "enterFullscreen": "Volledig scherm openen", "exitFullscreen": "Volledig scherm sluiten", + "favorite": "Favoriete nummer", "next": "Volgend nummer", "pause": "Pauseer", "play": "Afspelen", + "populatingRadio": "Een radionummer aan het ophalen…", "previous": "Vorig nummer", "queue": "Wachtrij", "remove": "Verwijderen", @@ -178,10 +183,15 @@ }, "message": { "automaticPlay": "Het volgende nummer zal automatisch worden afgespeeld over een paar seconden…", - "radio": "Nieuwe nummers worden hier automatisch toegevoegd." + "radio": "Nieuwe nummers worden hier automatisch toegevoegd.", + "webglUnsupported": "Uw browser ondersteunt WebGL2 niet." }, "meta": { - "queuePosition": "Nummer { index } van { length }" + "end": "Einde", + "queuePosition": "Nummer { index } van { length }", + "startTime": "00:00", + "unknownAlbum": "Onbekend Album", + "unknownArtist": "Onbekende artiest" }, "warning": { "connectivity": "Je hebt wellicht een connectiviteitsprobleem." @@ -206,6 +216,7 @@ "label": { "fediverse": { "fieldLabel": "Fediverse object", + "fieldPlaceholder": "{'@'}gebruiker{'@'}voorbeeld.com", "title": "Abonneren op een podcast beheerd op de Fediverse" }, "rss": { @@ -218,28 +229,6 @@ "unsupported": "Dit soort object wordt nog niet ondersteund" } }, - "SetInstanceModal": { - "button": { - "cancel": "Annuleren", - "submit": "Indienen" - }, - "header": { - "chooseInstance": "Kies je server", - "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", - "suggestions": "Aanbevelingen" - }, - "help": { - "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", - "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", - "serverDown": "De server is mogelijk niet beschikbaar" - }, - "label": { - "url": "Server-URL" - }, - "message": { - "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" - } - }, "ShortcutsModal": { "button": { "close": "Sluiten" @@ -290,6 +279,7 @@ "language": "Taal", "main": "Hoofdmenu", "play": "Speel dit nummer", + "reports": "In afwachting van beoordelingsrapporten", "theme": "Thema" }, "link": { @@ -309,6 +299,7 @@ "radios": "Radio's", "search": "Zoeken", "settings": "Instellingen", + "switchInstance": "Verander van server", "users": "Gebruikers" } }, @@ -504,7 +495,17 @@ "unmute": "Ontdempen" }, "meta": { - "position": "{ index } van { length }" + "position": "{ index } van { length }", + "unknownAlbum": "Onbekend album", + "unknownArtist": "Onbekende artiest" + } + }, + "PlayerControls": { + "labels": { + "next": "Volgend nummer", + "pause": "Pauze", + "play": "Afspelen", + "previous": "Vorig nummer" } }, "Search": { @@ -655,6 +656,7 @@ }, "header": { "appDetails": "Applicatie-details", + "appSecretWarning": "Bewaar een kopie van deze token op een veilige plek.", "editApp": "Bewerk applicatie" }, "help": { @@ -668,6 +670,9 @@ "link": { "settings": "Terug naar instellingen" }, + "message": { + "appSecretWarning": "Het is niet mogelijk om het opnieuw te zien nadat je dit scherm hebt gesloten." + }, "title": "Bewerk applicatie" }, "ApplicationForm": { @@ -686,6 +691,7 @@ "redirectUri": "Redirect URI", "scopes": { "description": "Het aanvinken van de bovenliggende \"Lees\"- of \"Schrijf\"-scopes impliceert toegang tot alle corresponderende kindscopes.", + "label": "Reikwijdte", "read": { "description": "Alleen-lezen toegang tot gebruikersgegevens", "label": "Lezen" @@ -745,6 +751,9 @@ "createAccount": "Creëer een account", "resetPassword": "Wachtwoord opnieuw instellen" }, + "message": { + "redirect": "Je wordt geleid naar {domain} om je te authenticeren" + }, "placeholder": { "username": "Voer je gebruikersnaam of e-mailadres in" } @@ -916,6 +925,7 @@ }, "label": { "email": "E-mailadres", + "invitation": "Uitnodigingscode", "password": "Wachtwoord", "username": "Gebruikersnaam" }, @@ -1238,6 +1248,11 @@ "failure": "Fout tijdens bijwerken van de beschrijving" } }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, "UserMenu": { "label": { "language": "Taal", @@ -1274,6 +1289,7 @@ "link": { "about": "Over", "chat": "Chatruimte", + "docs": "Documentatie", "forum": "Forum", "git": "Issuetracker", "login": "Inloggen", @@ -1393,7 +1409,8 @@ "meta": { "episodes": "{ n } aflevering | { n } afleveringen", "tracks": "{ n } nummer | { n } nummers" - } + }, + "title": "Album" }, "AlbumDetail": { "description": { @@ -1642,6 +1659,9 @@ "import": "Resultaten van je import:", "previousImport": "Resultaten van je vorige import:" }, + "empty": { + "noFiles": "0" + }, "header": { "failure": "Fout bij het importeren", "local": "Upload muziek van je local storage", @@ -1659,6 +1679,7 @@ "uploading": "Bezig met uploaden" }, "message": { + "listener": "De pagina vraagt je om te bevestigen dat je weg wilt gaan - data die je hebt ingevoerd wordt misschien niet behouden.", "local": { "copyright": "Je uploadt geen content waarop copyright berust. Anders overtreed je misschien de wet", "format": "De muziekbestanden die je uploadt, hebben het OGG, Flac, MP3 of AIFF formaat", @@ -1674,6 +1695,7 @@ "size": "Grootte", "status": "Status" }, + "progress": "{percent}%", "status": { "pending": "In behandeling", "uploaded": "Geüpload", @@ -1790,7 +1812,8 @@ "Radios": { "button": { "add": "Maak een radiostation", - "create": "Maak je eigen radiostation" + "create": "Maak je eigen radiostation", + "search": "Zoek" }, "empty": { "noResults": "Geen resultaten gevonden voor je zoekopdracht" @@ -1863,6 +1886,10 @@ "header": "Embed dit nummer op je website" } }, + "subtitle": { + "with-uploader": "Opgeladen door {0} op {1}", + "without-uploader": "Opgeladen op {0}" + }, "title": "Nummer" }, "TrackDetail": { @@ -1892,7 +1919,8 @@ }, "track": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{bitrate}/s" }, "codec": "Codec", "downloads": "Downloads", @@ -1954,6 +1982,7 @@ "Filter": { "cancelButton": "Annuleren", "excludeLabel": "Uitsluiten", + "matchingTracks": "0 nummers komen overeen met de filter | {n} nummer komt overeen met de filter | {n} nummers komen overeen met de filter", "matchingTracksModalHeader": "Nummers volgens filter", "removeButton": "Verwijderen" } @@ -2087,6 +2116,7 @@ }, "EditsCardList": { "label": { + "search": "Zoeken", "status": "Status" }, "option": { @@ -2432,7 +2462,7 @@ } }, "tooltip": { - "blockAll": "Alles van dit account of deze domeinnaam blokkeren. Dit voorkomt elke interactie en verwijdert alle gerelateerde gegevens (uploads, bibliotheken, gevolgde accounts, enz.)", + "blockAll": "Alles van dit account of deze domeinnaam blokkeren. Dit voorkomt elke interactie en verwijdert alle gerelateerde media (uploads, bibliotheken, gevolgde accounts, enz.)", "isActive": "Gebruik deze instelling om tijdelijk het beleid in en uit te schakelen zonder het helemaal te verwijderen.", "rejectMedia": "Geen mediabestanden (audio, albumhoes, profielfoto…) downloaden van dit account of domein. Hiermee wordt ook bestaande content verwijderd.", "silenceActivity": "Verberg account- of domeininhoud, behalve voor volgers.", @@ -2559,6 +2589,7 @@ "internalNotes": "Interne notities", "pending": "In behandeling", "refused": "Geweigerd", + "resolutionDate": "Beslissingsdatum", "status": "Status" } } @@ -2620,12 +2651,16 @@ "creationDate": "Toegevoegd", "expirationDate": "Vervaldatum", "owner": "Eigenaar", - "status": "Status" + "status": "Status", + "user": "Gebruiker" } } } }, "UsersTable": { + "label": { + "search": "Zoeken" + }, "notApplicable": "N.B.", "ordering": { "direction": { @@ -2716,6 +2751,9 @@ "message": "Gebruik dit veld om extra context te geven aan de moderator die dit rapport zal behandelen.", "modal": "Gebruik dit formulier om een rapport in te dienen voor ons moderatieteam." }, + "error": { + "nodeinfoFetch": "Kan Node Informatie niet ophalen: {error}" + }, "header": { "disabled": "Anonieme meldingen zijn uitgeschakeld, gelieve je aan te melden om een melding in te dienen.", "modal": "Wil je dit object melden?", @@ -2742,7 +2780,8 @@ "message": { "libraryAcceptFollow": "{ username } heeft je volgverzoek voor de verzameling \"{ library }\" geaccepteerd", "libraryFollow": "{ username } volgt nu je verzameling \"{ library }\"", - "libraryPendingFollow": "{ username } wil je verzameling \"{ library }\" volgen" + "libraryPendingFollow": "{ username } wil je verzameling \"{ library }\" volgen", + "libraryReject": "Je hebt {username}'s verzoek om \"{library}\" te volgen afgewezen" } } }, @@ -2821,7 +2860,8 @@ "addToPlaylist": "Toevoegen aan afspeellijst", "available": "Beschikbare afspeellijsten", "manage": "Afspeellijsten beheren", - "noResults": "Geen resultaten bij je filter" + "noResults": "Geen resultaten bij je filter", + "track": "{title}, door {artist}" }, "label": { "filter": "Filter" @@ -2860,8 +2900,14 @@ }, "radios": { "Button": { + "startArtistsRadio": "Start artist-radio", + "startPlaylistsRadio": "Start afspeellijst-radio", "startRadio": "Radio afspelen", - "stopRadio": "Radio stoppen" + "startTagsRadio": "Start label-radio", + "stopArtistsRadio": "Stop artist-radio", + "stopPlaylistsRadio": "Stop afspeellijst-radio", + "stopRadio": "Radio stoppen", + "stopTagsRadio": "stop label-radio" }, "Card": { "button": { @@ -2955,9 +3001,10 @@ } }, "filters": { - "accessedDate": "Benaderd op", - "albumTitle": "Albumnaam", - "artistName": "Artiestnaam", + "accessedDate": "Datum van raadplegen", + "albumTitle": "Naam van album", + "appliedDate": "Datum van toepassen", + "artistName": "Naam van artiest", "bitrate": "Bitrate", "creationDate": "Toegevoegd", "dateJoined": "Geregistreerd op", @@ -2966,6 +3013,7 @@ "expirationDate": "Vervaldatum", "firstSeen": "Eerst gezien-datum", "followers": "Volgers", + "handledDate": "Datum van aanpakken", "itemsCount": "Items", "lastActivity": "Laatste activiteit", "lastSeen": "Datum laatst gezien", @@ -2985,6 +3033,7 @@ "label": "Wijzigingen" }, "favorites": { + "description": "Toegang tot favorieten", "label": "Favorieten" }, "filters": { @@ -3057,6 +3106,7 @@ }, "useReport": { "account": { + "label": "Rapporteer {'@'}{username}", "typeLabel": "Account" }, "album": { @@ -3065,7 +3115,8 @@ }, "artist": { "label": "Deze artiest rapporteren…", - "typeLabel": "Artiest" + "typeLabel": "Artiest", + "unknownLabel": "Onbekende artiest" }, "channel": { "label": "Dit kanaal rapporteren…", @@ -3131,7 +3182,14 @@ } } }, + "useErrorHandler": { + "errorReportMessage": "Om ons te helpen begrijpen wat er is gebeurd, voeg a.u.b. een gedetailleerde beschijving toe van wat je gedaan hebt dat de fout heeft veroorzaakt.", + "errorReportTitle": "Een onverwachte fout heeft zich voorgedaan.", + "leaveFeedback": "Laat feedback achter", + "unexpectedError": "Een onverwachte fout heeft zich voorgedaan." + }, "useThemeList": { + "browserDefault": "Browser standaard", "darkTheme": "Donker", "lightTheme": "Licht" } @@ -3141,6 +3199,13 @@ "rateLimitDelay": "Je hebt te veel verzoeken ingediend en wordt tijdelijk tegengehouden. Probeer het nog eens over { delay }", "rateLimitLater": "Je hebt te veel verzoeken ingediend en wordt tijdelijk tegengehouden. Probeer het later nog eens" }, + "sentry": { + "allow": "Toelaten", + "deny": "Afwijzen", + "funkwhaleInstance": "Officiële Glitchtip server van Funkwhale", + "message": "De stacksporen zullen gedeeld worden naar { 0 } om ons te helpen begrijpen waarom en hoe deze fout is gebeurd.", + "title": "Om de kwaliteit van onze diensten te verbeteren, zouden we informatie willen verzamelen van de crashes die gebeuren tijdens jouw sessie." + }, "serviceWorker": { "actions": { "later": "Later", @@ -3150,6 +3215,28 @@ } }, "views": { + "ChooseInstance": { + "button": { + "submit": "Indienen" + }, + "header": { + "chooseInstance": "Kies je server", + "failure": "Het is niet mogelijk om verbinding te maken met de opgegeven URL", + "suggestions": "Aanbevelingen" + }, + "help": { + "notFunkwhaleServer": "Het opgegeven adres is geen Funkwhale-server", + "selectPod": "Selecteer met welke Funkwhale-server je wil verbinden. Voer zelf de URL in, of kies een van de suggesties.", + "serverDown": "De server is mogelijk niet beschikbaar" + }, + "label": { + "url": "Server-URL" + }, + "message": { + "currentConnection": "U bent nu verbonden met { 0 }. Als je doorgaat wordt je verbinding verbroken met je huidige instance en je lokale data zal worden verwijderd.", + "newUrl": "Je gebruikt nu de Funkwhale-server op { url }" + } + }, "Notifications": { "button": { "read": "Alles markeren als gelezen", @@ -3601,7 +3688,8 @@ }, "audioContent": { "bitrate": { - "label": "Bitrate" + "label": "Bitrate", + "value": "{bitrate}/s" }, "cachedSize": "Gecachete grootte", "duration": "Duur", @@ -3753,7 +3841,8 @@ "value": "Fout bij het ophalen van serverinformatie" }, "software": { - "label": "Software" + "label": "Software", + "value": "{name} ({version})" }, "totalUsers": "Totaal aantal gebruikers" } @@ -4241,6 +4330,7 @@ "currentUsage": "{ current } in gebruik; maximaal { max } toegestaan", "errored": "Mislukte bestanden", "pending": "In behandeling zijnde bestanden", + "percentUsed": "{progress}%", "skipped": "Overgeslagen bestanden" }, "link": { @@ -4279,6 +4369,10 @@ "pending": "Openstaande volgverzoeken", "unfollow": "Ontvolgen" }, + "error": { + "follow": "Kan externe bibliotheek niet volgen: {error}", + "unfollow": "Kan externe bibliotheek niet ontvolgen: {error}" + }, "label": { "scanFailure": "Probleem tijdens scannen", "scanPartialSuccess": "Afgerond, maar met foutmeldingen", @@ -4496,12 +4590,14 @@ "Detail": { "button": { "confirm": "Radiostation verwijderen", + "delete": "Verwijderen", "edit": "Bewerken…" }, "empty": { "noTracks": "Er zijn nog geen nummers aan deze radio toegevoegd" }, "header": { + "radio": "Radio bevat {tracks} nummers, door ", "tracks": "Nummers" }, "modal": { diff --git a/front/src/locales/oc.json b/front/src/locales/oc.json index e90f3d311..f73d8640f 100644 --- a/front/src/locales/oc.json +++ b/front/src/locales/oc.json @@ -1,1435 +1,63 @@ { + "App": { + "loading": "Cargament…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "{ app } vòl accedir a vòstre compte Funkwhale", - "authorize": "Autorizar una tèrça aplicacion", - "authorizeFailure": "Error en autorizar l’aplicacion", - "fetchFailure": "Error en recuperar las donadas de l’aplicacion", - "allScopes": "Accès complèt", - "readOnly": "Lectura sola", - "writeOnly": "Escritura sola" - }, - "title": "Autorizar l’aplicacion", - "button": { - "authorize": "Autorizar { app }" - }, - "help": { - "pasteCode": "Copiatz-pegatz lo còdi seguent dins l’aplicacion :", - "redirect": "Seretz mandat a { 0 }", - "copyCode": "Vos mostrarem un còdi de copiar-pegar dins l’aplicacion." - }, - "message": { - "unknownPermissions": "L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Accès desactivat", - "passwordUpdated": "Senhal actualizat", - "unavailable": "L’API Subsonic es pas disponibla per aquesta instància Funkwhale." - }, - "button": { - "confirmDisable": "Desactivar l’accès", - "disable": "Desactivar l’accès via Subsonic", - "newPassword": "Demandar un nòu senhal", - "confirmNewPassword": "Demandar un senhal" - }, - "modal": { - "disableSubsonic": { - "header": "Desactivar l’accès a l’API Subsonic ?", - "content": { - "warning": "Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte estant." - } - }, - "newPassword": { - "header": "Demandar un nòu senhal per l’API Subsonic ?", - "content": { - "warning": "Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." - } - } - }, - "link": { - "apps": "Aprenètz a utilizar Funkwhale amb d’autras aplicacions" - }, - "header": { - "error": "Error", - "subsonic": "Senhal de l’API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API Subsonic.", - "paragraph3": "Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent que podètz configurar çai-jos.", - "paragraph2": "Podètz los utilizar per profeitar de vòstras listas de lectura e de vòstra musica en mòde fòra linha sus vòstre mobil, tableta, per exemple." - } - }, - "label": { - "subsonicField": "Senhal de l’API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Geton d’accès", - "appId": "ID de l’aplicacion", - "appSecret": "Secret de l’aplicacion" - }, - "header": { - "appDetails": "Detalhs de l’aplicacion", - "editApp": "Modificar l’aplicacion" - }, - "help": { - "appDetails": "L’ID e lo secrèt de l’aplicacion son de donadas vertadièrament sensiblas e devon èsser consideradas coma de senhals. Partegetz-las pas amb degun." - }, - "link": { - "settings": "Tornar als paramètres" - }, - "title": "Modificar l’aplicacion", - "button": { - "regenerateToken": "Tornar generar lo geton" - } - }, - "Settings": { - "title": "Paramètres del compte", - "header": { - "accountSettings": "Paramètres del compte", - "authorizedApps": "Aplicacions autorizadas", - "avatar": "Avatar", - "changeEmail": "Cambiar mon adreça electronica", - "changePassword": "Cambiar lo senhal", - "contentFilters": "Filtres de contengut", - "deleteAccount": "Suprimir mon compte", - "hiddenArtists": "Artistas amagats", - "plugins": "Moduls", - "settingsUpdated": "Paramètres actualizats", - "emailFailure": "Podèm pas cambiar vòstra d’adreça mail", - "accountFailure": "Podèm pas suprimir vòstre compte", - "noApps": "Avètz pas cap d‘aplicacion connectada a aqueste compte.", - "noPersonalApps": "Avètz pas cap d‘aplicacion creada pel moment.", - "yourApps": "Vòstras aplicacions", - "avatarFailure": "L’avatar pòt pas èsser enregistrat", - "passwordFailure": "Lo senhal pòt pas èsser cambiat", - "updateFailure": "Impossible d’actualizar vòstres paramètres" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplicacion", - "permissions": "Autorizacions" - } - }, - "yourApps": { - "header": { - "application": "Aplicacion", - "creationDate": "Data de creacion", - "scopes": "Visibilitats" - } - }, - "artists": { - "header": { - "creationDate": "Data de creacion", - "name": "Nom" - } - } - }, - "label": { - "avatar": "Avatar", - "currentPassword": "Senhal actual", - "newEmail": "Adreça electronica novèla", - "newPassword": "Nòu senhal", - "password": "Senhal" - }, - "button": { - "password": "Cambiar lo senhal", - "delete": "Suprimir", - "deleteAccountConfirm": "Suprimir mon compte", - "deleteAccount": "Suprimir mon compte…", - "disableSubsonic": "Desactivar l’accès", - "edit": "Modificar", - "refresh": "Actualizar", - "remove": "Tirar", - "removeApp": "Suprimir l’aplicacion", - "revoke": "Revocar", - "revokeAccess": "Revocar l’accès", - "update": "Actualizar", - "updateSettings": "Actualizar los paramètres" - }, - "description": { - "changeEmail": "Cambiar l’adreça email ligada a vòstre compte. Mandarem una confirmacion a l’adreça novèla.", - "changePassword": { - "paragraph1": "L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se n’avètz un.", - "paragraph2": "Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste senhal." - }, - "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas veire sus aqueste servici.", - "authorizedApps": "Aquò es la lista de las aplicacions qu’an accès a las donadas de vòstre compte.", - "yourApps": "Aquò es la lista de las aplicacions qu’avètz creadas.", - "plugins": "Utilizatz d’extension per agrandir las possibilitat de Funkwhale e obténer mai de foncionalitats.", - "deleteAccount": "Podètz suprimir vòstre compte e totas las donadas d’un biais permanent e irreversible en utilizar lo formulari çai-jos. Vos demandarem una confirmacion." - }, - "modal": { - "changePassword": { - "header": "Cambiar lo senhal ?", - "content": { - "warning": "Lo cambiament de senhal a las consequéncias seguentas :", - "logout": "Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb lo nòu senhal", - "subsonic": "Vòstre senhal Subsonic serà remplaçat per un nòu aleatòri, aquò vos desconnectarà de totes los periferics qu’utilizan l’ancian senhal" - } - }, - "deleteAccount": { - "header": "Volètz suprimir vòstre compte ?", - "content": { - "warning": "Aquò es irreversible e suprimirà d’un biais permanent vòstras donadas de nòstres servidors. Seretz immediatament desconnectat." - } - }, - "deleteApp": { - "header": "Suprimir l’aplicacion « { application } » ?", - "content": { - "warning": "Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." - } - }, - "revokeApp": { - "header": "Revocar l’accès a l’aplicacion « { application } » ?", - "content": { - "warning": "Aquò empacha aquesta aplicacion d’accedir al servici en vòstre nom." - } - } - }, - "help": { - "noApps": "S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, seràn listadas aquí.", - "changePassword": "Mercés de verificar que lo senhal es corrèct", - "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tèrças aplicacions." - }, - "link": { - "managePlugins": "Gerir los moduls", - "newApp": "Crear una nòva aplicacion" - }, - "warning": { - "deleteAccount": "Vòstre compte serà suprimit de nòstres servidors d’aquí unas minutas. Avisarem tanben los autres servidors que pòdon aver una còpia de certanas donda per que realizen la supression. Remarcatz qu’unes d’aqueles pòdon èsser fòra linha o voler pas o far." - }, - "message": { - "currentEmail": "Vòstra adreça electronica actuala es { email }.", - "confirmDelete": "Vòstra demanda de supression es estada enviada, vòstre compte e lo contengut seràn lèu suprimits" - } - }, - "Logout": { - "header": { - "confirm": "Volètz vertadièrament vos desconnectar ?", - "unauthenticated": "Sètz pas connectat actualament" - }, - "link": { - "login": "Connectatz-vos !" - }, - "title": "Desconnexion", - "button": { - "logout": "Òc-ben, desconnectatz-me !" - }, - "message": { - "loggedIn": "Sètz connectat coma { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Tornar als paramètres" - }, - "title": "Crear una nòva aplicacion" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a totes los jos elements correspondents.", - "read": { - "label": "Lectura", - "description": "Accès lectura sola de las donadas utilizaire" - }, - "write": { - "label": "Escritura", - "description": "Accès escritura sola de las donadas utilizaire" - } - }, - "name": "Nom", - "redirectUri": "URI de redireccion" - }, - "button": { - "create": "Crear una aplicacion", - "update": "Actualizar l’aplicacion" - }, - "help": { - "redirectUri": "Utilizatz « urn:ietf:wg:oauth:2.0:oob » coma URI de redireccion se vòstra aplicacion es pas disponibla en linha." - }, - "header": { - "failure": "Podèm pas enregistrar vòstras modificacions" - } - }, - "LoginForm": { - "link": { - "createAccount": "Crear un compte", - "resetPassword": "Reïnicializar lo senhal" - }, - "placeholder": { - "username": "Escrivètz vòstre nom d’utilizaire o corrièl" - }, - "help": { - "approvalRequired": "Se vos sètz marcat fa pas gaire, benlèu que vos cal esperar que nòstra còla de moderacion repasse vòstre compte, o verifique vòstra adreça electronica.", - "invalidCredentials": "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrèctes e asseguratz-vos d’aver verificat vòstre corrièl." - }, - "button": { - "login": "Connexion" - }, - "label": { - "password": "Senhal", - "username": "Nom d’utilizaire o corrièl" - }, - "header": { - "loginFailure": "Error pendent la connexion" - } - }, - "SignupForm": { - "button": { - "create": "Crear mon compte" - }, - "label": { - "email": "Adreça electronica", - "password": "Senhal", - "username": "Nom d’utilizaire" - }, - "placeholder": { - "email": "Picatz vòstra adreça electronica", - "invitation": "Escrivètz vòstre còdi d’invitacion (pas sensible a la cassa)", - "username": "Escrivètz vòstre nom d’utilizaire" - }, - "header": { - "login": "Connectatz-vos a vòstre compte Funkwhale", - "signupFailure": "Lo compte pòt pas èsser creat." - }, - "message": { - "registrationClosed": "Las inscripcions son tampadas sus aquesta instància. Auretz de téner un còdi d’invitacion per vos marcar.", - "requiresReview": "Las inscripcions sus aquesta instància son dobèrtas, mas l’equipa de moderacion repassa las demanda.", - "awaitingReview": "Vòstra demanda de compte es estada corrèctament enviada. Vos notificarem per corrièl un còp que nòstra equipa de moderacion aja repassat la demanda.", - "accountCreated": "Lo compte es estat corrèctament creat. Volgatz verificar vòstra bóstia de recepcion abans d’ensajar de vos connectar." - } - }, - "Plugin": { - "link": { - "documentation": "Documentacion" - }, - "label": { - "pluginEnabled": "Activada", - "library": "Bibliotèca" - }, - "header": { - "failure": "Error en enregistrant lo modul" - }, - "description": { - "library": "Bibliotèca ont los fichièrs devon èsser importats." - }, - "button": { - "save": "Enregistrar", - "scan": "Explorar" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "ora de musica | oras de musica" + "description": { + "findApp": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion.", + "funkwhale": "Funkwhale es un projècte menat per una comunitat que vos permet d’escotar e partejar de musicas e de fichièrs àudio dins d’un malhum descentralizat e dubèrt.", + "publicContent": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", + "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci liure per enviar lor pròpri contengut !", + "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !" }, "header": { - "funkwhale": "Una platafòrma sociala per profeitar e partejar de musica", "aboutPod": "A prepaus d’aqueste pod", - "publicContent": "Percórrer lo contengut public", "findApp": "Trobar una aplicacion", + "funkwhale": "Una platafòrma sociala per profeitar e partejar de musica", + "publicContent": "Percórrer lo contengut public", "signup": "Inscripcion" }, - "title": "A prepaus", "link": { "findOtherPod": "Trobar un autre pod", "learnMore": "Ne saber mai" }, - "description": { - "funkwhale": "Funkwhale es un projècte menat per una comunitat que vos permet d’escotar e partejar de musicas e de fichièrs àudio dins d’un malhum descentralizat e dubèrt.", - "publicContent": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", - "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !", - "findApp": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion.", - "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci liure per enviar lor pròpri contengut !" - }, - "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - }, "message": { + "greeting": "Adiu {username}", "loggedIn": "Sètz ja connectat !" - } - }, - "Home": { - "stat": { - "activeUsers": "{ n } utilizaire actiu | { n } utilizaires actius", - "hoursOfMusic": "{ n } ora de musica | { n } oras de musica" }, - "header": { - "aboutFunkwhale": "A prepaus de Funkwhale", - "about": "A prepaus d’aqueste pod Funkwhale", - "contact": "Contacte", - "login": "Connexion", - "newChannels": "Nòvas cadenas", - "newAlbums": "Albums ajustats i a res", - "signup": "Inscripcion", - "statistics": "Estatisticas", - "links": "Ligams utils", - "welcome": "La benvengut a { podName } !" - }, - "link": { - "publicContent": { - "label": "Percórrer lo contengut public", - "description": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod" - }, - "userGuides": { - "description": "Descobrissètz tot çò que devètz saber de Funkwhale e de sas foncionalitats", - "label": "Guida de l’utilizaire" - }, - "findOtherPod": "Trobar un autre pod", - "learnMore": "Ne saber mai", - "mobileApps": { - "label": "Aplicacions mobil", - "description": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion" - }, - "rules": "Règlas del servidor", - "viewMore": "Ne veire mai…", - "funkwhale": "Visitar funkwhale.audio" - }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics.", - "paragraph1": "Aqueste pod executa Funkwhale, un projècte menat per una comunitat que vos permet d’escotar e partejar de musica e d’àudio dins un malhum descentralizat e liure." - }, - "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !", - "quota": "Los utilizaires d’aqueste pod an tanben { quota } d’espaci per enviar lor pròpri contengut !" - }, - "title": "Acuèlh", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla." - } - }, - "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } + "noDescription": "Cap de descripcion pas disponibla" }, - "ChannelCard": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - }, - "title": "Actualizat lo { date }" + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } - }, - "Widget": { - "button": { - "more": "Ne veire mai" - } - } - }, - "Player": { - "meta": { - "position": "({ index } sus { length })" - }, - "header": { - "player": "Lector àudio e contraròtle" - }, - "label": { - "clearQueue": "Voidar la fila", - "expandQueue": "Desplegar la fila", - "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", - "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", - "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", - "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", - "audioPlayer": "Lector mèdia", - "mute": "Copar lo son", - "nextTrack": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previousTrack": "Pista precedenta", - "shuffleQueue": "Mesclar la fila", - "unmute": "Restablir lo son" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Ajustar a la lista actuala", - "addToPlaylist": "Ajustar a la lista de lectura…", - "episodeDetails": "Detalhs de l’episòdi", - "hideArtist": "Amagar lo contengut d’aqueste artista", - "discretePlay": "Legir", - "playAlbum": "Legir l’album", - "playArtist": "Legir çò de l’artista", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "playPlaylist": "Legir la lista de lectura", - "startRadio": "Legir de cançons similaras", - "playTrack": "Legir la pista", - "playTracks": "Legir las pistas", - "report": "Senhalar…", - "trackDetails": "Detalhs de la pista" - }, - "title": { - "more": "Mai…", - "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lectura…", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de l’episòdi", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire l’album", - "artistDetails": "Veire l’artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Ajustar als favorits", - "addToPlaylist": "Ajustar a la lista de lectura…", - "addToQueue": "Ajustar a la lista", - "episodeDetails": "Detalhs de l’episòdi", - "playNext": "Legir en seguida", - "playNow": "Legir ara", - "startRadio": "Legir la pista", - "removeFromFavorites": "Tirar dels favorits", - "trackDetails": "Detalhs de la pista", - "albumDetails": "Veire l’album", - "artistDetails": "Veire l’artista", - "channelDetails": "Veire la cadena", - "seriesDetails": "Veire las serias" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Artista", - "title": "Títol" - } - } - }, - "Widget": { - "empty": { - "noResults": "Cap de resultat pas trobat" - }, - "button": { - "more": "Ne veire mai" - } - }, - "MobileRow": { - "button": { - "actions": "Mostrar las accions de la pista" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Ajustar lo volum" - }, - "button": { - "mute": "Copar lo son", - "unmute": "Restablir lo son" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Artista", - "category": { - "federation": "Federacion", - "podcasts": "Podcast" - }, - "search": "Recercar de contengut", - "tag": "Etiqueta", - "track": "Pista" - }, - "link": { - "more": "Mai de resultats 🡒", - "fediverse": "Recercar sul fediverse", - "rss": "S’abonar a un podcast via RSS" - }, - "header": { - "noResults": "Cap de correspondéncia pas trobada" - }, - "placeholder": { - "search": "Recercar d’artistas, d’albums, de pistas…" - }, - "empty": { - "noResults": "Pas cap de resultats per aquesta recèrca" - } - }, - "Search": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "search": "Recercar de musica" - }, - "placeholder": { - "search": "Artista, album, pista…" - }, - "empty": { - "noAlbums": "Cap d’album correspond pas a vòstra recèrca", - "noArtists": "Cap d’artista correspond pas a vòstra recèrca" - } - }, - "ChannelForm": { - "label": { - "discography": "Discografia de l’artista", - "category": "Categoria", - "image": "Imatge de la cadena", - "description": "Descripcion", - "username": "Identificant del Fedivers", - "language": "Lenga", - "name": "Nom", - "email": "Adreça electronica del proprietari", - "owner": "Nom del proprietari", - "podcast": "Podcast", - "subcategory": "Subcategoria", - "tags": "Etiquetas" - }, - "placeholder": { - "name": "Nom crane de la cadena", - "username": "nomcranedelacadena" - }, - "header": { - "error": "Error en enregistrar la cadena" - }, - "help": { - "podcast": "Albergatz vòstres episòdis e mantenètz vòstre comunitat al fial.", - "discography": "Publicatz la musica que fasètz coma una bona discografia d’albums e singles.", - "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per d’unas platafòrmas coma Spotify o iTunes.", - "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podètz pas cambiar mai tard." - }, - "loader": { - "loading": "Cargament" - }, - "legend": { - "purpose": "A qué servirà aquesta cadena ?" - } - }, - "LibraryFollowButton": { - "button": { - "cancel": "Anullar la demanda d’abonament", - "follow": "Seguir", - "unfollow": "Quitar de seguir" - } - }, - "EmbedWizard": { - "button": { - "copy": "Copiar" - }, - "help": { - "embed": "Copiatz / Pegatz aqueste còdi al vòstre site HTML", - "width": "Daissar void per un widget adaptatiu", - "anonymous": "Mercés de contactar vòstres administrators e de lor demandar d’actualizar lo paramètres ligat." - }, - "label": { - "embed": "Còdi d’integracion", - "height": "Nautor del widget", - "width": "Largor del widget" - }, - "header": { - "preview": "Apercebut" - }, - "warning": { - "anonymous": "Lo partatge foncionarà pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." - }, - "message": { - "copy": "Tèxte copiat al quichapapièr !" - } - }, - "ChannelSeries": { - "button": { - "showMore": "Ne veire mai" - }, - "help": { - "subscribe": "Vos cal benlèu vos abonar a aquesta cadena per ne veire lo contengut." - } - }, - "ChannelsWidget": { - "button": { - "showMore": "Ne veire mai" - } - }, - "ChannelEntries": { - "help": { - "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." - } - } - }, - "library": { - "AlbumBase": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "addDescription": "Ajustar una descripcion…" - } - }, - "ArtistBase": { - "meta": { - "tracks": "{ n } pista dins | { n } pistas dins", - "albums": "{ n } albums | { n } albums" - }, - "title": "Artista", - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…", - "play": "Legir totes los albums" - }, - "modal": { - "embed": { - "header": "Integrar aquesta pista a vòstre site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus Wikipèdia", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } pista correspond als filtres seleccionats | { n } pistas correspondon als filtres seleccionats", - "builder": "Editor", - "created": "Nom de la ràdio", - "updated": "Ràdio actualizada" - }, - "table": { - "filter": { - "header": { - "actions": "Accions", - "candidates": "Pistas candidatas", - "config": "Configuracion", - "exclude": "Exclure", - "name": "Nom del filtre" - } - } - }, - "button": { - "filter": "Ajustar lo filtre", - "save": "Enregistrar" - }, - "label": { - "filter": "Ajustar de filtres per dire de personalizar vòstra ràdio", - "description": "Descripcion", - "public": "Mostrar publicament", - "name": "Nom de la ràdio" - }, - "placeholder": { - "description": "Ma descripcion tròp crana", - "name": "Ma ràdio tròp crana" - }, - "title": "Editor de ràdio", - "option": { - "filter": "Seleccionar un filtre" - }, - "description": { - "builder": "Podètz utilizar aquesta interfàcia per realizar vòstra pròpria ràdio personalizada, que jogarà las listas segon los critèris indicats." - } - }, - "Filter": { - "cancelButton": "Anullar", - "excludeLabel": "Exclure", - "removeButton": "Tirar", - "matchingTracksModalHeader": "Pistas correspondentas al filtre" - } - }, - "FileUpload": { - "tooltip": { - "network": "Una error de ret s’es producha en enviar aqueste fichièr", - "size": "Mandadís del fichièr impossible, asseguratz-vos qu’es pas tròp pesuc", - "extension": "Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr àudio. Las extensions compatiblas son { extensions }", - "retry": "Tornar ensajar", - "denied": "Mandadís refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz pas atenhut vòstre quòta", - "timeout": "Temps de transferiment expirat, ensajatz tornamai" - }, - "table": { - "upload": { - "header": { - "actions": "Accions", - "filename": "Nom del fichièr", - "size": "Talha", - "status": "Estatut" - }, - "status": { - "pending": "En espèra", - "uploaded": "Enviat", - "uploading": "Mandadís…" - } - } - }, - "button": { - "cancel": "Anullar", - "retry": "Tornar ensajar los mandadisses fracassats" - }, - "label": { - "uploadWidget": "Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris", - "remainingSpace": "Espaci liure", - "extensions": "Extensions compatiblas : { extensions }" - }, - "header": { - "failure": "Error en aviant l’import", - "server": "Estatut de l’import", - "status": "Estatut de l’import", - "local": "Importar de la musica de vòstre emmagazinatge local" - }, - "link": { - "processing": "Tractament", - "uploading": "Mandadís en cors", - "picard": "Vos recomandam d’utilizar lo logicial Picard per aquò far." - }, - "description": { - "import": "Resultats de vòstre l’import :", - "previousImport": "Resultats de vòstre import precedent :" - }, - "message": { - "local": { - "format": "Los fichièrs musicals que sètz a enviar son al format OGG, Flac, MP3 o AIFF", - "tag": "Los fichièrs musicals que sètz a enviar son etiquetats coma cal.", - "message": "Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, mercés de vos assegurar que :", - "copyright": "Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament enfranhètz la lei" - } - } - }, - "EditForm": { - "placeholder": { - "summary": "Una descripcion pichona per explicar vòstres cambiaments." - }, - "button": { - "cancel": "Anullar", - "clear": "Escafar", - "reset": "Tornar a la valor iniciala", - "showUnreviewed": "Restrénher a las modificacions pas repassadas", - "showAll": "Mostrar totas las modificacions", - "submit": "Enviar e aplicar la modificacion", - "new": "Enviar una modificacion de mai", - "suggest": "Enviar la suggestion" - }, - "header": { - "failure": "Error en enviar la modificacion", - "recentEdits": "Modificacions recentas", - "unreviewed": "Modificacions recentas en espèra de relectura", - "success": "La modificacion es estada corrèctament enviada." - }, - "notApplicable": "ND", - "empty": { - "suggestEdit": "Suggerir un cambiament en utilizar lo formulari çai-jos." - }, - "label": { - "summary": "Resumit (opcional)" - }, - "message": { - "noPermission": "Avètz pas l’autorizacion de modificar aqueste objècte, mas podètz suggerir de cambiaments. Un còp mandadas, las suggestions seràn repassadas abans validacion." - } - }, - "Albums": { - "link": { - "addMusic": "Ajustar musica" - }, - "title": "Albums", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los albums" - }, - "placeholder": { - "search": "Picatz lo títol de l’album…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar", - "tags": "Etiquetas" - }, - "button": { - "search": "Recercar" - } - }, - "Artists": { - "button": { - "upload": "Ajustar musica", - "search": "Recercar" - }, - "label": { - "search": "Nom de l’artista", - "excludeCompilation": "Exclure las compilacions d’artistas", - "tags": "Etiquetas" - }, - "title": "Artistas", - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los artistas" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercar…" - } - }, - "TrackDetail": { - "table": { - "release": { - "album": "Album", - "artist": "Artista", - "copyright": "Copyright", - "license": "Licéncia", - "series": "Seria", - "url": "URL", - "year": "An" - }, - "track": { - "bitrate": { - "label": "Debit" - }, - "codec": "Codec", - "downloads": "Telecargaments", - "duration": "Durada", - "size": "Talha" - } - }, - "header": { - "episode": "Detalhs de l’episòdi", - "library": "Bibliotècas associadas", - "playlists": "Listas de lectura associadas", - "release": "Detalhs de publicacion", - "track": "Detalhs de la pista" - }, - "notApplicable": "ND", - "description": { - "library": "Aquesta pista es presenta a las bibliotècas seguentas :" - }, - "link": { - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "header": { - "channels": "Cadenas", - "tracks": "Pistas" - } - }, - "ArtistDetail": { - "header": { - "album": "Albums d’aqueste artista", - "track": "Pistas novèlas d’aqueste artista", - "library": "Bibliotècas de l’utilizaire" - }, - "button": { - "more": "Ne cargar mai…", - "filter": "Levar lo filtre" - }, - "link": { - "filter": "Validar mos filtres" - }, - "description": { - "library": "Aqueste artista es present a las bibliotècas seguentas :" - }, - "message": { - "filter": "Amagatz lo contengut ligat a aqueste artista." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Una error s’es producha pendent lo processús de mandadís. Trobaretz mai d’informacion çai-jos.", - "unknownError": { - "message": "Una error desconeguda s’es producha", - "label": "Error desconeguda" - }, - "invalidMetadata": { - "label": "Metadonada invalida", - "message": "La metadonada inclusa al fichièr es invalida o de camps obligatòris son absents." - } - }, - "button": { - "close": "Tampar" - }, - "table": { - "error": { - "debug": "Informacions de debug", - "errorDetail": "Detalhs de l’error", - "errorType": "Tip d’error", - "help": "Obténer d’ajuda" - } - }, - "header": { - "importDetail": "Detalhs de l’import" - }, - "link": { - "support": "Dobrir un fil de discutida d’assisténcia (donatz las informacions de desbugatge dins vòstre messatge)", - "documentation": "Legissètz nòstra documentacion per aquesta error" - }, - "message": { - "importDetail": "Lo mandadís es encara en espèra e serà lèu tractat pel servidor.", - "importSuccess": "Lo mandadís es estat corrèctament tractat pel servidor." - }, - "warning": { - "importSkipped": "Lo mandadís es estat sautat perque un que li sembla es ja disponible dins una de vòstras bibliotèca." - } - }, - "EditCard": { - "button": { - "approve": "Validar", - "delete": "Suprimir", - "reject": "Regetar" - }, - "status": { - "approved": "Validat", - "applied": "Validada e aplicada", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta règla de moderacion ?" - }, - "content": { - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - }, - "table": { - "update": { - "header": { - "field": "Camp", - "newValue": "Nòva valor", - "oldValue": "Anciana valor" - }, - "notApplicable": "ND" - } - }, - "header": { - "modification": "Modificacion { id }" - }, - "link": { - "track": "Pista #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer los Podcasts" - }, - "button": { - "cancel": "Anullar", - "channel": "Crear una cadena", - "search": "Recercar", - "subscribe": "S’abonar", - "feed": "S’abonar al flux RSS" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "label": { - "search": "Títol del podcast", - "tags": "Etiquetas" - }, - "title": "Podcasts", - "pagination": { - "results": "Resultats per pagina" - }, - "placeholder": { - "search": "Recercar…" - }, - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "header": { - "browse": "Percórrer las ràdios", - "instance": "Ràdios de l’instància", - "user": "Ràdios dels utilizaires" - }, - "button": { - "add": "Crear una ràdio", - "create": "Crear vòstra pròpria ràdio" - }, - "placeholder": { - "search": "Escrivètz un nom de ràdio…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, - "title": "Ràdios", - "pagination": { - "results": "Resultats per pagina" - }, - "label": { - "search": "Recercar" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir…", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "Aqueste album serà tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aqueste album a un site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }", - "musicbrainz": "Veire sus MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir…", - "download": "Telecargar", - "edit": "Modificar", - "embed": "Integrar", - "more": "Mai…", - "play": "Legir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "Aquesta pista serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a un site web" - } - }, - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "discogs": "Recercar en Discogs", - "wikipedia": "Recercar sus Wikipèdia", - "django": "Veire sul panèl d’admin de Django", - "domain": "Veire sus { domain }" - }, - "title": "Pista" - }, - "AlbumEdit": { - "header": { - "edit": "Modificar aqueste album", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "ArtistEdit": { - "header": { - "edit": "Modificar aqueste artista", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "TrackEdit": { - "header": { - "edit": "Modificar aquesta pista", - "suggest": "Podèm pas cargar aquesta pisata" - }, - "message": { - "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." - } - }, - "AlbumDetail": { - "header": { - "episodes": "Episòdis", - "tracks": "Pistas", - "libraries": "Bibliotècas de l’utilizaire" - }, - "description": { - "libraries": "Aqueste album es present a las bibliotècas seguentas :" - }, - "meta": { - "volume": "Volum { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Importar" - } - }, - "FsLogs": { - "empty": { - "notStarted": "L’import a pas encara començat" - } - }, - "Home": { - "title": "Bibliotèca", - "header": { - "newChannels": "Nòvas cadenas", - "playlists": "Listas de lectura", - "recentlyAdded": "Ajustats i a res", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" - } - }, - "TagSelector": { - "placeholder": { - "search": "Recercar…" - } - } - }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } favorit | { n } favorits" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "link": { - "library": "Percórrer la bibliotèca" - }, - "loader": { - "loading": "Cargament dels favorits…" - }, - "empty": { - "noFavorites": "I a pas encara de pistas ajustadas a vòstres favorits" - }, - "pagination": { - "results": "Resultats per pagina" - }, - "title": "Vòstres favorits" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Ajustar als favorits", - "remove": "Tirar dels favorits" - }, - "label": { - "inFavorites": "Als favorits" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } fichièr | { n } fichièrs", - "quota": "Espaci liure restant :" - }, - "button": { - "cancel": "Anullar", - "close": "Tampar", - "finishLater": "Acabar mai tard", - "next": "Etapa seguenta", - "previous": "Etapa precedenta", - "publish": "Publicar", - "update": "Actualizar" - }, - "header": { - "uploadFiles": "Fichièrs d’enviar", - "processing": "Tractament dels mandadisses", - "publish": "Publicar àudio", - "uploadDetails": "Detalh de mandadís" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "label": { - "album": "Album", - "series": "Serias" - }, - "option": { - "none": "Cap" - } - }, - "LicenseSelect": { - "link": { - "license": "A prepaus d’aquesta licéncia" - }, - "label": { - "license": "Licéncia" - }, - "option": { - "none": "Cap" - } - }, - "UploadForm": { - "help": { - "license": "Ajustatz una licéncia a vòstre mandadís per assegurar las libertats de vòstre public." - }, - "label": { - "openBrowser": "Percórrer…", - "channel": "Cadena" - }, - "message": { - "dragAndDrop": "Lisatz depausatz los fichièrs aquí o dorbissètz lo navegador per enviar de fichièrs", - "pending": "Avètz de brolhon de mandadisses en espèra de publicacion." - }, - "button": { - "edit": "Modificar", - "ignore": "Ignorar", - "remove": "Tirar", - "resume": "Reprendre", - "retry": "Tornar ensajar" - }, - "header": { - "error": "Error en publicar" - }, - "status": { - "errored": "Perturbat", - "pending": "En espèra", - "uploading": "Mandadís en cors" - }, - "description": { - "extensions": "Extensions compatiblas : { extensions }" - }, - "warning": { - "quota": "Avètz pas mai d’espaci per enviar los fichièrs. Mercés de contactar los moderators." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anullar", - "create": "Crear" - }, - "header": { - "newAlbum": "Album novèl", - "newSeries": "Nòvas serias" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Descripcion", - "position": "Posicions", - "tags": "Etiquetas", - "title": "Títol", - "image": "Imatge de la pista" - } - }, - "AlbumForm": { - "header": { - "error": "Error en crear" - }, - "label": { - "albumTitle": "Títol" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "S’abonar", - "unsubscribe": "Quitar de seguir" - }, - "help": { - "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" - } - } + "title": "A prepaus" }, "AboutPod": { - "stat": { - "hoursOfMusic": "ora de musica | oras de musica", - "activeUsers": "utilizaire actiu | utilizaires actius", - "albumsCount": "album | albums", - "artistsCount": "artista | artistas", - "listeningsCount": "escota | escotas", - "tracksCount": "pista | pistas" + "feature": { + "allowList": "Lista d’autorizacions", + "anonymousAccess": "Accès anonim", + "federation": "Federacion", + "quota": "Quòta de mandadís", + "registrations": "Inscripcions", + "status": { + "closed": "Tampadas", + "disabled": "Desactivada", + "enabled": "Activada", + "open": "Dubèrtas" + }, + "version": "Version de Funkwhale" + }, + "header": { + "about": "A prepaus d’aqueste pod", + "contact": "Contacte", + "features": "Foncionalitats", + "rules": "Règlas", + "statistics": "Estatisticas", + "terms": "Tèrmes e politica de confidencialitat" }, - "title": "A prepaus", "link": { "about": "A prepaus d’aqueste pod", "features": "Foncionalitats", @@ -1438,360 +66,207 @@ "statistics": "Estatisticas", "terms": "Tèrmes e politica de confidencialitat" }, - "header": { - "about": "A prepaus d’aqueste pod", - "contact": "Contacte", - "features": "Foncionalitats", - "rules": "Règlas", - "statistics": "Estatisticas", - "terms": "Tèrmes e politica de confidencialitat" - }, - "feature": { - "allowList": "Lista d’autorizacions", - "anonymousAccess": "Accès anonim", - "status": { - "closed": "Tampadas", - "disabled": "Desactivada", - "enabled": "Activada", - "open": "Dubèrtas" - }, - "federation": "Federacion", - "version": "Version de Funkwhale", - "registrations": "Inscripcions", - "quota": "Quòta de mandadís" + "message": { + "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" }, "notApplicable": "ND", "placeholder": { - "noDescription": "Cap de descripcion pas disponibla.", - "noRules": "Cap de règla pas disponibla.", - "noTerms": "Cap de condicion pas disponibla." + "noDescription": "Cap de descripcion pas disponibla", + "noRules": "Cap de règla pas disponibla", + "noTerms": "Cap de condicion pas disponibla" + }, + "stat": { + "activeUsers": "{0} utilizaire actiu | {0} utilizaires actius", + "albumsCount": "Cap d’albums | {n} album | {n} albums", + "artistsCount": "0 artistas | {n} artista | {n} artistas", + "hoursOfMusic": "0 oras de musica | {n} ora de musica | {n} oras de musica", + "listeningsCount": "{n} escota | {n} escotas", + "tracksCount": "{n} pista | {0} pistas" + }, + "title": "A prepaus" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Aqueste pod executa Funkwhale, un projècte menat per una comunitat que vos permet d’escotar e partejar de musica e d’àudio dins un malhum descentralizat e liure.", + "paragraph2": "Funkwhale es gratuit e desvolopat per de una comunautat de volontaris simpatics." + }, + "quota": "Los utilizaires d’aqueste pod an tanben {quota} d’espaci per enviar lor pròpri contengut !", + "signup": "Marcatz-vos ara per garda una traça de vòstres favorits, crear de lista de lectura, descobrir de nòu contengut e encara mai !" + }, + "header": { + "about": "A prepaus d’aqueste pod Funkwhale", + "aboutFunkwhale": "A prepaus de Funkwhale", + "contact": "Contacte", + "links": "Ligams utils", + "login": "Connexion", + "newAlbums": "Albums ajustats i a res", + "newChannels": "Nòvas cadenas", + "signup": "Inscripcion", + "statistics": "Estatisticas", + "welcome": "La benvengut a {podName} !" + }, + "link": { + "findOtherPod": "Trobar un autre pod", + "funkwhale": "Visitar funkwhale.audio", + "learnMore": "Ne saber mai", + "mobileApps": { + "description": "Utilizar Funkwhale sus d’autres aparelhs amb nòstra aplicacion", + "label": "Aplicacions mobil" + }, + "publicContent": { + "description": "Escotar d’albums publics e de listas de lectura partejadas sus aqueste pod.", + "label": "Percórrer lo contengut public" + }, + "rules": "Règlas del servidor", + "userGuides": { + "description": "Descobrissètz tot çò que devètz saber de Funkwhale e de sas foncionalitats", + "label": "Guida de l’utilizaire" + }, + "viewMore": "Ne veire mai…" + }, + "placeholder": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "stat": { + "activeUsers": "{n} utilizaire actiu | {n} utilizaires actius", + "hoursOfMusic": "{n} ora de musica | {n} oras de musica" + }, + "title": "Acuèlh" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Pagina pas trobada !" + }, + "link": { + "home": "Tornar a l’acuèlh" }, "message": { - "contact": "Enviatz-nos un messatge : {'{{'} contactEmail {'}}'}" + "pageNotFound": "O planhèm, la pagina demandada existís pas :" + }, + "title": "Pagina pas trobada" + }, + "Queue": { + "button": { + "clear": "Escafar", + "close": "Tampar", + "stopRadio": "Arrestar la ràdio" + }, + "header": { + "failure": "La pista pòt pas èsser cargada", + "radio": "Escotatz una ràdio" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", + "duration": "Durada", + "favorite": "Marcar la pista", + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previous": "Pista precedenta", + "queue": "Fila", + "remove": "Tirar", + "restart": "Recomençar la pista", + "selectTrack": "Seleccionar pista" + }, + "message": { + "automaticPlay": "La pista seguenta serà legida automaticament dins una estona…", + "radio": "Las novèlas pistas seràn automaticament ajustadas aquí." + }, + "meta": { + "end": "Fin", + "queuePosition": "Pista ({index} de {length})", + "startTime": "00:00", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + }, + "warning": { + "connectivity": "Poiriá arribar qu’ajatz de problèma de connexion." } }, - "common": { - "ActionTable": { - "button": { - "selected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "allSelected": "{ n } sus { total } element seleccionat | { n } sus { total } elements seleccionats", - "go": "Zo", - "launch": "Aviar", - "refresh": "Actualizar lo contengut de la tabla", - "select": "Seleccionar", - "selectAll": "Seleccionar totes los elements", - "selectElement": "Seleccionar un element | Seleccionar l’ensemble dels { n } elements", - "selectCurrentPage": "Seleccionar solament la pagina actuala" + "RemoteSearchForm": { + "button": { + "fediverse": "Fedivers", + "rss": "RSS", + "search": "Recercar" + }, + "description": { + "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacòm sul fediverse.", + "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreça URL." + }, + "error": { + "fetchFailed": "Se pòt pas recuperar aqueste objècte" + }, + "header": { + "fetchFailed": "Error en recuperar l’objècte" + }, + "label": { + "fediverse": { + "fieldLabel": "Objècte del Fedivers", + "title": "S’abonar a un podcast albergat sul fediverse" }, - "message": { - "success": "L’action { action } es estada lançada corrèctament sus { n } element | L’action { action } es estada lançada corrèctament sus { n } elements", - "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn" - }, - "label": { - "actions": "Accions", - "performAction": "Executar las accions" - }, - "modal": { - "performAction": { - "header": "Volètz lançar l’accion « { action } » sus { n } element ? | Volètz lançar l’accion « { action } » sus { n } elements ?", - "content": { - "warning": "Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, mercés de verificar s’es ben çò que desiratz." - } - } - }, - "header": { - "error": "Error en tractar l’accion" + "rss": { + "fieldLabel": "Emplaçament del flux RSS", + "fieldPlaceholder": "https://siteweb.exemple/rss.xml", + "title": "S’abonar al flux RSS d’un podcast" } }, - "Duration": { - "meta": { - "hours": "{ hours } h { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "docs": "Documentacion", - "forum": "Forum", - "support": "Ajuda", - "git": "Traçador de problèmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "Paramètres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis clavièr", - "language": "Lenga", - "theme": "Tèma" - } - }, - "UserModal": { - "link": { - "about": "A prepaus", - "chat": "Sala de discutida", - "forum": "Forum", - "support": "Ajuda", - "git": "Traçador de problèmas", - "login": "Connexion", - "logout": "Desconnexion", - "notifications": "Notificacions", - "profile": "Perfil", - "settings": "Paramètres", - "signup": "Inscripcion" - }, - "label": { - "shortcuts": "Acorchis clavièr", - "language": "Lenga", - "theme": "Tèma" - }, - "header": { - "options": "Opcions" - }, - "button": { - "switchInstance": "Utilizar una autra instància" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anullar", - "confirm": "Confirmar" - }, - "header": { - "confirm": "Volètz confirmar aquesta accion ?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anullar", - "edit": "Modificar", - "less": "Ne veire mens", - "more": "Ne veire mai", - "update": "Actualizar la descripcion" - }, - "header": { - "failure": "Error en actualizar la descripcion" - }, - "empty": { - "noDescription": "Cap de descripcion pas disponibla" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Escafar" - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Plegar", - "expand": "Desplegar" - } - }, - "CopyInput": { - "button": { - "copy": "Copiar" - }, - "message": { - "success": "Tèxte copiat al quichapapièr !" - } - }, - "LoginModal": { - "link": { - "login": "Connexion", - "signup": "Inscripcion" - }, - "header": { - "unauthenticated": "Desconnectat" - }, - "description": { - "noAccess": "Avètz pas accès a aquò !" - } - }, - "ContentForm": { - "help": { - "markdown": "Podètz utilizar la sintaxi Markdown." - }, - "empty": { - "noContent": "I a pas res a previsualizar." - }, - "button": { - "preview": "Apercebut", - "write": "Escriure" - }, - "placeholder": { - "input": "Escrivètz quicòm aquí…" - } - }, - "EmptyState": { - "header": { - "noResults": "Cap de resultat pas trobat." - }, - "button": { - "refresh": "Actualizar" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG o JPG. Las dimensions devon èsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." - }, - "button": { - "remove": "Tirar" - }, - "label": { - "upload": "Enviar un nòu imatge…" - }, - "loader": { - "uploading": "Mandadís del fichièr…" - }, - "header": { - "failure": "Impossible de salvagardar vòstra pèça-junta" - } - }, - "ExpandableDiv": { - "button": { - "less": "Ne veire mens", - "more": "Ne veire mai" - } + "warning": { + "unsupported": "Aqueste tipe d’objècte es pas encara compatible" } }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - } + "ShortcutsModal": { + "button": { + "close": "Tampar" }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } es ja dins { 1 }." - }, - "button": { - "addDuplicate": "Ajustar pr’aquò", - "addToPlaylist": "Ajustar a aquesta lista de lectura", - "addTrack": "Ajustar una pista", - "cancel": "Anullar", - "edit": "Modificar" - }, - "header": { - "addToPlaylist": "Ajustar a la lista de lectura", - "available": "Listas de lectura disponiblas", - "manage": "Gerir las listas de lectura", - "noResults": "Cap de resultat correspondent a aqueste filtre", - "addFailure": "Podèm pas ajustar aquesta pista a una lista de lectura" - }, - "table": { - "edit": { - "header": { - "edit": "Modificar", - "lastModification": "Darrièra modificacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "placeholder": { - "filterPlaylist": "Escrivètz lo nom de lista de lectura" - }, - "label": { - "filter": "Filtrar" - }, - "empty": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } + "header": { + "modal": "Acorchis clavièr" }, - "Editor": { - "button": { - "addDuplicate": "Ajustar pr’aquò", - "clear": "Escafar la lista de lectura", - "copy": "Copiar las pistas de la fila a la lista de lectura", - "insertFromQueue": "Inserir de la fila estant ({ n } pista) | Inserir de la fila estant ({ n } pistas)" + "shortcut": { + "audio": { + "clearQueue": "Voidar la fila", + "decreaseVolume": "Reduire lo volum", + "expandQueue": "Espandir fila/vista del lector", + "increaseVolume": "Aumentar lo volum", + "label": "Acorchis del lector àudio", + "playNext": "Legir la pista seguenta", + "playPause": "Pausar/Legir la pista actuala", + "playPrevious": "Legir la pista precedenta", + "seekBack30": "Recular de 30s", + "seekBack5": "Recular de 5s", + "seekForward30": "Avançar de 30s", + "seekForward5": "Avançar de 5s", + "shuffleQueue": "Mesclar la fila", + "toggleFavorite": "Ajustar/Tirar dels favorits", + "toggleLoop": "Cambiar lo tipe de lectura de la lista", + "toggleMute": "Copar/Restablir lo son" }, - "error": { - "sync": "Una error s’es producha en enregistrar vòstras modificacions" - }, - "message": { - "sync": "Cambiament sincronizat amb lo servidor" - }, - "modal": { - "clearPlaylist": { - "header": "Volètz voidar la lista de lectura « { playlist } » ?", - "content": { - "warning": "Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser anullat." - } - } - }, - "help": { - "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" - }, - "header": { - "editor": "Editor de lista de lectura" - }, - "warning": { - "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" - }, - "loading": { - "sync": "Sincronizacion dels cambiaments amb lo servidor…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Ajustar a la lista de lectura…" - } - }, - "Form": { - "header": { - "createPlaylist": "Crear una nòva lista de lectura", - "createSuccess": "Lista de lectura creada", - "updateSuccess": "Lista de lectura actualizada", - "createFailure": "Lista de lectura creada" - }, - "button": { - "create": "Crear la lista de lectura", - "update": "Actualizar la lista de lectura" - }, - "placeholder": { - "name": "Ma lista de lectura tròp crana" - }, - "label": { - "name": "Nom de la lista de lectura", - "visibility": "Visibilitat de la lista de lectura" - } - }, - "Widget": { - "button": { - "create": "Crear una lista de lectura", - "more": "Ne veire mai" - }, - "placeholder": { - "noPlaylists": "Cap de lista de lectura creada pel moment" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } acceptèt vòstra demanda de seguiment de la bibliotèca « { library } »", - "libraryFollow": "{ username } seguís vòstra bibliotèca « { library } »", - "libraryPendingFollow": "{ username } vòl seguir vòstra bibliotèca « { library } »" - }, - "button": { - "approve": "Validar", - "markRead": "Marcar coma legidas", - "markUnread": "Marcar coma pas legidas", - "reject": "Regetar" + "general": { + "focus": "Anar a la recèrca", + "label": "Acrochis generals", + "show": "Mostrar los acorchis clavièr disponibles", + "unfocus": "Sortir de la recèrca" } } }, "Sidebar": { + "header": { + "administration": "Administracion", + "explore": "Explorar", + "library": "Ma bibliotèca", + "main": "Navigacion principala", + "more": "Mai" + }, + "label": { + "add": "Ajustar de contengut", + "administration": "Administracion", + "edits": "Fichièrs en espèra", + "follows": "Demandas d’abonament en espèra", + "language": "Lenga", + "main": "Menú màger", + "play": "Legir aquesta pista", + "theme": "Tèma" + }, "link": { "about": "A prepaus d’aquesta instància", "albums": "Albums", @@ -1810,43 +285,1968 @@ "search": "Recercar", "settings": "Paramètres", "users": "Utilizaires" - }, - "label": { - "add": "Ajustar de contengut", - "administration": "Administracion", - "language": "Lenga", - "main": "Menú màger", - "follows": "Demandas d’abonament en espèra", - "edits": "Fichièrs en espèra", - "play": "Legir aquesta pista", - "theme": "Tèma" - }, - "header": { - "administration": "Administracion", - "explore": "Explorar", - "main": "Navigacion principala", - "more": "Mai", - "library": "Ma bibliotèca" } }, - "manage": { - "library": { - "UploadsTable": { + "admin": { + "SettingsGroup": { + "button": { + "save": "Enregistrar" + }, + "header": { + "error": "Error en enregistrar los paramètres.", + "image": "Imatge actual" + }, + "message": { + "success": "Paramètres corrèctament modificats." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Ajustar un camp novèl", + "edit": "Modificar lo formulari", + "preview": "Apercebut del formulari" + }, + "help": { + "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de l’inscripcion es activada.", + "helpText": "Un tèxte opcional a afichar a la debuta del formulari d’inscripcion." + }, + "label": { + "additionalField": "Camp addicional", + "additionalFields": "Camps addicionals", + "delete": "Suprimir", + "helpText": "Tèxt d’ajuda", + "moveDown": "Desplaçar enbàs", + "moveUp": "Desplaçar ennaut" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Accions", + "label": "Nom del camp", + "required": "Obligatòri", + "type": "Tipe de camp" + }, + "required": { + "false": "Non", + "true": "Òc" + }, + "type": { + "long": "Tèxt grand", + "short": "Tèxt cort" + } + } + } + } + }, + "audio": { + "ChannelCard": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Actualizat lo {date}" + }, + "ChannelEntries": { + "help": { + "subscribe": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelForm": { + "header": { + "error": "Error en enregistrar la cadena." + }, + "help": { + "discography": "Publicatz la musica que fasètz coma una bona discografia d’albums e singles.", + "podcast": "Albergatz vòstres episòdis e mantenètz vòstre comunitat al fial.", + "podcastFields": "Utilizat pels camps itunes:email e itunes:name, requerits per d’unas platafòrmas coma Spotify o iTunes.", + "username": "Utilizat dins las URL e per seguir aquesta cadena sul Fedivers. O podètz pas cambiar mai tard." + }, + "label": { + "category": "Categoria", + "description": "Descripcion", + "discography": "Discografia de l’artista", + "email": "Adreça electronica del proprietari", + "image": "Imatge de la cadena", + "language": "Lenga", + "name": "Nom", + "owner": "Nom del proprietari", + "podcast": "Podcast", + "subcategory": "Subcategoria", + "tags": "Etiquetas", + "username": "Identificant del Fedivers" + }, + "legend": { + "purpose": "A qué servirà aquesta cadena ?" + }, + "loader": { + "loading": "Cargament" + }, + "placeholder": { + "name": "Nom crane de la cadena", + "username": "nomcranedelacadena" + } + }, + "ChannelSerieCard": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis" + } + }, + "ChannelSeries": { + "button": { + "showMore": "Ne veire mai" + }, + "help": { + "subscribe": "Vos cal benlèu vos abonar a aquesta cadena per ne veire lo contengut." + } + }, + "ChannelsWidget": { + "button": { + "showMore": "Ne veire mai" + } + }, + "EmbedWizard": { + "button": { + "copy": "Copiar" + }, + "header": { + "preview": "Apercebut" + }, + "help": { + "anonymous": "Mercés de contactar vòstres administrators e de lor demandar d’actualizar lo paramètres ligat.", + "embed": "Copiatz / Pegatz aqueste còdi al vòstre site HTML", + "width": "Daissar void per un widget adaptatiu" + }, + "label": { + "embed": "Còdi d’integracion", + "height": "Nautor del widget", + "width": "Largor del widget" + }, + "message": { + "copy": "Tèxte copiat al quichapapièr !" + }, + "warning": { + "anonymous": "Lo partatge foncionarà pas perque aqueste pod autoriza pas los utilizaires anonimes a accedir al contengut." + } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Anullar la demanda d’abonament", + "follow": "Seguir", + "unfollow": "Quitar de seguir" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista actuala", + "discretePlay": "Legir", + "episodeDetails": "Detalhs de l’episòdi", + "hideArtist": "Amagar lo contengut d’aqueste artista", + "playAlbum": "Legir l’album", + "playArtist": "Legir çò de l’artista", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "playPlaylist": "Legir la lista de lectura", + "playTrack": "Legir la pista", + "playTracks": "Legir las pistas", + "report": "Senhalar…", + "startRadio": "Legir de cançons similaras", + "trackDetails": "Detalhs de la pista" + }, + "title": { + "more": "Mai…", + "unavailable": "Aquesta pista es pas disponibla dins cap de las bibliotècas qu’avètz accès" + } + }, + "Player": { + "header": { + "player": "Lector àudio e contraròtle" + }, + "label": { + "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", + "audioPlayer": "Lector mèdia", + "clearQueue": "Voidar la fila", + "expandQueue": "Desplegar la fila", + "loopingDisabled": "Repeticion desactivada. Clicatz per activar la repeticion de la pista actuala.", + "loopingSingle": "Repeticion de la pista actuala. Clicatz per activar la repeticion de tota la fila.", + "loopingWholeQueue": "Repeticion de tota la fila, clicatz per desactivar la repeticion.", + "mute": "Copar lo son", + "nextTrack": "Pista seguenta", + "pause": "Pausa", + "play": "Legir", + "previousTrack": "Pista precedenta", + "shuffleQueue": "Mesclar la fila", + "unmute": "Restablir lo son" + }, + "meta": { + "position": "({index} de {length})", + "unknownAlbum": "Album desconegut", + "unknownArtist": "Artista desconegut" + } + }, + "PlayerControls": { + "labels": { + "next": "Pista seguenta", + "pause": "Pausa", + "play": "Lectura", + "previous": "Pista precedenta" + } + }, + "Search": { + "empty": { + "noAlbums": "Cap d’album correspond pas a vòstra recèrca", + "noArtists": "Cap d’artista correspond pas a vòstra recèrca" + }, + "header": { + "albums": "Albums", + "artists": "Artistas", + "search": "Recercar de musica" + }, + "placeholder": { + "search": "Artista, album, pista…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Pas cap de resultats per aquesta recèrca" + }, + "header": { + "noResults": "Cap de correspondéncia pas trobada" + }, + "label": { + "album": "Album", + "artist": "Artista", + "category": { + "federation": "Federacion", + "podcasts": "Podcast" + }, + "search": "Recercar de contengut", + "tag": "Etiqueta", + "track": "Pista" + }, + "link": { + "fediverse": "Recercar sul fediverse", + "more": "Mai de resultats 🡒", + "rss": "S’abonar a un podcast via RSS" + }, + "placeholder": { + "search": "Recercar d’artistas, d’albums, de pistas…" + } + }, + "VolumeControl": { + "button": { + "mute": "Copar lo son", + "unmute": "Restablir lo son" + }, + "label": { + "slider": "Ajustar lo volum" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire l’album", + "artistDetails": "Veire l’artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de l’episòdi", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Mostrar las accions de la pista" + } + }, + "Modal": { + "button": { + "addToFavorites": "Ajustar als favorits", + "addToPlaylist": "Ajustar a la lista de lectura", + "addToQueue": "Ajustar a la lista", + "albumDetails": "Veire l’album", + "artistDetails": "Veire l’artista", + "channelDetails": "Veire la cadena", + "episodeDetails": "Detalhs de l’episòdi", + "playNext": "Legir en seguida", + "playNow": "Legir ara", + "removeFromFavorites": "Tirar dels favorits", + "seriesDetails": "Veire las serias", + "startRadio": "Legir la pista", + "trackDetails": "Detalhs de la pista" + } + }, + "Table": { "table": { - "upload": { + "header": { + "album": "Album", + "artist": "Artista", + "title": "Títol" + } + } + }, + "Widget": { + "button": { + "more": "Ne veire mai" + }, + "empty": { + "noResults": "Cap de resultat pas trobat" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Tornar generar lo geton" + }, + "header": { + "appDetails": "Detalhs de l’aplicacion", + "editApp": "Modificar l’aplicacion" + }, + "help": { + "appDetails": "L’ID e lo secrèt de l’aplicacion son de donadas vertadièrament sensiblas e devon èsser consideradas coma de senhals. Partegetz-las pas amb degun." + }, + "label": { + "accessToken": "Geton d’accès", + "appId": "ID de l’aplicacion", + "appSecret": "Secret de l’aplicacion" + }, + "link": { + "settings": "Tornar als paramètres" + }, + "title": "Modificar l’aplicacion" + }, + "ApplicationForm": { + "button": { + "create": "Crear una aplicacion", + "update": "Actualizar l’aplicacion" + }, + "header": { + "failure": "Podèm pas enregistrar vòstras modificacions" + }, + "help": { + "redirectUri": "Utilizatz « urn:ietf:wg:oauth:2.0:oob » coma URI de redireccion se vòstra aplicacion es pas disponibla en linha." + }, + "label": { + "name": "Nom", + "redirectUri": "URI de redireccion", + "scopes": { + "description": "Causir l’autorizacion «Lectura» o «Escritura» sul parent implica l’accès a totes los jos elements correspondents.", + "read": { + "description": "Accès lectura sola de las donadas utilizaire", + "label": "Lectura" + }, + "write": { + "description": "Accès escritura sola de las donadas utilizaire", + "label": "Escritura" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Tornar als paramètres" + }, + "title": "Crear una nòva aplicacion" + }, + "Authorize": { + "button": { + "authorize": "Autorizar {app}" + }, + "header": { + "access": "{app_name} vòl accedir a vòstre compte Funkwhale", + "allScopes": "Accès complèt", + "authorize": "Autorizar una tèrça aplicacion", + "authorizeFailure": "Error en autorizar l’aplicacion", + "fetchFailure": "Error en recuperar las donadas de l’aplicacion", + "readOnly": "Lectura sola", + "writeOnly": "Escritura sola" + }, + "help": { + "copyCode": "Vos mostrarem un còdi de copiar-pegar dins l’aplicacion", + "pasteCode": "Copiatz-pegatz lo còdi seguent dins l’aplicacion :", + "redirect": "Seretz mandat a { 0 }" + }, + "message": { + "unknownPermissions": "L’aplicacion demanda tanben las autorizacions desconegudas seguentas :" + }, + "title": "Autorizar l’aplicacion" + }, + "LoginForm": { + "button": { + "login": "Connexion" + }, + "header": { + "loginFailure": "Error pendent la connexion" + }, + "help": { + "approvalRequired": "Se vos sètz marcat fa pas gaire, benlèu que vos cal esperar que nòstra còla de moderacion repasse vòstre compte, o verifique vòstra adreça electronica.", + "invalidCredentials": "Mercés de verificar que lo nom d’utilizaire e lo senhal son corrèctes e asseguratz-vos d’aver verificat vòstre corrièl." + }, + "label": { + "password": "Senhal", + "username": "Nom d’utilizaire o corrièl" + }, + "link": { + "createAccount": "Crear un compte", + "resetPassword": "Reïnicializar lo senhal" + }, + "placeholder": { + "username": "Escrivètz vòstre nom d’utilizaire o corrièl" + } + }, + "Logout": { + "button": { + "logout": "Òc-ben, desconnectatz-me !" + }, + "header": { + "confirm": "Volètz vertadièrament vos desconnectar ?", + "unauthenticated": "Sètz pas connectat actualament" + }, + "link": { + "login": "Connectatz-vos !" + }, + "message": { + "loggedIn": "Sètz connectat coma {username}" + }, + "title": "Desconnexion" + }, + "Plugin": { + "button": { + "save": "Enregistrar", + "scan": "Explorar" + }, + "description": { + "library": "Bibliotèca ont los fichièrs devon èsser importats." + }, + "header": { + "failure": "Error en enregistrant lo modul" + }, + "label": { + "library": "Bibliotèca", + "pluginEnabled": "Activada" + }, + "link": { + "documentation": "Documentacion" + } + }, + "Settings": { + "button": { + "delete": "Suprimir", + "deleteAccount": "Suprimir mon compte…", + "deleteAccountConfirm": "Suprimir mon compte", + "disableSubsonic": "Desactivar l’accès", + "edit": "Modificar", + "password": "Cambiar lo senhal", + "refresh": "Actualizar", + "remove": "Tirar", + "removeApp": "Suprimir l’aplicacion", + "revoke": "Revocar", + "revokeAccess": "Revocar l’accès", + "update": "Actualizar", + "updateSettings": "Actualizar los paramètres" + }, + "description": { + "authorizedApps": "Aquò es la lista de las aplicacions qu’an accès a las donadas de vòstre compte.", + "changeEmail": "Cambiar l’adreça email ligada a vòstre compte. Mandarem una confirmacion a l’adreça novèla.", + "changePassword": { + "paragraph1": "L’actualizacion de vòstra senhal cambiarà tanben lo de l’API Subsonic se n’avètz un.", + "paragraph2": "Vos caldrà actualizar lo senhal sus totes los clients qu’utilizan aqueste senhal." + }, + "contentFilters": "Los filtres de contengut vos ajudan a amagar los contenguts que volètz pas veire sus aqueste servici.", + "deleteAccount": "Podètz suprimir vòstre compte e totas las donadas d’un biais permanent e irreversible en utilizar lo formulari çai-jos. Vos demandarem una confirmacion.", + "plugins": "Utilizatz d’extension per agrandir las possibilitat de Funkwhale e obténer mai de foncionalitats.", + "yourApps": "Aquò es la lista de las aplicacions qu’avètz creadas." + }, + "header": { + "accountFailure": "Podèm pas suprimir vòstre compte", + "accountSettings": "Paramètres del compte", + "authorizedApps": "Aplicacions autorizadas", + "avatar": "Avatar", + "avatarFailure": "L’avatar pòt pas èsser enregistrat", + "changeEmail": "Cambiar mon adreça electronica", + "changePassword": "Cambiar lo senhal", + "contentFilters": "Filtres de contengut", + "deleteAccount": "Suprimir mon compte", + "emailFailure": "Podèm pas cambiar vòstra d’adreça mail", + "hiddenArtists": "Artistas amagats", + "noApps": "Avètz pas cap d‘aplicacion connectada a aqueste compte.", + "noPersonalApps": "Avètz pas cap d‘aplicacion creada pel moment.", + "passwordFailure": "Lo senhal pòt pas èsser cambiat", + "plugins": "Moduls", + "settingsUpdated": "Paramètres actualizats", + "updateFailure": "Impossible d’actualizar vòstres paramètres", + "yourApps": "Vòstras aplicacions" + }, + "help": { + "changePassword": "Mercés de verificar que lo senhal es corrèct", + "noApps": "S’autorizatz de tèrças aplicacions a accedir a vòstras donadas, seràn listadas aquí.", + "noPersonalApps": "Marcatz-ne ua per integrar Funkwhale amb de tèrças aplicacions." + }, + "label": { + "avatar": "Avatar", + "currentPassword": "Senhal actual", + "newEmail": "Adreça electronica novèla", + "newPassword": "Nòu senhal", + "password": "Senhal" + }, + "link": { + "managePlugins": "Gerir los moduls", + "newApp": "Crear una nòva aplicacion" + }, + "message": { + "confirmDelete": "Vòstra demanda de supression es estada enviada, vòstre compte e lo contengut seràn lèu suprimits", + "currentEmail": "Vòstra adreça electronica actuala es {email}." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Sètz per èsser desconnectat d’aquesta session e vos caldrà vos connectar amb lo nòu senhal", + "subsonic": "Vòstre senhal Subsonic serà remplaçat per un nòu aleatòri, aquò vos desconnectarà de totes los periferics qu’utilizan l’ancian senhal", + "warning": "Lo cambiament de senhal a las consequéncias seguentas" + }, + "header": "Cambiar lo senhal ?" + }, + "deleteAccount": { + "content": { + "warning": "Aquò es irreversible e suprimirà d’un biais permanent vòstras donadas de nòstres servidors. Seretz immediatament desconnectat." + }, + "header": "Volètz suprimir vòstre compte ?" + }, + "deleteApp": { + "content": { + "warning": "Aquò escafarà aquesta aplicacion per totjorn e totes los getons ligats." + }, + "header": "Suprimir l’aplicacion « {app} » ?" + }, + "revokeApp": { + "content": { + "warning": "Aquò empacha aquesta aplicacion d’accedir al servici en vòstre nom." + }, + "header": "Revocar l’accès a l’aplicacion « {app} » ?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data de creacion", + "name": "Nom" + } + }, + "authorizedApps": { + "header": { + "application": "Aplicacion", + "permissions": "Autorizacions" + } + }, + "yourApps": { + "header": { + "application": "Aplicacion", + "creationDate": "Data de creacion", + "scopes": "Visibilitats" + } + } + }, + "title": "Paramètres del compte", + "warning": { + "deleteAccount": "Vòstre compte serà suprimit de nòstres servidors d’aquí unas minutas. Avisarem tanben los autres servidors que pòdon aver una còpia de certanas donda per que realizen la supression. Remarcatz qu’unes d’aqueles pòdon èsser fòra linha o voler pas o far." + } + }, + "SignupForm": { + "button": { + "create": "Crear mon compte" + }, + "header": { + "login": "Connectatz-vos a vòstre compte Funkwhale", + "signupFailure": "Lo compte pòt pas èsser creat." + }, + "label": { + "email": "Adreça electronica", + "password": "Senhal", + "username": "Nom d’utilizaire" + }, + "message": { + "accountCreated": "Lo compte es estat corrèctament creat. Volgatz verificar vòstra bóstia de recepcion abans d’ensajar de vos connectar.", + "awaitingReview": "Vòstra demanda de compte es estada corrèctament enviada. Vos notificarem per corrièl un còp que nòstra equipa de moderacion aja repassat la demanda.", + "registrationClosed": "Las inscripcions son tampadas sus aquesta instància. Auretz de téner un còdi d’invitacion per vos marcar.", + "requiresReview": "Las inscripcions sus aquesta instància son dobèrtas, mas l’equipa de moderacion repassa las demanda." + }, + "placeholder": { + "email": "Picatz vòstra adreça electronica", + "invitation": "Escrivètz vòstre còdi d’invitacion (pas sensible a la cassa)", + "username": "Escrivètz vòstre nom d’utilizaire" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Desactivar l’accès", + "confirmNewPassword": "Demandar un senhal", + "disable": "Desactivar l’accès via Subsonic", + "newPassword": "Demandar un nòu senhal" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale es compatible amb d’autres lectors de musica compatibles amb l’API Subsonic.", + "paragraph2": "Podètz los utilizar per profeitar de vòstras listas de lectura e de vòstra musica en mòde fòra linha sus vòstre mobil, tableta, per exemple.", + "paragraph3": "Pr’aquò, accedir a Funkwhale d’un client estant demanda un senhal diferent que podètz configurar çai-jos." + } + }, + "header": { + "error": "Error", + "subsonic": "Senhal de l’API Subsonic" + }, + "label": { + "subsonicField": "Senhal de l’API Subsonic" + }, + "link": { + "apps": "Aprenètz a utilizar Funkwhale amb d’autras aplicacions" + }, + "message": { + "accessDisabled": "Accès desactivat", + "passwordUpdated": "Senhal actualizat", + "unavailable": "L’API Subsonic es pas disponibla per aquesta instància Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "Aquò desactivarà complètament l’accès a l’API Subsonic de vòstre compte estant." + }, + "header": "Desactivar l’accès a l’API Subsonic ?" + }, + "newPassword": { + "content": { + "warning": "Aquò vos desconnectarà de totes los periferics qu’utilizan aqueste senhal." + }, + "header": "Demandar un nòu senhal per l’API Subsonic ?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Error en crear" + }, + "label": { + "albumTitle": "Títol" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anullar", + "create": "Crear" + }, + "header": { + "newAlbum": "Album novèl", + "newSeries": "Nòvas serias" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Serias" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + }, + "option": { + "none": "Cap" + } + }, + "LicenseSelect": { + "label": { + "license": "Licéncia" + }, + "link": { + "license": "A prepaus d’aquesta licéncia" + }, + "option": { + "none": "Cap" + } + }, + "SubscribeButton": { + "help": { + "auth": "Vos cal vos abonar a aquesta cadena per ne veire lo contengut" + }, + "title": { + "subscribe": "S’abonar", + "unsubscribe": "Quitar de seguir" + } + }, + "UploadForm": { + "button": { + "edit": "Modificar", + "ignore": "Ignorar", + "remove": "Tirar", + "resume": "Reprendre", + "retry": "Tornar ensajar" + }, + "description": { + "extensions": "Extensions compatiblas : {extensions}" + }, + "header": { + "error": "Error en publicar" + }, + "help": { + "license": "Ajustatz una licéncia a vòstre mandadís per assegurar las libertats de vòstre public." + }, + "label": { + "channel": "Cadena", + "openBrowser": "Percórrer…" + }, + "message": { + "dragAndDrop": "Lisatz depausatz los fichièrs aquí o dorbissètz lo navegador per enviar de fichièrs", + "pending": "Avètz de brolhon de mandadisses en espèra de publicacion." + }, + "status": { + "errored": "Perturbat", + "pending": "En espèra", + "uploading": "Mandadís en cors" + }, + "warning": { + "quota": "Avètz pas mai d’espaci per enviar los fichièrs. Mercés de contactar los moderators." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Descripcion", + "image": "Imatge de la pista", + "position": "Posicions", + "tags": "Etiquetas", + "title": "Títol" + } + }, + "UploadModal": { + "button": { + "cancel": "Anullar", + "close": "Tampar", + "finishLater": "Acabar mai tard", + "next": "Etapa seguenta", + "previous": "Etapa precedenta", + "publish": "Publicar", + "update": "Actualizar" + }, + "header": { + "processing": "Tractament dels mandadisses", + "publish": "Publicar àudio", + "uploadDetails": "Detalh de mandadís", + "uploadFiles": "Fichièrs d’enviar" + }, + "meta": { + "files": "{n} fichièr | {n} fichièrs", + "quota": "Espaci liure restant : {space}" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "{n} de { total } element seleccionat | {n} de { total } elements seleccionats", + "go": "Zo", + "launch": "Aviar", + "refresh": "Actualizar lo contengut de la tabla", + "select": "Seleccionar", + "selectAll": "Seleccionar totes los elements", + "selectCurrentPage": "Seleccionar solament la pagina actuala", + "selectElement": "Seleccionar un element | Seleccionar l’ensemble dels {n} elements", + "selected": "{n} de {total} element seleccionat | {n} de {total} elements seleccionats" + }, + "header": { + "error": "Error en tractar l’accion" + }, + "label": { + "actions": "Accions", + "performAction": "Executar las accions" + }, + "message": { + "needsRefresh": "Lo contengut es estat actualizat, clicar per tornar cargar e veire lo contengut a jorn", + "success": "L’action {action} es estada lançada corrèctament sus {n} element | L’action {action} es estada lançada corrèctament sus {n} elements" + }, + "modal": { + "performAction": { + "content": { + "warning": "Aquesta operacion pòt afectar mantun elements o pòt pas èsser anullada, mercés de verificar s’es ben çò que desiratz." + }, + "header": "Volètz lançar l’accion « {action} » sus {n} element ? | Volètz lançar l’accion « {action} » sus {n} elements ?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Tirar" + }, + "header": { + "failure": "Impossible de salvagardar vòstra pèça-junta" + }, + "help": { + "upload": "PNG o JPG. Las dimensions devon èsser entre 1400x1400px e 3000x3000px. La talha maximala autorizada es 5 Mo." + }, + "label": { + "upload": "Enviar un nòu imatge…" + }, + "loader": { + "uploading": "Mandadís del fichièr…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Plegar", + "expand": "Desplegar" + } + }, + "ContentForm": { + "button": { + "preview": "Apercebut", + "write": "Escriure" + }, + "empty": { + "noContent": "I a pas res a previsualizar" + }, + "help": { + "markdown": "Podètz utilizar la sintaxi Markdown" + }, + "placeholder": { + "input": "Escrivètz quicòm aquí…" + } + }, + "CopyInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "success": "Tèxte copiat al quichapapièr !" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anullar", + "confirm": "Confirmar" + }, + "header": { + "confirm": "Volètz confirmar aquesta accion ?" + } + }, + "Duration": { + "meta": { + "hours": "{hours} h {minutes} min", + "minutes": "{minutes} min" + } + }, + "EmptyState": { + "button": { + "refresh": "Actualizar" + }, + "header": { + "noResults": "Cap de resultat pas trobat." + } + }, + "ExpandableDiv": { + "button": { + "less": "Ne veire mens", + "more": "Ne veire mai" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Escafar" + }, + "label": { + "search": "Recercar" + }, + "placeholder": { + "search": "Recercar…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Avètz pas accès a aquò" + }, + "header": { + "unauthenticated": "Desconnectat" + }, + "link": { + "login": "Connexion", + "signup": "Inscripcion" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "less": "Ne veire mens", + "more": "Ne veire mai", + "update": "Actualizar la descripcion" + }, + "empty": { + "noDescription": "Cap de descripcion pas disponibla" + }, + "header": { + "failure": "Error en actualizar la descripcion" + } + }, + "UserLink": { + "link": { + "username": "{'@'}{username}" + } + }, + "UserMenu": { + "label": { + "language": "Lenga", + "shortcuts": "Acorchis clavièr", + "theme": "Tèma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "Traçador de problèmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "Paramètres", + "signup": "Inscripcion", + "support": "Ajuda" + } + }, + "UserModal": { + "button": { + "switchInstance": "Utilizar una autra instància" + }, + "header": { + "options": "Opcions" + }, + "label": { + "language": "Lenga", + "shortcuts": "Acorchis clavièr", + "theme": "Tèma" + }, + "link": { + "about": "A prepaus", + "chat": "Sala de discutida", + "docs": "Documentacion", + "forum": "Forum", + "git": "Traçador de problèmas", + "login": "Connexion", + "logout": "Desconnexion", + "notifications": "Notificacions", + "profile": "Perfil", + "settings": "Paramètres", + "signup": "Inscripcion", + "support": "Ajuda" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "I a pas encara de pistas ajustadas a vòstres favorits" + }, + "header": { + "favorites": "{n} favorit | {n} favorits" + }, + "link": { + "library": "Percórrer la bibliotèca" + }, + "loader": { + "loading": "Cargament dels favorits…" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "title": "Vòstres favorits" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Ajustar als favorits", + "remove": "Tirar dels favorits" + }, + "label": { + "inFavorites": "Als favorits" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Tampar", + "reload": "Tampar e tornar cargar la pagina" + }, + "description": { + "failure": "Una error s’es producha en actualizar las donadas :", + "pending": "La requèsta d’actualizacion es pas estada tractada a temps per nòstre servidor. Serà executada mai tard.", + "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale.", + "success": "Las donadas son estadas actualizadas corrèctament del servidors alonhat estant." + }, + "header": { + "failure": "Error en actualizar", + "pending": "Actualizar las info del nos", + "refresh": "Actualizacion de l’objècte del servidor alonhat estant…", + "saveFailure": "Error en enregistrar los paramètres", + "skipped": "L’actualizada es estada passada", + "success": "Actualizacion reüssida" + }, + "loader": { + "awaitingResult": "En espèra dels resultats…", + "fetchRequest": "Demanda de recuperacion…" + }, + "table": { + "error": { + "label": { + "detail": "Detalhs de l’error", + "type": "Tip d’error" + }, + "value": { + "connectionError": "Connexion impossibla al servidor alonhat", + "httpError": "Una error HTTP s’es producha en contactar lo servidor alonhat", + "httpStatus": "Lo servidor alonhat a respondut amb lo còdi HTTP {status}", + "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids", + "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", + "timeoutError": "Lo servidor alonhat a tròp tardat a respondre", + "unknownError": "Error desconeguda" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Ne veire mai" + }, + "empty": { + "noMatch": "Cap de bibliotèca correspondenta." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Copiar" + }, + "message": { + "copy": "Tèxte copiat al quichapapièr !" + }, + "title": "Mostrar/amagar lo senhal" + } + }, + "library": { + "AlbumBase": { + "link": { + "addDescription": "Ajustar una descripcion…" + }, + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "tracks": "{n} pista | {n} pistas" + }, + "title": "Album" + }, + "AlbumDetail": { + "description": { + "libraries": "Aqueste album es present a las bibliotècas seguentas :" + }, + "header": { + "episodes": "Episòdis", + "libraries": "Bibliotècas de l’utilizaire", + "tracks": "Pistas" + }, + "meta": { + "volume": "Volum {number}" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "musicbrainz": "Veire sus MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Aqueste album serà tirat, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste album ?" + }, + "embed": { + "header": "Integrar aqueste album a un site web" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Modificar aqueste album", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "Albums": { + "button": { + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los albums" + }, + "label": { + "search": "Recercar", + "tags": "Etiquetas" + }, + "link": { + "addMusic": "Ajustar musica" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Picatz lo títol de l’album…" + }, + "title": "Albums" + }, + "ArtistBase": { + "button": { + "cancel": "Anullar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…", + "play": "Legir totes los albums" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "musicbrainz": "Veire sus MusicBrainz", + "wikipedia": "Recercar sus Wikipèdia" + }, + "meta": { + "albums": "{n} albums | {n} albums", + "tracks": "{count} pista dins | {count} pistas dins" + }, + "modal": { + "embed": { + "header": "Integrar aquesta pista a vòstre site web" + } + }, + "title": "Artista" + }, + "ArtistDetail": { + "button": { + "filter": "Levar lo filtre", + "more": "Ne cargar mai…" + }, + "description": { + "library": "Aqueste artista es present a las bibliotècas seguentas :" + }, + "header": { + "album": "Albums d’aqueste artista", + "library": "Bibliotècas de l’utilizaire", + "track": "Pistas novèlas d’aqueste artista" + }, + "link": { + "filter": "Validar mos filtres" + }, + "message": { + "filter": "Amagatz lo contengut ligat a aqueste artista." + } + }, + "ArtistEdit": { + "header": { + "edit": "Modificar aqueste artista", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": "Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "Artists": { + "button": { + "search": "Recercar", + "upload": "Ajustar musica" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los artistas" + }, + "label": { + "excludeCompilation": "Exclure las compilacions d’artistas", + "search": "Nom de l’artista", + "tags": "Etiquetas" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercar…" + }, + "title": "Artistas" + }, + "EditCard": { + "button": { + "approve": "Validar", + "delete": "Suprimir", + "reject": "Regetar" + }, + "header": { + "modification": "Modificacion {id}" + }, + "link": { + "track": "Pista #{id} - {name}" + }, + "modal": { + "content": { + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + }, + "delete": { + "header": "Suprimir aquesta règla de moderacion ?" + } + }, + "status": { + "applied": "Validada e aplicada", + "approved": "Validat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + }, + "table": { + "update": { + "header": { + "field": "Camp", + "newValue": "Nòva valor", + "oldValue": "Anciana valor" + }, + "notApplicable": "ND" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anullar", + "clear": "Escafar", + "new": "Enviar una modificacion de mai", + "reset": "Tornar a la valor iniciala", + "showAll": "Mostrar totas las modificacions", + "showUnreviewed": "Restrénher a las modificacions pas repassadas", + "submit": "Enviar e aplicar la modificacion", + "suggest": "Enviar la suggestion" + }, + "empty": { + "suggestEdit": "Suggerir un cambiament en utilizar lo formulari çai-jos" + }, + "header": { + "failure": "Error en enviar la modificacion", + "recentEdits": "Modificacions recentas", + "success": "La modificacion es estada corrèctament enviada.", + "unreviewed": "Modificacions recentas en espèra de relectura" + }, + "label": { + "summary": "Resumit (opcional)" + }, + "message": { + "noPermission": "Avètz pas l’autorizacion de modificar aqueste objècte, mas podètz suggerir de cambiaments. Un còp mandadas, las suggestions seràn repassadas abans validacion." + }, + "notApplicable": "ND", + "placeholder": { + "summary": "Una descripcion pichona per explicar vòstres cambiaments." + } + }, + "FileUpload": { + "button": { + "cancel": "Anullar", + "retry": "Tornar ensajar los mandadisses fracassats" + }, + "description": { + "import": "Resultats d’import", + "previousImport": "Resultats de vòstre import precedent :" + }, + "empty": { + "noFiles": "0" + }, + "header": { + "failure": "Error en aviant l’import", + "local": "Importar de la musica de vòstre emmagazinatge local", + "server": "Estatut de l’import", + "status": "Estatut de l’import" + }, + "label": { + "extensions": "Extensions compatiblas : {extensions}", + "remainingSpace": "Espaci liure", + "uploadWidget": "Clicatz per causir los fichièrs d’enviar o lisatz los fichièrs o repertòris" + }, + "link": { + "picard": "Vos recomandam d’utilizar lo logicial Picard per aquò far.", + "processing": "Tractament", + "uploading": "Mandadís en cors" + }, + "message": { + "local": { + "copyright": "Envietz pas cap de contengut jos dreches a una bibliotèca publica, autrament enfranhètz la lei", + "format": "Los fichièrs musicals que sètz a enviar son al format OGG, Flac, MP3 o AIFF", + "message": "Sètz a man d’enviar de la musica a vòstra bibliotèca. Abans de començar, mercés de vos assegurar que :", + "tag": "Los fichièrs musicals que sètz a enviar son etiquetats coma cal." + } + }, + "table": { + "upload": { + "header": { + "actions": "Accions", + "filename": "Nom del fichièr", + "size": "Talha", + "status": "Estatut" + }, + "progress": "{percent}%", + "status": { + "pending": "En espèra", + "uploaded": "Enviat", + "uploading": "Mandadís…" + } + } + }, + "tooltip": { + "denied": "Mandadís refusat, asseguratz-vos que lo fichièr es pas tròp grand e qu’avètz pas atenhut vòstre quòta", + "extension": "Tipe de fichièr pas valid, asseguratz-vos d’enviar un fichièr àudio. Las extensions compatiblas son {extensions}", + "network": "Una error de ret s’es producha en enviar aqueste fichièr", + "retry": "Tornar ensajar", + "size": "Mandadís del fichièr impossible, asseguratz-vos qu’es pas tròp pesuc", + "timeout": "Temps de transferiment expirat, ensajatz tornamai" + } + }, + "FsBrowser": { + "button": { + "import": "Importar" + } + }, + "FsLogs": { + "empty": { + "notStarted": "L’import a pas encara començat" + } + }, + "Home": { + "header": { + "newChannels": "Nòvas cadenas", + "playlists": "Listas de lectura", + "recentlyAdded": "Ajustats i a res", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + }, + "title": "Bibliotèca" + }, + "ImportStatusModal": { + "button": { + "close": "Tampar" + }, + "error": { + "importFailure": "Una error s’es producha pendent lo processús de mandadís. Trobaretz mai d’informacion çai-jos.", + "invalidMetadata": { + "label": "Metadonada invalida", + "message": "La metadonada inclusa al fichièr es invalida o de camps obligatòris son absents." + }, + "unknownError": { + "label": "Error desconeguda", + "message": "Una error desconeguda s’es producha" + } + }, + "header": { + "importDetail": "Detalhs de l’import" + }, + "link": { + "documentation": "Legissètz nòstra documentacion per aquesta error", + "support": "Dobrir un fil de discutida d’assisténcia (donatz las informacions de desbugatge dins vòstre messatge)" + }, + "message": { + "importDetail": "Lo mandadís es encara en espèra e serà lèu tractat pel servidor.", + "importSuccess": "Lo mandadís es estat corrèctament tractat pel servidor." + }, + "table": { + "error": { + "debug": "Informacions de debug", + "errorDetail": "Detalhs de l’error", + "errorType": "Tip d’error", + "help": "Obténer d’ajuda" + } + }, + "warning": { + "importSkipped": "Lo mandadís es estat sautat perque un que li sembla es ja disponible dins una de vòstras bibliotèca." + } + }, + "Podcasts": { + "button": { + "cancel": "Anullar", + "channel": "Crear una cadena", + "feed": "S’abonar al flux RSS", + "search": "Recercar", + "subscribe": "S’abonar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer los Podcasts" + }, + "label": { + "search": "Títol del podcast", + "tags": "Etiquetas" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Recercar…" + }, + "title": "Podcasts" + }, + "Radios": { + "button": { + "add": "Crear una ràdio", + "create": "Crear vòstra pròpria ràdio", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer las ràdios", + "instance": "Ràdios de l’instància", + "user": "Ràdios dels utilizaires" + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Resultats per pagina" + }, + "placeholder": { + "search": "Escrivètz un nom de ràdio…" + }, + "title": "Ràdios" + }, + "TagDetail": { + "header": { + "channels": "Cadenas", + "tracks": "Pistas" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "moderation": "Dobrir dins l’interfàcia de moderacion" + } + }, + "TagSelector": { + "placeholder": { + "search": "Recercar…" + } + }, + "TrackBase": { + "button": { + "cancel": "Anullar", + "delete": "Suprimir", + "download": "Telecargar", + "edit": "Modificar", + "embed": "Integrar", + "more": "Mai…", + "play": "Legir" + }, + "link": { + "discogs": "Recercar en Discogs", + "django": "Veire sul panèl d’admin de Django", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "wikipedia": "Recercar sus Wikipèdia" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta pista serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + }, + "embed": { + "header": "Integrar aquesta pista a un site web" + } + }, + "title": "Pista" + }, + "TrackDetail": { + "description": { + "library": "Aquesta pista es presenta a las bibliotècas seguentas :" + }, + "header": { + "episode": "Detalhs de l’episòdi", + "library": "Bibliotècas associadas", + "playlists": "Listas de lectura associadas", + "release": "Detalhs de publicacion", + "track": "Detalhs de la pista" + }, + "link": { + "musicbrainz": "Veire sus MusicBrainz" + }, + "notApplicable": "ND", + "table": { + "release": { + "album": "Album", + "artist": "Artista", + "copyright": "Copyright", + "license": "Licéncia", + "series": "Seria", + "url": "URL", + "year": "An" + }, + "track": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "codec": "Codec", + "downloads": "Telecargaments", + "duration": "Durada", + "size": "Talha" + } + } + }, + "TrackEdit": { + "header": { + "edit": "Modificar aquesta pista", + "suggest": "Podèm pas cargar aquesta pisata" + }, + "message": { + "remote": " Aqueste objècte es gerit per un autre servidor, podètz pas lo modificar." + } + }, + "radios": { + "Builder": { + "button": { + "filter": "Ajustar lo filtre", + "save": "Enregistrar" + }, + "description": { + "builder": "Podètz utilizar aquesta interfàcia per realizar vòstra pròpria ràdio personalizada, que jogarà las listas segon los critèris indicats." + }, + "header": { + "builder": "Editor", + "created": "Nom de la ràdio", + "matches": "{n} pista correspond als filtres seleccionats | {n} pistas correspondon als filtres seleccionats", + "updated": "Ràdio actualizada" + }, + "label": { + "description": "Descripcion", + "filter": "Ajustar de filtres per dire de personalizar vòstra ràdio", + "name": "Nom de la ràdio", + "public": "Mostrar publicament" + }, + "option": { + "filter": "Seleccionar un filtre" + }, + "placeholder": { + "description": "Ma descripcion tròp crana", + "name": "Ma ràdio tròp crana" + }, + "table": { + "filter": { "header": { - "accessedDate": "Data d’accès", - "account": "Compte", - "creationDate": "Data de creacion", - "domain": "Domenu", - "importStatus": "Estatut de l’import", - "library": "Bibliotèca", - "name": "Nom", - "size": "Talha", - "visibility": "Visibilitat" + "actions": "Accions", + "candidates": "Pistas candidatas", + "config": "Configuracion", + "exclude": "Exclure", + "name": "Nom del filtre" } } }, + "title": "Editor de ràdio" + }, + "Filter": { + "cancelButton": "Anullar", + "excludeLabel": "Exclure", + "matchingTracksModalHeader": "Pistas correspondentas al filtre", + "removeButton": "Tirar" + } + } + }, + "manage": { + "ChannelsTable": { + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom d’utilizaire, compte…" + }, + "table": { + "channel": { + "header": { + "account": "Compte", + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los albums seleccionats seràn tirats, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, ID MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Títol", + "releaseDate": "Data de sortida", + "tracks": "Pistas" + } + } + } + }, + "ArtistsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Los artistas seleccionats seràs tirats, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "category": "Categoria", + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, nom, ID MusicBrainz,…" + }, + "table": { + "artist": { + "header": { + "albums": "Albums", + "creationDate": "Data de creacion", + "domain": "Domenu", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "EditsCardList": { + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "all": "Tot", + "approved": "Validat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, domeni…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las bibliotècas seleccionadas seràs tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + } + }, + "label": { + "search": "Recercar", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "option": { + "all": "Tot" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per domeni, actor, nom, descripcion…" + }, + "table": { + "library": { + "header": { + "account": "Compte", + "creationDate": "Data de creacion", + "domain": "Domenu", + "followers": "Seguidors", + "name": "Nom", + "uploads": "Mandadís", + "visibility": "Visibilitat" + } + } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "L’etiqueta seguenta serà tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom" + }, + "table": { + "tag": { + "header": { + "albums": "Albums", + "artists": "Artistas", + "creationDate": "Data de creacion", + "name": "Nom", + "tracks": "Pistas" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "Las pistas seleccionadas seràn tiradas, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, album, ID MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Artista", + "creationDate": "Data de creacion", + "domain": "Domenu", + "license": "Licéncia", + "title": "Títol" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Suprimir", + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + } + }, + "label": { + "search": "Recercar", + "status": "Estatut", + "visibility": "Visibilitat" + }, + "link": { + "local": "Local" + }, + "notApplicable": "ND", "option": { "all": "Tot", "failed": "Fracàs", @@ -1862,396 +2262,68 @@ }, "label": "Òrdre" }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar", - "status": "Estatut", - "visibility": "Visibilitat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per domeni, actor, nom, referéncia, sorga…" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data d’accès", "account": "Compte", "creationDate": "Data de creacion", "domain": "Domenu", - "followers": "Seguidors", + "importStatus": "Estatut de l’import", + "library": "Bibliotèca", "name": "Nom", - "uploads": "Mandadís", + "size": "Talha", "visibility": "Visibilitat" } } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las bibliotècas seleccionadas seràs tiradas, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "label": { - "search": "Recercar", - "visibility": "Visibilitat" - }, - "placeholder": { - "search": "Recercar per domeni, actor, nom, descripcion…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "license": "Licéncia", - "title": "Títol" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Las pistas seleccionadas seràn tiradas, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per títol, artista, album, ID MusicBrainz…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los artistas seleccionats seràs tirats, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local" - }, - "placeholder": { - "search": "Recercar per domeni, nom, ID MusicBrainz,…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albums", - "artists": "Artistas", - "creationDate": "Data de creacion", - "name": "Nom", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "L’etiqueta seguenta serà tirada e desligada del contengut existent, se cal. Aquesta accion es irreversibla." - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per nom" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Tot", - "approved": "Validat", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "placeholder": { - "search": "Recercar per títol, artista, domeni…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "label": { - "status": "Estatut" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Artista", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Títol", - "releaseDate": "Data de sortida", - "tracks": "Pistas" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "action": { - "delete": { - "label": "Suprimir", - "warning": "Los albums seleccionats seràn tirats, e mai las pistas, mandadisses e istorics d’escota ligats. Aquesta accion es irreversibla." - } - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "notApplicable": "ND", - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per títol, artista, ID MusicBrainz…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Compte", - "domain": "Domenu", - "local": "Local", - "owner": "Proprietari", - "type": "Tipe" - }, - "status": { - "assignedTo": "Atribuit a", - "internalNotes": "Nòtas intèrnas", - "resolutionDate": "Data de resolucion", - "resolved": "Resolgut", - "status": "Estatut", - "unresolved": "Pas resolgut" - }, - "report": { - "category": "Categoria", - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" + "AccountsTable": { + "action": { + "purge": { + "label": "Purgar" } }, - "header": { - "actions": "Accions", - "notes": "Nòtas intèrnas", - "message": "Messatge", - "reportedObject": "Objècte senhalat" - }, - "button": { - "confirmDelete": "Suprimir", - "delete": "Escafar l’objècte senhalat", - "resolve": "Resòlver", - "unresolve": "Pas resolgut" - }, - "modal": { - "delete": { - "header": "Escafar l’objècte senhalat ?", - "content": { - "warning": "Aquò suprimirà l’objècte ligat amb aqueste senhalament e lo marcarà coma resolgut. Aquesta supression es irreversibla." - } - } - }, - "notApplicable": "ND", - "link": { - "moderation": "Dobrir dins l’interfàcia de moderacion", - "report": "Senhalar { id }", - "publicPage": "Veire la pagina publica" - }, - "warning": { - "objectDeleted": "L’objècte d’aqueste senhalament es estat suprimit." - } - }, - "UserRequestCard": { - "header": { - "actions": "Accions", - "notes": "Nòtas intèrnas", - "signup": "Messatge" - }, - "button": { - "approve": "Validar", - "reject": "Regetar" - }, - "table": { - "status": { - "approved": "Validat", - "assignedTo": "Atribuit a", - "internalNotes": "Nòtas intèrnas", - "pending": "En espèra", - "refused": "Regetada", - "status": "Estatut" - }, - "request": { - "creationDate": "Data de creacion", - "submittedBy": "Enviat per" - } - }, - "notApplicable": "ND", - "link": { - "request": "Demandar { id }" - }, - "message": { - "signup": "Aqueste utilizaire vòl se marcar a vòstra instància." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Ajustar una nòva règla de moderacion", - "editRule": "Actualizar las règlas de moderacion", - "failure": "Error en crear la règla" - }, "label": { - "blockAll": "O blocar tot", - "policyDisabled": "Desactivada", - "policyEnabled": "Activada", - "silenceActivity": "Amagar l’activitat", - "silenceNotifications": "Amagar las notificacions", - "customizeRule": "O personalizatz aquesta règla", - "policyReason": "Rason", - "rejectMedia": "Regetar lo mèdia" + "search": "Recercar" }, - "tooltip": { - "blockAll": "O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, etc.)", - "rejectMedia": "Telecargar pas cap de mèdia (àudio, album, tampa, avatar de compte…) d’aqueste compte o domeni. Purgarà tanben lo contengut existent.", - "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarà a vos remembrar perque apondèretz aquesta règla. Segon la configuracion de l’instància, aquò pòt èsser mostrat publicament per ajudar als utilizaires a comprendre qualas règlas de moderacion son en plaça.", - "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", - "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", - "isActive": "Utilizatz aqueste paramètre per activar/desactivar temporàriament la règla sens la suprimir complètament." + "link": { + "local": "Compte local" }, - "button": { - "cancel": "Anullar", - "create": "Crear", - "delete": "Suprimir", - "confirm": "Suprimir la règla de moderacion", - "update": "Actualizar" + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" }, - "modal": { - "delete": { - "header": "Suprimir aquesta règla de moderacion ?", - "content": { - "warning": "Aquesta accion se pòt pas anullar." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Ajustar una nòta" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { - "summary": "Descrivètz quinas accions son estadas presas, o tota autra mesa a jorn ligada…" + "search": "Recercar per domeni, nom d’utilizaire, bio…" }, - "header": { - "failure": "Error en enviar la nòta" + "table": { + "account": { + "header": { + "domain": "Domeni", + "firstSeen": "Primièra aparicion", + "lastSeen": "Darrièra visita", + "moderationRule": "Jos règla de moderacion", + "name": "Nom", + "uploads": "Mandadís" + }, + "moderationRule": "Òc" + } } }, "DomainsTable": { @@ -2266,6 +2338,16 @@ "label": "Tirar de la lista de las autorizacions" } }, + "empty": { + "noPods": "Cap de podcast pas trobat" + }, + "label": { + "inList": "Es present dins la lista d’autorizacion", + "search": "Recercar" + }, + "link": { + "list": "Aqueste domeni es present dins vòstra lista d’autorizacion" + }, "option": { "all": "Tot", "no": "Non", @@ -2279,76 +2361,32 @@ }, "label": "Òrdre" }, - "table": { - "domain": { - "header": { - "firstSeen": "Primièra aparicion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "moderationRule": "Jos règla de moderacion", - "users": "Utilizaires" - }, - "moderationRule": "Òc" - } - }, - "label": { - "inList": "Es present dins la lista d’autorizacion", - "search": "Recercar" - }, - "empty": { - "noPods": "Cap de podcast pas trobat" + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" }, "placeholder": { "search": "Recercar per nom…" }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - }, - "link": { - "list": "Aqueste domeni es present dins vòstra lista d’autorizacion" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domenu", "firstSeen": "Primièra aparicion", - "lastSeen": "Darrièra visita", - "name": "Nom", "moderationRule": "Jos règla de moderacion", - "uploads": "Mandadís" + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "users": "Utilizaires" }, "moderationRule": "Òc" } - }, - "link": { - "local": "Compte local" - }, - "action": { - "purge": { - "label": "Purgar" - } - }, - "label": { - "search": "Recercar" - }, - "placeholder": { - "search": "Recercar per domeni, nom d’utilizaire, bio…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Modificar" + }, + "header": { + "rule": "Règla" + }, "label": { "blockAll": "O blocar tot", "muteActivity": "Amagar l’activitat", @@ -2356,15 +2394,49 @@ "reason": "Rason", "rejectMedia": "Regetar lo mèdia" }, - "button": { - "edit": "Modificar" - }, "status": { "enabled": "Activada", "paused": "En pausa" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la règla de moderacion", + "create": "Crear", + "delete": "Suprimir", + "update": "Actualizar" }, "header": { - "rule": "Règla" + "addRule": "Ajustar una nòva règla de moderacion", + "editRule": "Actualizar las règlas de moderacion", + "failure": "Error en crear la règla" + }, + "label": { + "blockAll": "O blocar tot", + "customizeRule": "O personalizatz aquesta règla", + "policyDisabled": "Desactivada", + "policyEnabled": "Activada", + "policyReason": "Rason", + "rejectMedia": "Regetar lo mèdia", + "silenceActivity": "Amagar l’activitat", + "silenceNotifications": "Amagar las notificacions" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta accion se pòt pas anullar" + }, + "header": "Suprimir aquesta règla de moderacion ?" + } + }, + "tooltip": { + "blockAll": "O blocar tot d’aqueste compte estant. Empacharà totas interaccion amb l’entitat e purgarà lo contengut ligat (pistas, bibliotèca, seguiments, etc.)", + "isActive": "Utilizatz aqueste paramètre per activar/desactivar temporàriament la règla sens la suprimir complètament.", + "rejectMedia": "Telecargar pas cap de mèdia (àudio, album, tampa, avatar de compte…) d’aqueste compte o domeni. Purgarà tanben lo contengut existent.", + "silenceActivity": "Amagar lo contengut del compte o del demoni, levat pels seguidors.", + "silenceNotifications": "Empacha lo compte o domeni de far veire de notificacions, levat pels seguidors.", + "summary": "Explicatz perque aplicatz aquesta politica : vos ajudarà a vos remembrar perque apondèretz aquesta règla. Segon la configuracion de l’instància, aquò pòt èsser mostrat publicament per ajudar als utilizaires a comprendre qualas règlas de moderacion son en plaça." } }, "InstancePolicyModal": { @@ -2374,161 +2446,129 @@ }, "modal": { "manage": { - "header": "Gerir las règlas de moderacion per { obj }", "content": { "warning": "Aquesta entitat es somesa a de règlas de moderacion especificadas" - } + }, + "header": "Gerir las règlas de moderacion per {obj}" } } }, + "NoteForm": { + "button": { + "add": "Ajustar una nòta" + }, + "header": { + "failure": "Error en enviar la nòta" + }, + "placeholder": { + "summary": "Descrivètz quinas accions son estadas presas, o tota autra mesa a jorn ligada…" + } + }, "NotesThread": { "button": { "delete": "Suprimir" }, "modal": { "delete": { - "header": "Suprimir aqueste nòta ?", "content": { "warning": "La nòta serà tirada. Aquesta accion es irreversibla." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Compte", - "albums": "Albums", - "creationDate": "Data de creacion", - "domain": "Domenu", - "name": "Nom", - "tracks": "Pistas" + }, + "header": "Suprimir aqueste nòta ?" } } }, - "option": { - "all": "Tot" - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" + "ReportCard": { + "button": { + "confirmDelete": "Suprimir", + "delete": "Escafar l’objècte senhalat", + "resolve": "Resòlver", + "unresolve": "Pas resolgut" }, - "label": "Òrdre" + "header": { + "actions": "Accions", + "message": "Messatge", + "notes": "Nòtas intèrnas", + "reportedObject": "Objècte senhalat" + }, + "link": { + "moderation": "Dobrir dins l’interfàcia de moderacion", + "publicPage": "Veire la pagina publica", + "report": "Senhalar {id}" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquò suprimirà l’objècte ligat amb aqueste senhalament e lo marcarà coma resolgut. Aquesta supression es irreversibla." + }, + "header": "Escafar l’objècte senhalat ?" + } + }, + "notApplicable": "ND", + "table": { + "object": { + "account": "Compte", + "domain": "Domeni", + "local": "Local", + "owner": "Proprietari", + "type": "Tipe" + }, + "report": { + "category": "Categoria", + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "assignedTo": "Atribuit a", + "internalNotes": "Nòtas intèrnas", + "resolutionDate": "Data de resolucion", + "resolved": "Resolgut", + "status": "Estatut", + "unresolved": "Pas resolgut" + } + }, + "warning": { + "objectDeleted": "L’objècte d’aqueste senhalament es estat suprimit." + } }, - "label": { - "category": "Categoria", - "search": "Recercar" - }, - "link": { - "local": "Local", - "moderation": "Dobrir dins l’interfàcia de moderacion" - }, - "placeholder": { - "search": "Recercar per domeni, nom d’utilizaire, compte…" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" + "UserRequestCard": { + "button": { + "approve": "Validar", + "reject": "Regetar" + }, + "header": { + "actions": "Accions", + "notes": "Nòtas intèrnas", + "signup": "Messatge" + }, + "link": { + "request": "Demandar {id}" + }, + "message": { + "signup": "Aqueste utilizaire vòl se marcar a vòstra instància." + }, + "notApplicable": "ND", + "table": { + "request": { + "creationDate": "Data de creacion", + "submittedBy": "Enviat per" + }, + "status": { + "approved": "Validat", + "assignedTo": "Atribuit a", + "internalNotes": "Nòtas intèrnas", + "pending": "En espèra", + "refused": "Regetada", + "status": "Estatut" + } + } } }, "users": { - "UsersTable": { - "table": { - "user": { - "header": { - "accountStatus": "Estat del compte", - "email": "Corrièl", - "lastActivity": "Darrièra activitat", - "permissions": "Autorizacions", - "signup": "Inscripcion", - "status": "Estatut", - "username": "Nom d’utilizaire" - }, - "accountStatus": { - "active": "Actiu", - "inactive": "Actiu" - }, - "status": { - "admin": "Admin", - "regular": "Utilizaire estandard", - "staff": "Membre de la còla" - } - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Direccion" - }, - "label": "Òrdre" - }, - "permission": { - "library": "Bibliotèca", - "moderation": "Moderacion", - "settings": "Paramètres" - }, - "notApplicable": "ND", - "placeholder": { - "search": "Recercar per nom d’utilizaire, corrièl, nom…" - }, - "pagination": { - "results": "Afichatge d’un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, - "InvitationsTable": { - "option": { - "all": "Tot", - "expired": "Expirada/utilizada", - "open": "Accès liure" - }, - "table": { - "invitation": { - "header": { - "code": "Còdi", - "creationDate": "Data de creacion", - "expirationDate": "Data d’expiracion", - "owner": "Proprietari", - "status": "Estatut" - } - } - }, - "action": { - "delete": "Suprimir" - }, - "label": { - "expired": "Expirada", - "unused": "Pas utilizat", - "search": "Recercar", - "status": "Estatut", - "used": "Utilizat" - }, - "ordering": { - "label": "Òrdre" - }, - "placeholder": { - "search": "Recercar per nom d’utilizaire, corrièl, còdi…" - }, - "pagination": { - "results": "Afichatge d’un resultat | Afichatge dels resultats { start } fins a { end } de { total }" - } - }, "InvitationForm": { "button": { "clear": "Escafar", "new": "Obténer una novèla invitacion" }, - "table": { - "invitation": { - "header": { - "code": "Còdi", - "link": "Ligam de partatge" - } - } - }, "header": { "failure": "Error en crear l’invitacion" }, @@ -2537,523 +2577,59 @@ }, "placeholder": { "invitation": "Daissar void per obténer un còdi aleatòri" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Accions", - "label": "Nom del camp", - "type": "Tipe de camp", - "required": "Obligatòri" - }, - "type": { - "long": "Tèxt grand", - "short": "Tèxt cort" - }, - "required": { - "false": "Non", - "true": "Òc" - } - } - }, - "button": { - "add": "Ajustar un camp novèl", - "edit": "Modificar lo formulari", - "preview": "Apercebut del formulari" - }, - "label": { - "additionalField": "Camp addicional", - "additionalFields": "Camps addicionals", - "delete": "Suprimir", - "helpText": "Tèxt d’ajuda", - "moveDown": "Desplaçar enbàs", - "moveUp": "Desplaçar ennaut" - }, - "help": { - "additionalFields": "Camps addicionals pel formulari. Se veson sonque se la validacion de l’inscripcion es activada.", - "helpText": "Un tèxte opcional a afichar a la debuta del formulari d’inscripcion." - } - }, - "SettingsGroup": { - "header": { - "image": "Imatge actual", - "error": "Error en enregistrar los paramètres" - }, - "button": { - "save": "Enregistrar" - }, - "message": { - "success": "Paramètres corrèctament modificats." - } - } - }, - "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Tot" - }, - "label": { - "category": "Categoria" - } - }, - "ReportModal": { - "header": { - "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", - "modal": "Volètz senhalar aqueste objècte ?", - "submissionFailure": "Error en enviar lo senhalament" - }, - "button": { - "cancel": "Anullar", - "submit": "Enviar" - }, - "label": { - "email": "Corrièl", - "forwardToDomain": "Transferir a { domain}", - "message": "Messatge" - }, - "description": { - "forwardToDomain": "Transferir una còpi anonimizada del senhalement al servidor qu’alerga aqueste element.", - "message": "Utilizatz aqueste camp per provesir mai de contèxt al moderator que gerirà lo senhalament.", - "modal": "Utilizatz aqueste formulari per enviar un senhalament als nòstres moderators.", - "email": "Utilizarem aquesta adreça se nos fa besonh vos contactar tocant aqueste senhalament." - }, - "message": { - "submissionSuccess": "Senhalament corrèctament enviat, mercés" - } - }, - "FilterModal": { - "button": { - "cancel": "Anullar", - "hide": "Amagar lo contengut" - }, - "message": { - "success": "Filtre de contengut corrèctament ajustat" - }, - "header": { - "modal": "Volètz rescondre lo contengut de l’artista « { name } » ?", - "failure": "Error en crear lo filtre" - }, - "warning": { - "createFilter": { - "listItem2": "Dins lo widget « Ajustada i a res »", - "listItem3": "Dins las listas d’artistas e d’albums", - "listItem1": "Dins los favorits e istorics d’escota d’autres utilizaires", - "listItem4": "Dins las suggestions de ràdios", - "listIntro": "Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a aqueste artista :" - } - }, - "help": { - "createFilter": "Podètz gerir e actualizar los filtres quand volgatz dels paramètres de compte estant." - } - } - }, - "federation": { - "FetchButton": { - "description": { - "failure": "Una error s’es producha en actualizar las donadas :", - "success": "Las donadas son estadas actualizadas corrèctament del servidors alonhat estant.", - "pending": "La requèsta d’actualizacion es pas estada tractada a temps per nòstre servidor. Serà executada mai tard.", - "skipped": "Lo servidor alonhat a respondut, mas las donadas enviadas son pas suportadas er Funkwhale." - }, - "table": { - "error": { - "value": { - "httpError": "Una error HTTP s’es producha en contactar lo servidor alonhat", - "invalidAttributesError": "Las donadas tornadas pel servidor alonhat an d’atributs mancants o invalids", - "connectionError": "Connexion impossibla al servidor alonhat", - "httpStatus": "Lo servidor alonhat a respondut amb lo còdi HTTP { status }", - "timeoutError": "Lo servidor alonhat a tròp tardat a respondre", - "invalidJsonError": "Lo servidor alonhat a respondut amb de donadas JSON o JSON-LD invalidas", - "unknownError": "Error desconeguda" - }, - "label": { - "detail": "Detalhs de l’error", - "type": "Tip d’error" - } - } - }, - "button": { - "close": "Tampar", - "reload": "Tampar e tornar cargar la pagina" - }, - "header": { - "saveFailure": "Error en enregistrar los paramètres", - "failure": "Error en actualizar", - "pending": "Actualizar las info del nos", - "success": "Actualizacion reüssida", - "skipped": "L’actualizada es estada passada", - "refresh": "Actualizacion de l’objècte del servidor alonhat estant…" - }, - "loader": { - "fetchRequest": "Demanda de recuperacion…", - "awaitingResult": "En espèra dels resultats…" - } - }, - "LibraryWidget": { - "empty": { - "noMatch": "Cap de bibliotèca correspondenta." - }, - "button": { - "showMore": "Ne veire mai" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Acorchis del lector àudio", - "clearQueue": "Voidar la fila", - "decreaseVolume": "Reduire lo volum", - "expandQueue": "Espandir fila/vista del lector", - "increaseVolume": "Aumentar lo volum", - "playPause": "Pausar/Legir la pista actuala", - "playNext": "Legir la pista seguenta", - "playPrevious": "Legir la pista precedenta", - "seekBack30": "Recular de 30s", - "seekBack5": "Recular de 5s", - "seekForward30": "Avançar de 30s", - "seekForward5": "Avançar de 5s", - "shuffleQueue": "Mesclar la fila", - "toggleFavorite": "Ajustar/Tirar dels favorits", - "toggleMute": "Copar/Restablir lo son", - "toggleLoop": "Cambiar lo tipe de lectura de la lista" - }, - "general": { - "focus": "Anar a la recèrca", - "label": "Acrochis generals", - "show": "Mostrar los acorchis clavièr disponibles", - "unfocus": "Sortir de la recèrca" - } - }, - "button": { - "close": "Tampar" - }, - "header": { - "modal": "Acorchis clavièr" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anullar", - "submit": "Validar" - }, - "header": { - "chooseInstance": "Causissètz vòstra instància", - "failure": "Connexion impossibla a l’URL donada", - "suggestions": "Suggestions" - }, - "label": { - "url": "URL de l’instància" - }, - "help": { - "notFunkwhaleServer": "L’adreça donada es pas un servidor Funkwhale", - "serverDown": "Se pòt que lo servidor siá atudat", - "selectPod": "Per contunhar, seleccionatz una instància Funkwhale que volètz vos i connectar. Picatz l’adreça dirèctament, o seleccionatz-ne una dins las en suggestion." - }, - "message": { - "newUrl": "Utilizatz una instància Funkwhale a { url }" - } - }, - "Queue": { - "button": { - "clear": "Escafar", - "close": "Tampar", - "stopRadio": "Arrestar la ràdio" - }, - "label": { - "duration": "Durada", - "addArtistContentFilter": "Amagar lo contengut d’aqueste artista…", - "next": "Pista seguenta", - "pause": "Pausa", - "play": "Legir", - "previous": "Pista precedenta", - "queue": "Fila", - "remove": "Tirar", - "restart": "Recomençar la pista" - }, - "message": { - "radio": "Las novèlas pistas seràn automaticament ajustadas aquí.", - "automaticPlay": "La pista seguenta serà legida automaticament dins una estona…" - }, - "header": { - "failure": "La pista pòt pas èsser cargada", - "radio": "Escotatz una ràdio" - }, - "meta": { - "queuePosition": "Pista ({ index } sus { length })" - }, - "warning": { - "connectivity": "Poiriá arribar qu’ajatz de problèma de connexion." - } - }, - "forms": { - "PasswordInput": { - "button": { - "copy": "Copiar" - }, - "title": "Mostrar/amagar lo senhal", - "message": { - "copy": "Tèxte copiat al quichapapièr !" - } - } - }, - "radios": { - "Card": { - "button": { - "edit": "Modificar" - } - }, - "Button": { - "startRadio": "Legir la pista", - "stopRadio": "Arrestar la ràdio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Error en recuperar l’objècte" - }, - "button": { - "fediverse": "Fedivers", - "rss": "RSS", - "search": "Recercar" - }, - "label": { - "fediverse": { - "fieldLabel": "Objècte del Fedivers", - "title": "S’abonar a un podcast albergat sul fediverse" - }, - "rss": { - "fieldPlaceholder": "https://siteweb.exemple/rss.xml", - "fieldLabel": "Emplaçament del flux RSS", - "title": "S’abonar al flux RSS d’un podcast" - } - }, - "warning": { - "unsupported": "Aqueste tipe d’objècte es pas encara compatible" - }, - "error": { - "fetchFailed": "Se pòt pas recuperar aqueste objècte" - }, - "description": { - "fediverse": "Utilizatz aqueste formulari per vos abonar a una cadena endacòm sul fediverse.", - "rss": "Utilizatz aqueste formulari per vos abonar a un flux RSS via una adreça URL." - } - }, - "PageNotFound": { - "link": { - "home": "Tornar a l’acuèlh" - }, - "title": "Pagina pas trobada", - "header": { - "pageNotFound": "Pagina pas trobada !" - }, - "message": { - "pageNotFound": "O planhèm, la pagina demandada existís pas :" - } - }, - "vui": { - "Pagination": { - "next": "Pagina seguenta", - "label": "Paginacion", - "previous": "Pagina precedenta" - } - }, - "tags": { - "List": { - "button": { - "more": "Mostrar 1 etiqueta de mai | Mostrar { n } etiquetas de mai" - } - } - } - }, - "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } episòdi | { n } episòdis", - "listenings": "{ n } escota | { n } escotas", - "subscribers": "{ n } abonat | { n } abonats", - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "channelEpisodes": "Totes los episòdis", - "mirrored": "miralh de { domain }", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "channelOverview": "Vista d’ensemble", - "channelTracks": "Pistas", - "domainView": "Veire sus { domain }" - }, - "header": { - "artistChannel": "Cadena de l’artista", - "podcastChannel": "Cadena del podcast" - }, - "button": { - "cancel": "Anullar", - "confirm": "Suprimir", - "delete": "Suprimir…", - "edit": "Modificar…", - "embed": "Integrar", - "play": "Legir", - "updateChannel": "Actualizar la cadena", - "upload": "Enviar" - }, - "title": "Cadena", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Copiatz-pegatz l’URL seguenta dins vòstra aplicacion de podcast preferida :" - }, - "header": "S’abonar via RSS" - }, - "fediverse": { - "content": { - "help": "S’utilizatz Mastodon o una autra aplicacion del fediverse, podètz tanben vos abonar a aqueste compte :" - }, - "header": "S’abonar sul fediverse" - }, - "funkwhale": { - "header": "S’abonar a Funkwhale" - }, - "header": "S’abonar a aquesta cadena" }, - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." - } - }, - "embed": { - "header": "Integrar aquesta pista a vòstre site web" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Ajustar nòu", - "erroredUploads": "Veire los mandadisses en error", - "skippedUploads": "Veire los mandadisses sautats" - }, - "header": { - "albums": "Albums", - "latestEpisodes": "Darrièrs episòdis", - "latestTracks": "Darrièras pistas", - "series": "Serias", - "uploadsFailure": "Impossible de publicar unes mandadisses", - "uploadsProcessing": "Tractament dels mandadisses", - "uploadsSuccess": "Mandadisses corrèctament publicats" - }, - "meta": { - "progress": "Bibliotèca e mandadís :" - }, - "message": { - "processing": "Funkwhale tracta vòstres mandadisses e seràn lèu publicats." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Ajustar nòu" - }, - "button": { - "cancel": "Anullar", - "subscribe": "S’abonar" - }, - "placeholder": { - "search": "Filtrar per nom…" - }, - "title": "Cadenas seguidas", - "modal": { - "subscription": { - "header": "Inscripcion" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "details": "Detalhs de la bibliotèca" - }, - "label": { - "size": "Talha totala dels fichièrs d’aquesta bibliotèca" - }, - "button": { - "upload": "Mandadís" - } - }, - "Quota": { - "label": { - "currentUsage": "{ count } utilizat sus { total } autorizat", - "errored": "Fichièrs amb errors", - "pending": "Fichièrs en espèra", - "skipped": "Fichièrs ignorats" - }, - "header": { - "currentUsage": "Utilizacion actuala" - }, - "loading": { - "currentUsage": "Cargament de l’utilizacion de las donadas…" - }, - "button": { - "purge": "Purgar" - }, - "modal": { - "purgeErrored": { - "header": "Purgar los fichièrs amb errors ?", - "content": { - "description": "Las pistas enviadas mas pas complètament tractadas pel servidor seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." - } - }, - "purgePending": { - "header": "Purgar los fichièrs en espèra ?", - "content": { - "description": "Las pistas importadas que lo servidor a pas encara tractadas seràn complètament suprimidas. Lo quòta correspondent vos serà tornat." - } - }, - "purgeSkipped": { - "header": "Purgar los fichièrs ignorats ?", - "content": { - "description": "Las pistas enviadas mas ignoradas pendent lo processús d’importacion per mantun rasons seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." - } - } - }, - "link": { - "viewFiles": "Veire los fichièrs" - } - }, - "FilesTable": { "table": { - "file": { + "invitation": { "header": { - "album": "Album", - "artist": "Artista", - "duration": "Durada", - "importStatus": "Estatut de l’import", - "size": "Talha", - "title": "Títol", - "uploadDate": "Data de mandadís" + "code": "Còdi", + "link": "Ligam de partatge" } } + } + }, + "InvitationsTable": { + "action": { + "delete": "Suprimir" + }, + "label": { + "expired": "Expirada", + "search": "Recercar", + "status": "Estatut", + "unused": "Pas utilizat", + "used": "Utilizat" }, "option": { - "status": { - "all": "Tot", - "draft": "Borrolhon", - "failed": "Fracàs", - "finished": "Acabat", - "pending": "En espèra", - "skipped": "Ignorat" - } + "all": "Tot", + "expired": "Expirada/utilizada", + "open": "Accès liure" }, + "ordering": { + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge d’un resultat | Afichatge dels resultats {start} fins a {end} de {total}" + }, + "placeholder": { + "search": "Recercar per nom d’utilizaire, corrièl, còdi…" + }, + "table": { + "invitation": { + "header": { + "code": "Còdi", + "creationDate": "Data de creacion", + "expirationDate": "Data d’expiracion", + "owner": "Proprietari", + "status": "Estatut", + "user": "Utilizaire" + } + } + } + }, + "UsersTable": { + "label": { + "search": "Recercar" + }, + "notApplicable": "ND", "ordering": { "direction": { "ascending": "Ascendent", @@ -3062,397 +2638,554 @@ }, "label": "Òrdre" }, - "action": { - "delete": "Suprimir", - "restartImport": "Relançar l’import" + "pagination": { + "results": "Afichatge d’un resultat | Afichatge dels resultats {start} fins a {end} de {total}" }, - "label": { - "importStatus": "Estatut de l’import", - "search": "Recercar" - }, - "notApplicable": "ND", - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotèca" + "permission": { + "library": "Bibliotèca", + "moderation": "Moderacion", + "settings": "Paramètres" }, "placeholder": { - "search": "Recercar per títol, artista, album…" + "search": "Recercar per nom d’utilizaire, corrièl, nom…" }, - "button": { - "showStatus": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aquesta pista" - }, - "pagination": { - "results": "Afichatge dels resultats { start }-{ end } sus { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Crear una nòva bibliotèca" - }, - "loading": { - "libraries": "Cargament de las bibliotècas…" - }, - "empty": { - "noLibrary": "Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." - }, - "header": { - "libraries": "Mas bibliotècas" - } - }, - "Form": { - "button": { - "create": "Crear una bibliotèca", - "delete": "Suprimir", - "confirm": "Suprimir la bibliotèca", - "update": "Actualizar la bibliotèca" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotèca ?", - "content": { - "warning": "Aquesta bibliotèca e totas sas pistas seràn suprimidas. Aquesta accion se pòt pas anullar." + "table": { + "user": { + "accountStatus": { + "active": "Actiu", + "inactive": "Actiu" + }, + "header": { + "accountStatus": "Estat del compte", + "email": "Corrièl", + "lastActivity": "Darrièra activitat", + "permissions": "Autorizacions", + "signup": "Inscripcion", + "status": "Estatut", + "username": "Nom d’utilizaire" + }, + "status": { + "admin": "Admin", + "regular": "Utilizaire estandard", + "staff": "Membre de la còla" } } - }, - "label": { - "description": "Descripcion", - "name": "Nom", - "visibility": "Visibilitat" - }, - "header": { - "failure": "Error" - }, - "description": { - "library": "Las bibliotècas vos ajudan a organizar e partejar vòstras colleccions de musica. Podètz enviar vòstra pròpria collecion musicala a Funkwhale e la partejar amb vòstres amics e vòstra familha.", - "visibility": "Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importància de sa visibilitat." - }, - "message": { - "libraryCreated": "Bibliotèca creada", - "libraryDeleted": "Bibliotèca suprimida", - "libraryUpdated": "Bibliotèca actualizada" - }, - "placeholder": { - "name": "Ma bibliotèca tròp crana", - "description": "Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà." } } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } pista | { n } pistas", - "failedTracks": "Pistas en error :", - "lastUpdate": "Darrièra actualizacion :" - }, - "modal": { - "unfollow": { - "content": { - "warning": "En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." - }, - "header": "Quitar de seguir aquesta bibliotèca ?" - } - }, - "button": { - "cancel": "Anullar lad emanda d’abonament", - "follow": "Seguir", - "pending": "Abonament en espèra de validacion", - "unfollow": "Quitar de seguir" - }, - "link": { - "scanDetails": "Detalhs", - "scan": "Explorar ara" - }, - "label": { - "scanFailure": "Error en explorant", - "scanPending": "Analisi en espèra", - "scanSuccess": "Explorat", - "scanPartialSuccess": "Explorada amb d’errors", - "scanProgress": "Exploracion… ({ progress }%)", - "sharingLink": "Ligam de partatge" - }, - "message": { - "scanLaunched": "Exploracion lançada", - "scanSkipped": "Exploracion sautada (la darrièra es tròp recenta)" - }, - "tooltip": { - "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", - "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" - } - }, - "ScanForm": { - "header": { - "failure": "Error en recuperar la bibliotèca alonhada" - }, - "placeholder": { - "url": "Picatz l’URL d’una bibliotèca" - }, - "label": { - "search": "Cercar una bibliotèca alonhada" - }, - "button": { - "submit": "Enviar la recèrca" - } - }, - "Home": { - "header": { - "knownLibraries": "Bibliotècas conegudas", - "remoteLibraries": "Bibliotècas alonhadas" - }, - "loading": { - "remoteLibraries": "Cargament de las bibliotècas alonhadas…" - }, - "button": { - "refresh": "Actualizar" - }, - "description": { - "remoteLibraries": "Las bibliotècas alonhadas apertenon a d’autres utilizaires del malhum. I podètz accedir tant que sián publicas o qu’ajatz l’autorizacion." - } - } - }, - "Home": { - "title": "Ajustar e gerir lo contengut", - "description": { - "follow": "Podètz seguir las bibliotècas d’autres utilizaires per accedir a de nòvas musicas. Las bibliotècas publicas pòdon èsser seguidas còp sec, mentre qu’una bibliotèca privada demanda una aprovacion de sus proprietaris.", - "channel": { - "1": "Se sètz musician o creator de podcasts, las cadenas son fachas per vos !", - "2": "Partejatz vòstre trabalh publicament e obtenètz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." - }, - "upload": "Enviatz vòstra bibliotèca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vòstres amics e familha." - }, - "header": { - "follow": "Seguir de bibliotècas alonhadas", - "channel": "Publicar vòstre trabalh dins una cadena", - "upload": "Enviar de contengut tèrces a la bibliotèca" - }, - "button": { - "start": "Començar" - }, - "help": { - "uploadQuota": "Aquesta instància provesís fins a {quota} d’espaci per cada utilizaire." - } - }, - "Base": { - "title": "Ajustar de contengut", - "link": { - "libraries": "Bibliotècas", - "tracks": "Pistas" - }, - "menu": { - "secondary": "Menú segondari" - } } }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } pista | { n } pistas" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "owner": "Lo proprietari es { username }", - "tracks": "Pistas", - "domain": "Veire sus { domain }" - }, - "button": { - "edit": "Modificar", - "upload": "Mandadís" - }, - "title": "Bibliotèca", - "label": { - "private": "Privada", - "public": "Public", - "instance": "Restrenches", - "sharingLink": "Ligam de partatge" - }, - "description": { - "sharingLink": "Partejatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a vòstra bibliotèca en lo copiar-pegar dins la barra de recèrca de lor instància." - }, - "tooltip": { - "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", - "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament", - "instance": "Aquesta bibliotèca es restrencha als utilizaires d’aquesta instància solament" - } - }, - "Edit": { - "button": { - "accept": "Acceptar", - "reject": "Regetar" - }, - "table": { - "action": { - "status": { - "accepted": "Acceptat", - "pending": "En espèra de validacion", - "rejected": "Regetat" - }, - "header": { - "action": "Accion", - "date": "Data", - "status": "Estatut", - "user": "Utilizaire" - } - } - }, - "header": { - "followers": "Seguidors", - "libraryContents": "Contengut de la bibliotèca" - }, - "loading": { - "followers": "Cargament dels seguidors…" - }, - "empty": { - "noFollowers": "Degun sèc pas aquesta bibliotèca" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - }, - "DetailOverview": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - }, - "DetailTracks": { - "empty": { - "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !", - "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Perfil de { username }", - "link": { - "activity": "Activitat", - "moderation": "Dobrir dins l’interfàcia de moderacion", - "overview": "Vista d’ensemble", - "domainView": "Veire sus { domain }" - }, - "label": { - "self": "Sètz vos !" - } - }, - "PasswordReset": { - "label": { - "email": "Adreça electronica del compte" - }, - "button": { - "requestReset": "Demandar un nòu senhal" - }, - "link": { - "back": "Tornar a la pagina de connexion" - }, - "placeholder": { - "email": "Picatz l’adreça de corrièl ligada a vòstre compte" - }, - "header": { - "failure": "Error en demandar un novèl senhal", - "reset": "Reïnicializar lo senhal" - }, - "title": "Reïnicializar lo senhal", - "help": { - "form": "Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a vòstra adreça indicada contenent las consignas per reïnicializar lo senhal." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Ajustar nòu" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Cadena de l’artista" - }, - "header": "Crear una cadena", - "podcast": { - "header": "Cadena del podcast" - } - } - }, + "moderation": { + "FilterModal": { "button": { "cancel": "Anullar", - "createChannel": "Crear una cadena", - "next": "Etapa seguenta", - "previous": "Etapa precedenta" + "hide": "Amagar lo contengut" }, "header": { - "channels": "Cadenas", - "sharedLibraries": "Aqueste utilizaire partegèt las bibliotècas seguentas", - "libraries": "Bibliotècas de l’utilizaire" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Tornar a la pagina de connexion", - "login": "Contunhar cap a la pagina de connexion" + "failure": "Error en crear lo filtre", + "modal": "Volètz rescondre lo contengut de l’artista « {name} » ?" }, - "title": "Cambiar lo senhal", - "header": { - "failure": "Error en cambiar lo senhal", - "success": "Senhal corrèctament modificat" + "help": { + "createFilter": "Podètz gerir e actualizar los filtres quand volgatz dels paramètres de compte estant." }, "message": { - "requestSent": "Se l’adreça qu’avètz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sètz per recebre un messatge amb las consignas de reïnicializacion d’aquí una estona.", - "success": "Vòstre senhal es corrèctament cambiat." + "success": "Filtre de contengut corrèctament ajustat" }, + "warning": { + "createFilter": { + "listIntro": "Veiretz pas mai las pistas, albums e las activitats d’utilizaires ligadas a aqueste artista :", + "listItem1": "Dins los favorits e istorics d’escota d’autres utilizaires", + "listItem2": "Dins lo widget « Ajustada i a res »", + "listItem3": "Dins las listas d’artistas e d’albums", + "listItem4": "Dins las suggestions de ràdios" + } + } + }, + "ReportCategoryDropdown": { "label": { - "newPassword": "Nòu senhal" + "category": "Categoria" }, + "option": { + "all": "Tot" + } + }, + "ReportModal": { "button": { - "update": "Actualizar vòstre senhal" - } - }, - "EmailConfirm": { - "title": "Confirmar vòstra adreça electronica", - "label": { - "confirmationCode": "Còdi de confirmacion" + "cancel": "Anullar", + "submit": "Enviar" + }, + "description": { + "email": "Utilizarem aquesta adreça se nos fa besonh vos contactar tocant aqueste senhalament.", + "forwardToDomain": "Transferir una còpi anonimizada del senhalement al servidor qu’alerga aqueste element.", + "message": "Utilizatz aqueste camp per provesir mai de contèxt al moderator que gerirà lo senhalament.", + "modal": "Utilizatz aqueste formulari per enviar un senhalament als nòstres moderators" }, "header": { - "failure": "Confirmacion vòstra adreça electronica impossibla", - "success": "Corrièl confirmat" + "disabled": "Los senhalaments anonims son desactivats, marcatz-vos per realizar un senhalament.", + "modal": "Volètz senhalar aqueste objècte ?", + "submissionFailure": "Error en enviar lo senhalament" }, - "link": { - "login": "Contunhar cap a la pagina de connexion", - "back": "Tornar a la pagina de connexion" + "label": { + "email": "Corrièl", + "forwardToDomain": "Transferir a {domain}", + "message": "Messatge" }, "message": { - "success": "Podètz ara utilizar lo servici sens cap de limitacions." - } - }, - "Signup": { - "header": { - "createAccount": "Crear un compte funkwhale" - }, - "title": "Inscripcion" - }, - "Login": { - "title": "Connexion", - "header": { - "login": "Connectatz-vos a vòstre compte Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Connexion…" - } - }, - "Plugins": { - "title": "Gerir los moduls" - }, - "ProfileActivity": { - "header": { - "playlists": "Listas de lectura", - "recentlyFavorited": "Ajustadas als favorits i a res", - "recentlyListened": "Escotadas i a res" + "submissionSuccess": "Senhalament corrèctament enviat, mercés" } } }, + "notifications": { + "NotificationRow": { + "button": { + "approve": "Validar", + "markRead": "Marcar coma legidas", + "markUnread": "Marcar coma pas legidas", + "reject": "Regetar" + }, + "message": { + "libraryAcceptFollow": "{username} acceptèt vòstra demanda de seguiment de la bibliotèca « {library} »", + "libraryFollow": "{username} seguís vòstra bibliotèca « {library} »", + "libraryPendingFollow": "{username} vòl seguir vòstra bibliotèca « {library} »" + } + } + }, + "playlists": { + "Card": { + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "Editor": { + "button": { + "addDuplicate": "Ajustar pr’aquò", + "clear": "Escafar la lista de lectura", + "copy": "Copiar las pistas de la fila a la lista de lectura", + "insertFromQueue": "Inserir de la fila estant ({n} pista) | Inserir de la fila estant ({n} pistas)" + }, + "error": { + "sync": "Una error s’es producha en enregistrar vòstras modificacions" + }, + "header": { + "editor": "Editor de lista de lectura" + }, + "help": { + "reorder": "Lisatz las linhas per triar las pistas de la lista de lectura" + }, + "loading": { + "sync": "Sincronizacion dels cambiaments amb lo servidor…" + }, + "message": { + "sync": "Cambiament sincronizat amb lo servidor" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "Aquò escafarà totas las pistas de la lista de lectura e poirà pas èsser anullat." + }, + "header": "Volètz voidar la lista de lectura « {playlist} » ?" + } + }, + "warning": { + "duplicate": "Unas pistas de la fila son ja dins aquesta lista de lectura :" + } + }, + "Form": { + "button": { + "create": "Crear la lista de lectura", + "update": "Actualizar la lista de lectura" + }, + "header": { + "createFailure": "Lista de lectura creada", + "createPlaylist": "Crear una nòva lista de lectura", + "createSuccess": "Lista de lectura creada", + "updateSuccess": "Lista de lectura actualizada" + }, + "label": { + "name": "Nom de la lista de lectura", + "visibility": "Visibilitat de la lista de lectura" + }, + "placeholder": { + "name": "Ma lista de lectura tròp crana" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Ajustar pr’aquò", + "addToPlaylist": "Ajustar a aquesta lista de lectura", + "addTrack": "Ajustar una pista", + "cancel": "Anullar", + "edit": "Modificar" + }, + "empty": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + }, + "header": { + "addFailure": "Podèm pas ajustar aquesta pista a una lista de lectura", + "addToPlaylist": "Ajustar a la lista de lectura", + "available": "Listas de lectura disponiblas", + "manage": "Gerir las listas de lectura", + "noResults": "Cap de resultat correspondent a aqueste filtre", + "track": "{title}, per {artist}" + }, + "label": { + "filter": "Filtrar" + }, + "placeholder": { + "filterPlaylist": "Escrivètz lo nom de lista de lectura" + }, + "table": { + "edit": { + "header": { + "edit": "Modificar", + "lastModification": "Darrièra modificacion", + "name": "Nom", + "tracks": "Pistas" + } + } + }, + "warning": { + "duplicate": "{ 0 } es ja dins { 1 }." + } + }, + "TrackPlaylistIcon": { + "button": { + "add": "Ajustar a la lista de lectura…" + } + }, + "Widget": { + "button": { + "create": "Crear una lista de lectura", + "more": "Ne veire mai" + }, + "placeholder": { + "noPlaylists": "Cap de lista de lectura creada pel moment" + } + } + }, + "radios": { + "Button": { + "startRadio": "Legir la pista", + "stopRadio": "Arrestar la ràdio" + }, + "Card": { + "button": { + "edit": "Modificar" + } + } + }, + "tags": { + "List": { + "button": { + "more": "Mostrar 1 etiqueta de mai | Mostrar {n} etiquetas de mai" + } + } + }, + "vui": { + "Pagination": { + "label": "Paginacion", + "next": "Pagina seguenta", + "previous": "Pagina precedenta" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "{n} pista ajustada a la fila | {n} pistas ajustadas a la fila" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Musica", + "other": "Autre", + "podcast": "Podcast" + }, + "label": "Categoria del contengut" + }, + "importStatus": { + "choices": { + "draft": { + "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment", + "label": "Borrolhon" + }, + "errored": { + "help": "Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es corrèctament etiquetada", + "label": "Perturbat" + }, + "finished": { + "help": "Importat", + "label": "Acabat" + }, + "pending": { + "help": "La pista es enviada mas pas encara tractada pel servidor", + "label": "En espèra" + }, + "skipped": { + "help": "La pista ja presenta dins una de vòstras bibliotècas", + "label": "Ignorat" + } + }, + "label": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste mandadís" + }, + "privacyLevel": { + "choices": { + "instance": "Lo monde d’aquesta instància", + "private": "Degun fòra ieu", + "public": "Tot lo monde, per totas las instàncias" + }, + "help": "Determinatz lo nivèl de visibilitat de vòstra activitat", + "label": "Visibilitat de l’activitat", + "shortChoices": { + "instance": "Instància", + "private": "Privat", + "public": "Tot lo monde" + } + }, + "reportType": { + "choices": { + "illegalContent": "Contengut illegal", + "invalidMetadata": "Metadonada invalida", + "offensiveContent": "Contengut ofensiu", + "other": "Autre", + "takedownRequest": "Demanda de retrait" + }, + "label": "Categoria" + }, + "summary": { + "label": "Bio" + } + }, + "filters": { + "accessedDate": "Data d’accès", + "albumTitle": "Nom de l’album", + "artistName": "Nom de l’artista", + "bitrate": "Debit", + "creationDate": "Data de creacion", + "dateJoined": "Data d’inscripcion", + "domain": "Domenin", + "duration": "Durada", + "expirationDate": "Data d’expiracion", + "firstSeen": "Data de primièra aparicion", + "followers": "Seguidors", + "itemsCount": "Elements", + "lastActivity": "Darrièra activitat", + "lastSeen": "Darrièra visita", + "modificationDate": "Data de modificacion", + "name": "Nom", + "receivedMessages": "Messatges recebuts", + "releaseDate": "Data de sortida", + "size": "Talha", + "trackTitle": "Nom de la pista", + "uploads": "Mandadís", + "username": "Nom d’utilizaire", + "users": "Utilizaires" + }, + "scopes": { + "edits": { + "description": "Accès a las modificacions", + "label": "Modificacions" + }, + "favorites": { + "label": "Favorits" + }, + "filters": { + "description": "Accès als filtre de contengut", + "label": "Filtres de contengut" + }, + "follows": { + "description": "Accès al seguiment", + "label": "Seguir" + }, + "libraries": { + "description": "Accès als fichièrs àudio, bibliotècas, artistas, albums e pistas", + "label": "Bibliotèca e mandadís" + }, + "listenings": { + "description": "Accès a l’istoric d’escota", + "label": "Escotas" + }, + "notifications": { + "description": "Accès a las notificacions", + "label": "Notificacions" + }, + "playlists": { + "description": "Accès a las listas de lectura", + "label": "Listas de lectura" + }, + "profile": { + "description": "Accès als corrièls, nom d’utilizaire e informacions del perfil", + "label": "Perfil" + }, + "radios": { + "description": "Accès a las ràdios", + "label": "Ràdios" + }, + "reports": { + "description": "Accès als senhalaments de moderacion", + "label": "Senhalaments" + }, + "security": { + "description": "Accedir als paramètres de seguretat coma lo senhal e las autorizacions", + "label": "Seguretat" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data de sortida", + "title": "Títol" + }, + "artist": { + "name": "Nom" + }, + "cover": { + "label": "Jaqueta" + }, + "description": { + "label": "Descripcion" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + } + }, + "useReport": { + "account": { + "typeLabel": "Compte" + }, + "album": { + "label": "Senhalar aqueste album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Senhalar aqueste artista…", + "typeLabel": "Artista" + }, + "channel": { + "label": "Senhalar aquesta cadena…", + "typeLabel": "Cadena" + }, + "library": { + "label": "Senhalar aquesta bibliotèca…", + "typeLabel": "Bibliotèca" + }, + "playlist": { + "label": "Senhalar aquesta lista de lectura…", + "typeLabel": "Lista de lectura" + }, + "track": { + "label": "Senhalar aquesta pista…", + "typeLabel": "Pista" + } + }, + "useReportConfigs": { + "account": { + "label": "Compte", + "summary": "Bio" + }, + "album": { + "label": "Album", + "releaseDate": "Data de sortida", + "title": "Títol" + }, + "artist": { + "label": "Artista" + }, + "channel": { + "label": "Cadena" + }, + "creationDate": { + "label": "Data de creacion" + }, + "library": { + "description": "Descripcion", + "label": "Bibliotèca" + }, + "musicbrainzId": { + "label": "MusicBrainz ID" + }, + "name": { + "label": "Nom" + }, + "playlist": { + "label": "Lista de lectura" + }, + "tags": { + "label": "Etiquetas" + }, + "track": { + "copyright": "Copyright", + "label": "Pista", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + }, + "visibility": { + "label": "Visibilitat" + } + } + }, + "useThemeList": { + "darkTheme": "Escur", + "lightTheme": "Clar" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar d’aquí {delay}", + "rateLimitLater": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar mai tard" + }, + "sentry": { + "allow": "Autorizar", + "deny": "Refusar" + }, + "serviceWorker": { + "actions": { + "later": "Mai tard", + "update": "Actualizar" + }, + "newAppVersion": "Una nòva version de l’aplicacion es disponibla." + } + }, + "views": { "Notifications": { + "button": { + "read": "Las marcar totas coma legidas", + "submit": "Comprés !" + }, + "empty": { + "notifications": "Cap de notificacion de mostrar" + }, + "header": { + "funkwhaleSupport": "Vos agrada Funkwhale ?", + "instanceSupport": "Sosténer aqueste pod Funkwhale", + "messages": "Vòstre messatge", + "notifications": "Vòstras notificacions" + }, + "label": { + "reminder": "Me tornar avisar d’aquí :", + "showRead": "Mostrar las notificacions legidas" + }, + "link": { + "donate": "Donar", + "help": "Descobrissètz d’autras biaisses d’ajudar" + }, + "loading": { + "notifications": "Cargament de las notificacions…" + }, + "message": { + "funkwhaleSupport": "Avèm remarcat que sètz aquí dempuèi un brieu. Se Funkwhale vos es util, poiriam utilizar vòstra ajuda per lo far venir encara melhor !" + }, "option": { "delay": { "30": "30 jorns", @@ -3461,584 +3194,63 @@ "never": "Jamai" } }, - "link": { - "help": "Descobrissètz d’autras biaisses d’ajudar", - "donate": "Donar" + "title": "Notificacions" + }, + "Search": { + "button": { + "submit": "Enviar la requèsta" }, "header": { - "funkwhaleSupport": "Vos agrada Funkwhale ?", - "instanceSupport": "Sosténer aqueste pod Funkwhale", - "messages": "Vòstre messatge", - "notifications": "Vòstras notificacions" + "remote": "Cercar un objècte distant", + "rss": "S’abonar al flux RSS d’un podcast", + "search": "Recercar" }, - "button": { - "submit": "Comprés !", - "read": "Las marcar totas coma legidas" - }, - "loading": { - "notifications": "Cargament de las notificacions…" - }, - "empty": { - "notifications": "Cap de notificacion de mostrar." - }, - "title": "Notificacions", "label": { - "reminder": "Me tornar avisar d’aquí :", - "showRead": "Mostrar las notificacions legidas" - }, - "message": { - "funkwhaleSupport": "Avèm remarcat que sètz aquí dempuèi un brieu. Se Funkwhale vos es util, poiriam utilizar vòstra ajuda per lo far venir encara melhor !" + "albums": "Albums", + "artists": "Artistas", + "playlists": "Listas de lectura", + "podcasts": "Podcast", + "radios": "Ràdios", + "series": "Serias", + "tags": "Etiquetas", + "tracks": "Pistas" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nom d’utilizaire", - "loginStatus": { - "disabled": "Desactivada", - "enabled": "Activada", - "label": "Estat del compte" - }, - "displayName": "Nom public", - "email": "Adreça electronica", - "lastActivity": "Darrièra activitat", - "lastChecked": "Darrièra verificacion", - "permissions": "Autorizacions", - "signupDate": "Data d’inscripcion", - "userType": "Tipe" - }, - "audioContent": { - "cachedSize": "Talha del cache", - "megabyte": "Mo", - "totalSize": "Talha totala", - "uploadQuota": "Quòta de mandadís" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotècas enviats", - "emittedMessages": "Messatge emés", - "firstSeen": "Primièra aparicion", - "receivedFollows": "Seguiments de bibliotècas recebuts" - } - }, - "header": { - "accountData": "Donadas del compte", - "activity": "Activitat", - "audioContent": "Contengut àudio", - "localAccount": "Compte local", - "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", - "noPolicy": "Avètz pas cap de règla en plaça per aqueste compte." - }, - "button": { - "addPolicy": "Ajustar una règla de moderacion" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "domain": "Domenu", - "libraries": "Bibliotècas", - "linkedReports": "Senhalaments ligats", - "openProfile": "Dobrir lo perfil", - "remoteProfile": "Dobrir lo perfil alonhat", - "requests": "Demandas", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "tooltip": { - "uploadQuota": "Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz void per emplegar las valors per defaut de l’instància." - }, - "option": { - "permission": { - "library": "Bibliotèca", - "moderation": "Moderacion", - "settings": "Paramètres" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "Base": { - "link": { - "accounts": "Comptes", - "domains": "Domenis", - "reports": "Senhalaments", - "userRequests": "Demandas de l’utilizaire" - }, - "title": "Moderacion", - "menu": { - "secondary": "Menú segondari" - } - }, - "DomainsDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "instanceData": "Donadas de l’instància", - "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", - "noPolicy": "Avètz pas cap de règla en plaça per aqueste domeni." - }, - "button": { - "addPolicy": "Ajustar una règla de moderacion", - "addToAllowList": "Ajustar a la lista d’autorizacion", - "refreshNodeInfo": "Actualizar las info del nos", - "removeFromAllowList": "Tirar de la lista de las autorizacions" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "knownAccounts": "Comptes coneguts", - "libraries": "Bibliotècas", - "website": "Dobrir lo site web", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "activity": { - "emittedFollows": "Seguiments de bibliotècas enviats", - "emittedMessages": "Messatge emés", - "firstSeen": "Primièra aparicion", - "receivedFollows": "Seguiments de bibliotècas recebuts" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Error en recuperar las informacions del nos", - "label": "Estatut" - }, - "inAllowList": { - "label": "Es present dins la lista d’autorizacion", - "false": "Non", - "true": "Òc" - }, - "lastChecked": "Darrièra verificacion", - "domainName": "Nom", - "software": { - "label": "Logicial" - }, - "totalUsers": "Utilizaires totals" - } - }, - "description": { - "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat." - }, - "notApplicable": "ND", - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "DomainsList": { - "button": { - "add": "Ajustar" - }, - "label": { - "addDomain": "Ajustar un domeni", - "addToAllowList": "Ajustar a la lista d’autorizacion" - }, - "title": "Domenis", - "header": { - "domains": "Domenis", - "failure": "Error en crear lo domeni" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Tot", - "resolved": "Resolgut", - "unresolved": "Pas resolgut" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "title": "Senhalaments", - "header": { - "reports": "Senhalaments" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per títol, artista, domeni…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Tot", - "approved": "Validat", - "pending": "En espèra", - "refused": "Regetada" - } - }, - "ordering": { - "direction": { - "ascending": "Ascendent", - "descending": "Descendent", - "label": "Òrdre" - }, - "label": "Òrdre" - }, - "label": { - "search": "Recercar", - "status": "Estatut" - }, - "placeholder": { - "search": "Recercar per nom d’utilizaire…" - }, - "title": "Demandas de l’utilizaire", - "header": { - "userRequests": "Demandas de l’utilizaire" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data d’accès", - "firstSeen": "Primièra aparicion" - }, - "audioContent": { - "bitrate": { - "label": "Debit" - }, - "cachedSize": "Talha del cache", - "duration": "Durada", - "size": "Talha", - "track": "Pista" - }, - "upload": { - "name": "Nom" - } - }, - "link": { - "account": "Compte", - "domain": "Domenu", - "importStatus": "Estatut de l’import", - "library": "Bibliotèca", - "remoteProfile": "Dobrir lo perfil alonhat", - "type": "Tipe", - "django": "Veire sul panèl d’admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "local": "Local", - "uploadData": "Data de mandadís" - }, - "button": { - "delete": "Suprimir", - "download": "Telecargar" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste mandadís ?", - "content": { - "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." - } - } - }, - "notApplicable": "ND" - }, - "LibraryDetail": { - "link": { - "account": "Compte", - "albums": "Albums", - "artists": "Artistas", - "domain": "Domenu", - "reports": "Senhalaments ligats", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django", - "visibility": "Visibilitat" - }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "libraryData": "Donadas de bibliotèca", - "local": "Local" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "library": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "firstSeen": "Primièra aparicion", - "followers": "Seguidors" - } - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta bibliotèca ?", - "content": { - "warning": "Aquesta bibliotèca serà tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "AlbumDetail": { - "header": { - "activity": "Activitat", - "albumData": "Donadas de l’album", - "audioContent": "Contengut àudio", - "local": "Local" - }, - "link": { - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "album": { - "description": "Descripcion", - "title": "Títol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste album ?", - "content": { - "warning": "L’album serà tirat, e mai los mandadisses, pistas, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "ArtistDetail": { - "header": { - "activity": "Activitat", - "artistData": "Donadas de l’artista", - "audioContent": "Contengut àudio", - "local": "Local" - }, - "link": { - "albums": "Albums", - "category": "Categoria", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "tracks": "Pistas", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "audioContent": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "artist": { - "description": "Descripcion", - "name": "Nom" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste artista ?", - "content": { - "warning": "L’artista serà tirat, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "TagDetail": { - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "tagData": "Donada de l’etiqueta" - }, - "link": { - "albums": "Albums", - "artists": "Artistas", - "localProfile": "Dobrir lo perfil local", - "tracks": "Pistas", - "django": "Veire sul panèl d’admin de Django" - }, - "button": { - "delete": "Suprimir" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta etiqueta ?", - "content": { - "warning": "L’etiqueta seguenta serà tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." - } - } - }, - "table": { - "activity": { - "firstSeen": "Primièra aparicion" - }, - "tag": { - "name": "Nom" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Activitat", - "local": "Local", - "trackData": "Donada de la pista" - }, - "link": { - "album": "Album", - "albumArtist": "Artista d’aqueste album", - "artist": "Artista", - "domain": "Domenu", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "reports": "Senhalaments ligats", - "localProfile": "Dobrir lo perfil local", - "musicbrainz": "Veire sus MusicBrainz", - "remoteProfile": "Dobrir lo perfil alonhat", - "uploads": "Mandadís", - "django": "Veire sul panèl d’admin de Django" - }, - "table": { - "trackData": { - "cachedSize": "Talha del cache", - "totalSize": "Talha totala" - }, - "track": { - "copyright": "Copyright", - "description": "Descripcion", - "discNumber": "Numèro del disc", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol" - }, - "activity": { - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "listenings": "Escotas", - "playlists": "Listas de lectura" - } - }, - "button": { - "delete": "Suprimir", - "edit": "Modificar", - "remoteRefresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aquesta pista ?", - "content": { - "warning": "La pista serà tirada, e mai las pistas, mandadisses, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." - } - } - }, - "warning": { - "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" - } - }, - "Base": { - "link": { - "albums": "Albums", - "artists": "Artistas", - "channels": "Cadenas", - "edits": "Modificacions", - "libraries": "Bibliotècas", - "tags": "Etiquetas", - "tracks": "Pistas", - "uploads": "Mandadís" - }, - "title": "Gerir la bibliotèca", - "menu": { - "secondary": "Menú segondari" - } - }, - "EditsList": { - "title": "Modificacions", - "header": { - "edits": "Modificacions de la bibliotèca" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Suprimir", + "openRemote": "Dobrir lo perfil alonhat", + "refresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "channelData": "Donadas de la cadena" + }, + "label": { + "local": "Local" + }, + "link": { + "django": "Veire sul panèl d’admin de Django", + "localProfile": "Dobrir lo perfil local" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serà tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + } + }, "table": { - "channelData": { - "account": "Compte", - "category": "Categoria", - "description": "Descripcion", - "domain": "Domenu", - "name": "Nom", - "rss": "Flux RSS", - "url": "URL" + "activity": { + "edits": "Modificacions", + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "linkedReports": "Senhalaments ligats", + "listenings": "Escotas", + "playlists": "Listas de lectura" }, "audioContent": { "albums": "Albums", @@ -4047,40 +3259,16 @@ "tracks": "Pistas", "uploads": "Mandadís" }, - "activity": { - "edits": "Modificacions", - "favorited": "Pistas en favorit", - "firstSeen": "Primièra aparicion", - "linkedReports": "Senhalaments ligats", - "listenings": "Escotas", - "playlists": "Listas de lectura" + "channelData": { + "account": "Compte", + "category": "Categoria", + "description": "Descripcion", + "domain": "Domenu", + "name": "Nom", + "rss": "Flux RSS", + "url": "URL" } }, - "header": { - "activity": "Activitat", - "audioContent": "Contengut àudio", - "channelData": "Donadas de la cadena" - }, - "button": { - "delete": "Suprimir", - "openRemote": "Dobrir lo perfil alonhat", - "refresh": "Actualizar del servidor alonhat estant" - }, - "modal": { - "delete": { - "header": "Suprimir aqueste cadena ?", - "content": { - "warning": "Aquesta cadena serà tirada, e mai los mandadisses, pistas e abonaments ligats. Aquesta accions es irreversibla." - } - } - }, - "label": { - "local": "Local" - }, - "link": { - "localProfile": "Dobrir lo perfil local", - "django": "Veire sul panèl d’admin de Django" - }, "warning": { "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" } @@ -4104,53 +3292,1201 @@ "channels": "Cadenas", "federation": "Federacion", "instanceInfo": "Info. de l’instància", - "settings": "Paramètres de l’intància", "moderation": "Moderacion", "music": "Musica", "playlists": "Listas de lectura", "sections": "Seccions", "security": "Seguretat", + "settings": "Paramètres de l’intància", "signups": "Inscripcions", "stats": "Estatisticas", "subsonic": "Subsonic", "ui": "Interfàcia utilizaire" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "albumData": "Donadas de l’album", + "audioContent": "Contengut àudio", + "local": "Local" + }, + "link": { + "artist": "Artista", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "L’album serà tirat, e mai los mandadisses, pistas, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste album ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "album": { + "description": "Descripcion", + "title": "Títol" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "ArtistDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "artistData": "Donadas de l’artista", + "audioContent": "Contengut àudio", + "local": "Local" + }, + "link": { + "albums": "Albums", + "category": "Categoria", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "L’artista serà tirat, e mai los mandadisses, pistas, albums, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste artista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "artist": { + "description": "Descripcion", + "name": "Nom" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "Base": { + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "tags": "Etiquetas", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Gerir la bibliotèca" + }, + "EditsList": { + "header": { + "edits": "Modificacions de la bibliotèca" + }, + "title": "Modificacions" + }, + "LibraryDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "libraryData": "Donadas de bibliotèca", + "local": "Local" + }, + "link": { + "account": "Compte", + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "tracks": "Pistas", + "uploads": "Mandadís", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotèca serà tirada, e mai los mandadisses e abonaments ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aquesta bibliotèca ?" + } + }, + "table": { + "activity": { + "firstSeen": "Primièra aparicion", + "followers": "Seguidors" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "library": { + "description": "Descripcion", + "name": "Nom" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "TagDetail": { + "button": { + "delete": "Suprimir" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "tagData": "Donada de l’etiqueta" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "django": "Veire sul panèl d’admin de Django", + "localProfile": "Dobrir lo perfil local", + "tracks": "Pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "L’etiqueta seguenta serà tirada e desligada de las entitats existentas. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta etiqueta ?" + } + }, + "table": { + "activity": { + "firstSeen": "Primièra aparicion" + }, + "tag": { + "name": "Nom" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Suprimir", + "edit": "Modificar", + "remoteRefresh": "Actualizar del servidor alonhat estant" + }, + "header": { + "activity": "Activitat", + "local": "Local", + "trackData": "Donada de la pista" + }, + "link": { + "album": "Album", + "albumArtist": "Artista d’aqueste album", + "artist": "Artista", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "edits": "Modificacions", + "libraries": "Bibliotècas", + "localProfile": "Dobrir lo perfil local", + "musicbrainz": "Veire sus MusicBrainz", + "remoteProfile": "Dobrir lo perfil alonhat", + "reports": "Senhalaments ligats", + "uploads": "Mandadís" + }, + "modal": { + "delete": { + "content": { + "warning": "La pista serà tirada, e mai las pistas, mandadisses, favorits e istorics d’escota ligats. Aquesta accion es irreversibla." + }, + "header": "Suprimir aquesta pista ?" + } + }, + "table": { + "activity": { + "favorited": "Pistas en favorit", + "firstSeen": "Primièra aparicion", + "listenings": "Escotas", + "playlists": "Listas de lectura" + }, + "track": { + "copyright": "Copyright", + "description": "Descripcion", + "discNumber": "Numèro del disc", + "license": "Licéncia", + "position": "Posicions", + "title": "Títol" + }, + "trackData": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "UploadDetail": { + "button": { + "delete": "Suprimir", + "download": "Telecargar" + }, + "header": { + "activity": "Activitat", + "audioContent": "Contengut àudio", + "local": "Local", + "uploadData": "Data de mandadís" + }, + "link": { + "account": "Compte", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "importStatus": "Estatut de l’import", + "library": "Bibliotèca", + "remoteProfile": "Dobrir lo perfil alonhat", + "type": "Tipe", + "visibility": "Visibilitat" + }, + "modal": { + "delete": { + "content": { + "warning": "La suggestion serà complètament tirada, aquesta accion es irreversibla." + }, + "header": "Suprimir aqueste mandadís ?" + } + }, + "notApplicable": "ND", + "table": { + "activity": { + "accessedDate": "Data d’accès", + "firstSeen": "Primièra aparicion" + }, + "audioContent": { + "bitrate": { + "label": "Debit", + "value": "{bitrate}/s" + }, + "cachedSize": "Talha del cache", + "duration": "Durada", + "size": "Talha", + "track": "Pista" + }, + "upload": { + "name": "Nom" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Ajustar una règla de moderacion" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat" + }, + "header": { + "accountData": "Donadas del compte", + "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut àudio", + "localAccount": "Compte local", + "noPolicy": "Avètz pas cap de règla en plaça per aqueste compte." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panèl d’admin de Django", + "domain": "Domenu", + "libraries": "Bibliotècas", + "linkedReports": "Senhalaments ligats", + "openProfile": "Dobrir lo perfil", + "remoteProfile": "Dobrir lo perfil alonhat", + "requests": "Demandas", + "tracks": "Pistas", + "uploads": "Mandadís" + }, + "notApplicable": "ND", + "option": { + "permission": { + "library": "Bibliotèca", + "moderation": "Moderacion", + "settings": "Paramètres" + } + }, + "table": { + "accountData": { + "displayName": "Nom public", + "email": "Adreça electronica", + "lastActivity": "Darrièra activitat", + "lastChecked": "Darrièra verificacion", + "loginStatus": { + "disabled": "Desactivada", + "enabled": "Activada", + "label": "Estat del compte" + }, + "permissions": "Autorizacions", + "signupDate": "Data d’inscripcion", + "userType": "Tipe", + "username": "Nom d’utilizaire" + }, + "activity": { + "emittedFollows": "Seguiments de bibliotècas enviats", + "emittedMessages": "Messatge emés", + "firstSeen": "Primièra aparicion", + "receivedFollows": "Seguiments de bibliotècas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "megabyte": "Mo", + "totalSize": "Talha totala", + "uploadQuota": "Quòta de mandadís" + } + }, + "tooltip": { + "uploadQuota": "Definissètz la quantitat de contengut que l’utilizaire pòt enviar. Daissatz void per emplegar las valors per defaut de l’instància." + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "Base": { + "link": { + "accounts": "Comptes", + "domains": "Domenis", + "reports": "Senhalaments", + "userRequests": "Demandas de l’utilizaire" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Moderacion" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Ajustar una règla de moderacion", + "addToAllowList": "Ajustar a la lista d’autorizacion", + "refreshNodeInfo": "Actualizar las info del nos", + "removeFromAllowList": "Tirar de la lista de las autorizacions" + }, + "description": { + "policy": "Las politicas de moderacion vos ajudan a contrarotlar cossí vòstra instància deu interagir amb un compte o domeni donat" + }, + "header": { + "activePolicy": "Aqueste domeni es sosmés a de règlas de moderacion especificadas", + "activity": "Activitat", + "audioContent": "Contengut àudio", + "instanceData": "Donadas de l’instància", + "noPolicy": "Avètz pas cap de règla en plaça per aqueste domeni." + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "channels": "Cadenas", + "django": "Veire sul panèl d’admin de Django", + "knownAccounts": "Comptes coneguts", + "libraries": "Bibliotècas", + "tracks": "Pistas", + "uploads": "Mandadís", + "website": "Dobrir lo site web" + }, + "notApplicable": "ND", + "table": { + "activity": { + "emittedFollows": "Seguiments de bibliotècas enviats", + "emittedMessages": "Messatge emés", + "firstSeen": "Primièra aparicion", + "receivedFollows": "Seguiments de bibliotècas recebuts" + }, + "audioContent": { + "cachedSize": "Talha del cache", + "totalSize": "Talha totala" + }, + "instanceData": { + "domainName": "Nom", + "inAllowList": { + "false": "Non", + "label": "Es present dins la lista d’autorizacion", + "true": "Òc" + }, + "lastChecked": "Darrièra verificacion", + "nodeInfoStatus": { + "label": "Estatut", + "value": "Error en recuperar las informacions del nos" + }, + "software": { + "label": "Logicial", + "value": "{name} ({version})" + }, + "totalUsers": "Utilizaires totals" + } + }, + "warning": { + "stats": "Las estatisticas son calculadas amb las activitats conegudas e lo contengut de vòstra instància, son pas lo rebat de l’activitat generala d’aqueste compte" + } + }, + "DomainsList": { + "button": { + "add": "Ajustar" + }, + "header": { + "domains": "Domenis", + "failure": "Error en crear lo domeni" + }, + "label": { + "addDomain": "Ajustar un domeni", + "addToAllowList": "Ajustar a la lista d’autorizacion" + }, + "title": "Domenis" + }, + "ReportsList": { + "header": { + "reports": "Senhalaments" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "resolved": "Resolgut", + "unresolved": "Pas resolgut" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "placeholder": { + "search": "Recercar per títol, artista, domeni…" + }, + "title": "Senhalaments" + }, + "RequestsList": { + "header": { + "userRequests": "Demandas de l’utilizaire" + }, + "label": { + "search": "Recercar", + "status": "Estatut" + }, + "option": { + "status": { + "all": "Tot", + "approved": "Validat", + "pending": "En espèra", + "refused": "Regetada" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Òrdre" + }, + "label": "Òrdre" + }, + "placeholder": { + "search": "Recercar per nom d’utilizaire" + }, + "title": "Demandas de l’utilizaire" + } + }, "users": { "Base": { "link": { "invitations": "Invitacions", "users": "Utilizaires" }, - "title": "Gerir los utilizaires", "menu": { "secondary": "Menú segondari" + }, + "title": "Gerir los utilizaires" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Connexion…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Confirmacion vòstra adreça electronica impossibla", + "success": "Corrièl confirmat" + }, + "label": { + "confirmationCode": "Còdi de confirmacion" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "success": "Podètz ara utilizar lo servici sens cap de limitacions" + }, + "title": "Confirmar vòstra adreça electronica" + }, + "Login": { + "header": { + "login": "Connectatz-vos a vòstre compte Funkwhale" + }, + "title": "Connexion" + }, + "PasswordReset": { + "button": { + "requestReset": "Demandar un nòu senhal" + }, + "header": { + "failure": "Error en demandar un novèl senhal", + "reset": "Reïnicializar lo senhal" + }, + "help": { + "form": "Garnissètz aqueste formulari per demandar un nòu senhal. Auretz un corrièl a vòstra adreça indicada contenent las consignas per reïnicializar lo senhal." + }, + "label": { + "email": "Adreça electronica del compte" + }, + "link": { + "back": "Tornar a la pagina de connexion" + }, + "placeholder": { + "email": "Picatz l’adreça de corrièl ligada a vòstre compte" + }, + "title": "Reïnicializar lo senhal" + }, + "PasswordResetConfirm": { + "button": { + "update": "Actualizar vòstre senhal" + }, + "header": { + "failure": "Error en cambiar lo senhal", + "success": "Senhal corrèctament modificat" + }, + "label": { + "newPassword": "Nòu senhal" + }, + "link": { + "back": "Tornar a la pagina de connexion", + "login": "Contunhar cap a la pagina de connexion" + }, + "message": { + "requestSent": "Se l’adreça qu’avètz provesida a las etapas precedentas es valida e associada a un compte utilizaire, sètz per recebre un messatge amb las consignas de reïnicializacion d’aquí una estona.", + "success": "Vòstre senhal es corrèctament cambiat." + }, + "title": "Cambiar lo senhal" + }, + "Plugins": { + "title": "Gerir los moduls" + }, + "ProfileActivity": { + "header": { + "playlists": "Listas de lectura", + "recentlyFavorited": "Ajustadas als favorits i a res", + "recentlyListened": "Escotadas i a res" + } + }, + "ProfileBase": { + "label": { + "self": "Sètz vos !" + }, + "link": { + "activity": "Activitat", + "domainView": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "overview": "Vista d’ensemble" + }, + "title": "Perfil de {username}" + }, + "ProfileOverview": { + "button": { + "cancel": "Anullar", + "createChannel": "Crear una cadena", + "next": "Etapa seguenta", + "previous": "Etapa precedenta" + }, + "header": { + "channels": "Cadenas", + "libraries": "Bibliotècas de l’utilizaire", + "sharedLibraries": "Aqueste utilizaire partegèt las bibliotècas seguentas" + }, + "link": { + "addNew": "Ajustar nòu" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Cadena de l’artista" + }, + "header": "Crear una cadena", + "podcast": { + "header": "Cadena del podcast" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Crear un compte funkwhale" + }, + "title": "Inscripcion" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir", + "delete": "Suprimir…", + "edit": "Modificar…", + "embed": "Integrar", + "play": "Legir", + "updateChannel": "Actualizar la cadena", + "upload": "Enviar" + }, + "header": { + "artistChannel": "Cadena de l’artista", + "podcastChannel": "Cadena del podcast" + }, + "link": { + "channelEpisodes": "Totes los episòdis", + "channelOverview": "Vista d’ensemble", + "channelTracks": "Pistas", + "domainView": "Veire sus {domain}", + "mirrored": "Miralh de {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion" + }, + "meta": { + "episodes": "{n} episòdi | {n} episòdis", + "listenings": "{n} escota | {n} escotas", + "subscribers": "{n} abonat | {n} abonats", + "tracks": "{n} pista | {n} pistas" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta cadena serà tirada, e mai totes los fichièrs e donadas ligats. Aquesta accions es irreversibla." + }, + "header": "Suprimir aqueste cadena ?" + }, + "embed": { + "header": "Integrar aquesta pista a vòstre site web" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "S’utilizatz Mastodon o una autra aplicacion del fediverse, podètz tanben vos abonar a aqueste compte :" + }, + "header": "S’abonar sul fediverse" + }, + "funkwhale": { + "header": "S’abonar a Funkwhale" + }, + "header": "S’abonar a aquesta cadena", + "rss": { + "content": { + "help": "Copiatz-pegatz l’URL seguenta dins vòstra aplicacion de podcast preferida :" + }, + "header": "S’abonar via RSS" + } + } + }, + "title": "Cadena" + }, + "DetailOverview": { + "header": { + "albums": "Albums", + "latestEpisodes": "Darrièrs episòdis", + "latestTracks": "Darrièras pistas", + "series": "Serias", + "uploadsFailure": "Impossible de publicar unes mandadisses", + "uploadsProcessing": "Tractament dels mandadisses", + "uploadsSuccess": "Mandadisses corrèctament publicats" + }, + "link": { + "addAlbum": "Ajustar nòu", + "erroredUploads": "Veire los mandadisses en error", + "skippedUploads": "Veire los mandadisses sautats" + }, + "message": { + "processing": "Funkwhale tracta vòstres mandadisses e seràn lèu publicats." + }, + "meta": { + "progress": "Bibliotèca e mandadís : {finished}/{total}" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anullar", + "subscribe": "S’abonar" + }, + "link": { + "addNew": "Ajustar nòu" + }, + "modal": { + "subscription": { + "header": "Inscripcion" + } + }, + "placeholder": { + "search": "Filtrar per nom…" + }, + "title": "Cadenas seguidas" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Bibliotècas", + "tracks": "Pistas" + }, + "menu": { + "secondary": "Menú segondari" + }, + "title": "Ajustar de contengut" + }, + "Home": { + "button": { + "start": "Començar" + }, + "description": { + "channel": { + "1": "Se sètz musician o creator de podcasts, las cadenas son fachas per vos !", + "2": "Partejatz vòstre trabalh publicament e obtenètz de seguidors sus Funkwhale, sul Fediverse o de las aplicacions de podcast estant." + }, + "follow": "Podètz seguir las bibliotècas d’autres utilizaires per accedir a de nòvas musicas. Las bibliotècas publicas pòdon èsser seguidas còp sec, mentre qu’una bibliotèca privada demanda una aprovacion de sus proprietaris.", + "upload": "Enviatz vòstra bibliotèca musicala personala a Funkwhale e aprofechatz-ne pertot e partejatz-la amb vòstres amics e familha." + }, + "header": { + "channel": "Publicar vòstre trabalh dins una cadena", + "follow": "Seguir de bibliotècas alonhadas", + "upload": "Enviar de contengut tèrces a la bibliotèca" + }, + "help": { + "uploadQuota": "Aquesta instància provesís fins a {quota} d’espaci per cada utilizaire." + }, + "title": "Ajustar e gerir lo contengut" + }, + "libraries": { + "Card": { + "button": { + "upload": "Mandadís" + }, + "label": { + "size": "Talha totala dels fichièrs d’aquesta bibliotèca" + }, + "link": { + "details": "Detalhs de la bibliotèca" + }, + "meta": { + "tracks": "{n} pista | {n} pistas" + } + }, + "FilesTable": { + "action": { + "delete": "Suprimir", + "restartImport": "Relançar l’import" + }, + "button": { + "showStatus": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aquesta pista" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta bibliotèca" + }, + "label": { + "importStatus": "Estatut de l’import", + "search": "Recercar" + }, + "notApplicable": "ND", + "option": { + "status": { + "all": "Tot", + "draft": "Borrolhon", + "failed": "Fracàs", + "finished": "Acabat", + "pending": "En espèra", + "skipped": "Ignorat" + } + }, + "ordering": { + "direction": { + "ascending": "Ascendent", + "descending": "Descendent", + "label": "Direccion" + }, + "label": "Òrdre" + }, + "pagination": { + "results": "Afichatge dels resultats {start}-{end} de {total}" + }, + "placeholder": { + "search": "Recercar per títol, artista, album…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Artista", + "duration": "Durada", + "importStatus": "Estatut de l’import", + "size": "Talha", + "title": "Títol", + "uploadDate": "Data de mandadís" + } + } + } + }, + "Form": { + "button": { + "confirm": "Suprimir la bibliotèca", + "create": "Crear una bibliotèca", + "delete": "Suprimir", + "update": "Actualizar la bibliotèca" + }, + "description": { + "library": "Las bibliotècas vos ajudan a organizar e partejar vòstras colleccions de musica. Podètz enviar vòstra pròpria collecion musicala a Funkwhale e la partejar amb vòstres amics e vòstra familha.", + "visibility": "Poiretz partejar vòstra bibiotèca amb d’autres gents, sens importància de sa visibilitat." + }, + "header": { + "failure": "Error" + }, + "label": { + "description": "Descripcion", + "name": "Nom", + "visibility": "Visibilitat" + }, + "message": { + "libraryCreated": "Bibliotèca creada", + "libraryDeleted": "Bibliotèca suprimida", + "libraryUpdated": "Bibliotèca actualizada" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquesta bibliotèca e totas sas pistas seràn suprimidas. Aquesta accion se pòt pas anullar." + }, + "header": "Suprimir aquesta bibliotèca ?" + } + }, + "placeholder": { + "description": "Aquesta bibliotèca conten ma musica personala, espèri que vos agradarà.", + "name": "Ma bibliotèca tròp crana" + } + }, + "Home": { + "empty": { + "noLibrary": "Sembla qu’avètz pas cap de bibliotèca pel moment, es ora de ne crear una." + }, + "header": { + "libraries": "Mas bibliotècas" + }, + "link": { + "createLibrary": "Crear una nòva bibliotèca" + }, + "loading": { + "libraries": "Cargament de las bibliotècas…" + } + }, + "Quota": { + "button": { + "purge": "Purgar" + }, + "header": { + "currentUsage": "Utilizacion actuala" + }, + "label": { + "currentUsage": "{amount} utilizat de {max} autorizat", + "errored": "Fichièrs amb errors", + "pending": "Fichièrs en espèra", + "percentUsed": "{progress}%", + "skipped": "Fichièrs ignorats" + }, + "link": { + "viewFiles": "Veire los fichièrs" + }, + "loading": { + "currentUsage": "Cargament de l’utilizacion de las donadas…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Las pistas enviadas mas pas complètament tractadas pel servidor seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." + }, + "header": "Purgar los fichièrs amb errors ?" + }, + "purgePending": { + "content": { + "description": "Las pistas importadas que lo servidor a pas encara tractadas seràn complètament suprimidas. Lo quòta correspondent vos serà tornat." + }, + "header": "Purgar los fichièrs en espèra ?" + }, + "purgeSkipped": { + "content": { + "description": "Las pistas enviadas mas ignoradas pendent lo processús d’importacion per mantun rasons seràn complètament suprimidas. Vos donarà de nòu lo quòta escafat." + }, + "header": "Purgar los fichièrs ignorats ?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Anullar lad emanda d’abonament", + "follow": "Seguir", + "pending": "Abonament en espèra de validacion", + "unfollow": "Quitar de seguir" + }, + "label": { + "scanFailure": "Error en explorant", + "scanPartialSuccess": "Explorada amb d’errors", + "scanPending": "Analisi en espèra", + "scanProgress": "Exploracion ({progress})", + "scanSuccess": "Explorat", + "sharingLink": "Ligam de partatge" + }, + "link": { + "scan": "Explorar ara ", + "scanDetails": "Detalhs" + }, + "message": { + "scanLaunched": "Exploracion lançada", + "scanSkipped": "Exploracion sautada (la darrièra es tròp recenta)" + }, + "meta": { + "failedTracks": "Pistas en error : {tracks}", + "lastUpdate": "Darrièra actualizacion : ", + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "modal": { + "unfollow": { + "content": { + "warning": "En quitar de seguir aquesta bibliotèca, perdretz l’accès a son contengut." + }, + "header": "Quitar de seguir aquesta bibliotèca ?" + } + }, + "tooltip": { + "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", + "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" + } + }, + "Home": { + "button": { + "refresh": "Actualizar" + }, + "description": { + "remoteLibraries": "Las bibliotècas alonhadas apertenon a d’autres utilizaires del malhum. I podètz accedir tant que sián publicas o qu’ajatz l’autorizacion." + }, + "header": { + "knownLibraries": "Bibliotècas conegudas", + "remoteLibraries": "Bibliotècas alonhadas" + }, + "loading": { + "remoteLibraries": "Cargament de las bibliotècas alonhadas…" + } + }, + "ScanForm": { + "button": { + "submit": "Enviar la recèrca" + }, + "header": { + "failure": "Error en recuperar la bibliotèca alonhada" + }, + "label": { + "search": "Cercar una bibliotèca alonhada" + }, + "placeholder": { + "url": "Picatz l’URL d’una bibliotèca" } } } }, - "Search": { - "label": { - "albums": "Albums", - "artists": "Artistas", - "playlists": "Listas de lectura", - "podcasts": "Podcast", - "radios": "Ràdios", - "series": "Serias", - "tags": "Etiquetas", - "tracks": "Pistas" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } }, - "header": { - "search": "Recercar", - "remote": "Cercar un objècte distant", - "rss": "S’abonar al flux RSS d’un podcast" + "DetailOverview": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } }, - "button": { - "submit": "Enviar la requèsta" + "DetailTracks": { + "empty": { + "follow": "Es possible que vos calga seguir aquesta bibliotèca per veire son contengut.", + "upload": "Aquesta bibliotèca es voida, deuriatz enviar quicòm !" + } + }, + "Edit": { + "button": { + "accept": "Acceptar", + "reject": "Regetar" + }, + "empty": { + "noFollowers": "Degun sèc pas aquesta bibliotèca" + }, + "header": { + "followers": "Seguidors", + "libraryContents": "Contengut de la bibliotèca" + }, + "loading": { + "followers": "Cargament dels seguidors…" + }, + "table": { + "action": { + "header": { + "action": "Accion", + "date": "Data", + "status": "Estatut", + "user": "Utilizaire" + }, + "status": { + "accepted": "Acceptat", + "pending": "En espèra de validacion", + "rejected": "Regetat" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Modificar", + "upload": "Mandadís" + }, + "description": { + "sharingLink": "Partejatz aqueste ligam amb d’autres utilizaires per que pòscan accedir a vòstra bibliotèca en lo copiar-pegar dins la barra de recèrca de lor instància." + }, + "label": { + "instance": "Restrenches", + "private": "Privada", + "public": "Public", + "sharingLink": "Ligam de partatge" + }, + "link": { + "albums": "Albums", + "artists": "Artistas", + "domain": "Veire sus {domain}", + "moderation": "Dobrir dins l’interfàcia de moderacion", + "owner": "Lo proprietari es {username}", + "tracks": "Pistas" + }, + "meta": { + "tracks": "Cap de pista | {n} pista | {n} pistas" + }, + "title": "Bibliotèca", + "tooltip": { + "instance": "Aquesta bibliotèca es restrencha als utilizaires d’aquesta instància solament", + "private": "Aquesta bibliotèca es privada e son proprietari deu validar vòstra demanda d’accès per que accediscatz a son contengut", + "public": "Aqueste bibliotèca es publica e podètz accedir a son contengut liurament" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anullar", + "confirm": "Suprimir la lista de lectura", + "delete": "Suprimir", + "edit": "Modificar", + "embed": "Integrar", + "playAll": "O legir tot", + "stopEdit": "Arrestar la modificacion" + }, + "empty": { + "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" + }, + "header": { + "tracks": "Pistas" + }, + "meta": { + "tracks": "Lista de lectura contenent {n} pista, per {username} | Lista de lectura contenent {n} pistas, per {username}" + }, + "modal": { + "delete": { + "content": { + "warning": "Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser anullat." + }, + "header": "Volètz suprimir la lista de lectura « {playlist} » ?" + }, + "embed": { + "header": "Integrar aquesta lista de lectura a un site web" + } + }, + "title": "Lista de lectura" + }, "List": { + "button": { + "create": "Crear una lista de lectura", + "manage": "Gerir vòstras listas de lectura", + "search": "Recercar" + }, + "empty": { + "noResults": "Cap de resultat correspond pas a vòstra recèrca" + }, + "header": { + "browse": "Percórrer las listas de lectura", + "playlists": "Listas de lectura" + }, + "label": { + "search": "Recercar" + }, "ordering": { "direction": { "ascending": "Ascendent", @@ -4159,58 +4495,11 @@ }, "label": "Òrdre" }, - "header": { - "browse": "Percórrer las listas de lectura", - "playlists": "Listas de lectura" - }, - "button": { - "create": "Crear una lista de lectura", - "manage": "Gerir vòstras listas de lectura", - "search": "Recercar" - }, - "placeholder": { - "search": "Escrivètz un nom de lista de lectura…" - }, - "empty": { - "noResults": "Cap de resultat correspond pas a vòstra recèrca" - }, "pagination": { "results": "Resultats per pagina" }, - "label": { - "search": "Recercar" - } - }, - "Detail": { - "button": { - "cancel": "Anullar", - "delete": "Suprimir", - "confirm": "Suprimir la lista de lectura", - "edit": "Modificar", - "embed": "Integrar", - "playAll": "O legir tot", - "stopEdit": "Arrestar la modificacion" - }, - "modal": { - "delete": { - "header": "Volètz suprimir la lista de lectura « { playlist } » ?", - "content": { - "warning": "Aquò escafarà aquesta lista de lectura per totjorn e poirà pas èsser anullat." - } - }, - "embed": { - "header": "Integrar aquesta lista de lectura a un site web" - } - }, - "title": "Lista de lectura", - "meta": { - "tracks": "Lista de lectura contenent { n } pista, per { username } | Lista de lectura contenent { n } pistas, per { username }" - }, - "empty": { - "noTracks": "I a pas encara de pistas ajustadas a aquesta lista de lectura" - }, - "header": { - "tracks": "Pistas" + "placeholder": { + "search": "Escrivètz un nom de lista de lectura…" } } }, @@ -4218,289 +4507,46 @@ "Detail": { "button": { "confirm": "Suprimir la ràdio", + "delete": "Suprimir", "edit": "Modificar…" }, - "modal": { - "delete": { - "header": "Volètz suprimir la ràdio « { playlist } » ?", - "content": { - "warning": "Aquò escafarà aquesta ràdio per totjorn e poirà pas èsser anullat." - } - } - }, "empty": { "noTracks": "I a pas encara de pistas ajustadas a aquesta ràdio" }, - "title": "Ràdio", "header": { "tracks": "Pistas" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "{ n } pista ajustada a la fila | { n } pistas ajustadas a la fila" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Accès als fichièrs àudio, bibliotècas, artistas, albums e pistas", - "label": "Bibliotèca e mandadís" - }, - "filters": { - "description": "Accès als filtre de contengut", - "label": "Filtres de contengut" - }, - "profile": { - "description": "Accès als corrièls, nom d’utilizaire e informacions del perfil", - "label": "Perfil" - }, - "edits": { - "description": "Accès a las modificacions", - "label": "Modificacions" - }, - "follows": { - "description": "Accès al seguiment", - "label": "Seguir" - }, - "listenings": { - "description": "Accès a l’istoric d’escota", - "label": "Escotas" - }, - "reports": { - "description": "Accès als senhalaments de moderacion", - "label": "Senhalaments" - }, - "notifications": { - "description": "Accès a las notificacions", - "label": "Notificacions" - }, - "playlists": { - "description": "Accès a las listas de lectura", - "label": "Listas de lectura" - }, - "radios": { - "description": "Accès a las ràdios", - "label": "Ràdios" - }, - "security": { - "description": "Accedir als paramètres de seguretat coma lo senhal e las autorizacions", - "label": "Seguretat" - }, - "favorites": { - "label": "Favorits" - } }, - "filters": { - "accessedDate": "Data d’accès", - "albumTitle": "Nom de l’album", - "artistName": "Nom de l’artista", - "bitrate": "Debit", - "creationDate": "Data de creacion", - "domain": "Domenu", - "duration": "Durada", - "expirationDate": "Data d’expiracion", - "firstSeen": "Data de primièra aparicion", - "followers": "Seguidors", - "itemsCount": "Elements", - "lastActivity": "Darrièra activitat", - "lastSeen": "Darrièra visita", - "modificationDate": "Data de modificacion", - "name": "Nom", - "receivedMessages": "Messatges recebuts", - "releaseDate": "Data de sortida", - "dateJoined": "Data d’inscripcion", - "size": "Talha", - "trackTitle": "Nom de la pista", - "uploads": "Mandadís", - "username": "Nom d’utilizaire", - "users": "Utilizaires" - }, - "fields": { - "privacyLevel": { - "label": "Visibilitat de l’activitat", - "help": "Determinatz lo nivèl de visibilitat de vòstra activitat", - "shortChoices": { - "public": "Tot lo monde", - "instance": "Instància", - "private": "Privat" + "modal": { + "delete": { + "content": { + "warning": "Aquò escafarà aquesta ràdio per totjorn e poirà pas èsser anullat." }, - "choices": { - "instance": "Lo monde d’aquesta instància", - "public": "Tot lo monde, per totas las instàncias", - "private": "Degun fòra ieu" - } - }, - "summary": { - "label": "Bio" - }, - "reportType": { - "label": "Categoria", - "choices": { - "illegalContent": "Contengut illegal", - "invalidMetadata": "Metadonada invalida", - "offensiveContent": "Contengut ofensiu", - "other": "Autre", - "takedownRequest": "Demanda de retrait" - } - }, - "importStatus": { - "label": "Clicar per mostrar mai d’informacion tocant lo processús d’import d’aqueste mandadís", - "choices": { - "draft": { - "label": "Borrolhon", - "help": "La pista es enviada mas pas encara prevista per tractament pel servidor pel moment" - }, - "errored": { - "label": "Perturbat", - "help": "Una error s’es producha en tractar aquesta pista, asseguratz-vos qu’es corrèctament etiquetada" - }, - "finished": { - "label": "Acabat", - "help": "Importat" - }, - "pending": { - "label": "En espèra", - "help": "La pista es enviada mas pas encara tractada pel servidor" - }, - "skipped": { - "label": "Ignorat", - "help": "La pista ja presenta dins una de vòstras bibliotècas" - } - } - }, - "contentCategory": { - "label": "Categoria del contengut", - "choices": { - "music": "Musica", - "other": "Autre", - "podcast": "Podcast" - } + "header": "Volètz suprimir la ràdio « {radio} » ?" } - } + }, + "title": "Ràdio" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Compte" - }, - "album": { - "typeLabel": "Album", - "label": "Senhalar aqueste album…" - }, - "artist": { - "typeLabel": "Artista", - "label": "Senhalar aqueste artista…" - }, - "channel": { - "typeLabel": "Cadena", - "label": "Senhalar aquesta cadena…" - }, - "library": { - "typeLabel": "Bibliotèca", - "label": "Senhalar aquesta bibliotèca…" - }, - "playlist": { - "typeLabel": "Lista de lectura", - "label": "Senhalar aquesta lista de lectura…" - }, - "track": { - "label": "Senhalar aquesta pista…", - "typeLabel": "Pista" - } + "ChooseInstance": { + "button": { + "submit": "Validar" }, - "useReportConfigs": { - "account": { - "label": "Compte", - "summary": "Bio" - }, - "album": { - "label": "Album", - "releaseDate": "Data de sortida", - "title": "Títol" - }, - "artist": { - "label": "Artista" - }, - "channel": { - "label": "Cadena" - }, - "track": { - "copyright": "Copyright", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol", - "label": "Pista" - }, - "creationDate": { - "label": "Data de creacion" - }, - "library": { - "description": "Descripcion", - "label": "Bibliotèca" - }, - "musicbrainzId": { - "label": "MusicBrainz ID" - }, - "name": { - "label": "Nom" - }, - "playlist": { - "label": "Lista de lectura" - }, - "tags": { - "label": "Etiquetas" - }, - "visibility": { - "label": "Visibilitat" - } + "header": { + "chooseInstance": "Causissètz vòstra instància", + "failure": "Connexion impossibla a l’URL donada", + "suggestions": "Suggestions" }, - "useEditConfigs": { - "track": { - "copyright": "Copyright", - "license": "Licéncia", - "position": "Posicions", - "title": "Títol" - }, - "cover": { - "label": "Jaqueta" - }, - "description": { - "label": "Descripcion" - }, - "artist": { - "name": "Nom" - }, - "album": { - "releaseDate": "Data de sortida", - "title": "Títol" - }, - "tags": { - "label": "Etiquetas" - } + "help": { + "notFunkwhaleServer": "L’adreça donada es pas un servidor Funkwhale", + "selectPod": "Per contunhar, seleccionatz una instància Funkwhale que volètz vos i connectar. Picatz l’adreça dirèctament, o seleccionatz-ne una dins las en suggestion.", + "serverDown": "Se pòt que lo servidor siá atudat" + }, + "label": { + "url": "URL de l’instància" + }, + "message": { + "newUrl": "Utilizatz una instància Funkwhale a {url}" } - }, - "useThemeList": { - "darkTheme": "Escur", - "lightTheme": "Clar" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Una nòva version de l’aplicacion es disponibla.", - "actions": { - "later": "Mai tard", - "update": "Actualizar" - } - }, - "axios": { - "rateLimitDelay": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar d’aquí { delay }", - "rateLimitLater": "Avètz realizat tròpas de requèstas e sètz estat limitat, volgatz tornar ensajar mai tard" } } } diff --git a/front/src/locales/pl.json b/front/src/locales/pl.json index 910ec87d2..05618a20e 100644 --- a/front/src/locales/pl.json +++ b/front/src/locales/pl.json @@ -1,427 +1,341 @@ { + "App": { + "loading": "Ładowanie…" + }, "components": { - "auth": { - "Authorize": { - "header": { - "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", - "authorize": "Autoryzuj zewnętrzną aplikację", - "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", - "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", - "allScopes": "Pełen dostęp", - "readOnly": "Tylko do odczytu", - "writeOnly": "Tylko do zapisu" - }, - "title": "Autoryzuj aplikację", - "button": { - "authorize": "Autoryzuj { app }" - }, - "help": { - "pasteCode": "Wklej następujący kod do aplikacji:", - "redirect": "Zostaniesz przekierowany na { 0 }", - "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji." - }, - "message": { - "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" - } - }, - "SubsonicTokenForm": { - "message": { - "accessDisabled": "Dostęp wyłączony", - "passwordUpdated": "Zaktualizowano hasło", - "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." - }, - "button": { - "confirmDisable": "Wyłącz dostęp", - "disable": "Wyłącz dostęp Subsonic", - "newPassword": "Poproś o nowe hasło", - "confirmNewPassword": "Poproś o hasło" - }, - "modal": { - "disableSubsonic": { - "header": "Wyłączyć dostęp do API Subsonic?", - "content": { - "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." - } - }, - "newPassword": { - "header": "Poprosić o nowe hasło do API Subsonic?", - "content": { - "warning": "To wyloguje Cię z urządzeń na których jesteś obecnie zalogowany." - } - } - }, - "link": { - "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" - }, - "header": { - "error": "Błąd", - "subsonic": "Hasło do API Subsonic" - }, - "description": { - "subsonic": { - "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", - "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, które możesz ustawić poniżej.", - "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie." - } - }, - "label": { - "subsonicField": "Twoje hasło do API Subsonic" - } - }, - "ApplicationEdit": { - "label": { - "accessToken": "Token dostępowy", - "appId": "Identyfikator aplikacji", - "appSecret": "Sekret aplikacji" - }, - "header": { - "appDetails": "Szczegóły aplikacji", - "editApp": "Edytuj aplikację" - }, - "help": { - "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." - }, - "link": { - "settings": "Wróć do ustawień" - }, - "title": "Edytuj aplikację", - "button": { - "regenerateToken": "Stwórz nowy token" - } - }, - "Settings": { - "title": "Ustawienia konta", - "header": { - "accountSettings": "Ustawienia konta", - "authorizedApps": "Autoryzowane aplikacje", - "avatar": "Awatar", - "changeEmail": "Zmień swój adres e-mail", - "changePassword": "Zmień swoje hasło", - "contentFilters": "Filtry treści", - "deleteAccount": "Usuń moje konto", - "hiddenArtists": "Ukryci wykonawcy", - "plugins": "Rozszerzenia", - "settingsUpdated": "Zapisano ustawienia", - "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", - "accountFailure": "Nie udało się usunąć Twojego konta", - "noApps": "Żadna aplikacja nie jest połączona z Twoim kontem.", - "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", - "yourApps": "Twoje aplikacje", - "avatarFailure": "Nie można było zapisać twojego awatara", - "passwordFailure": "Twoje hasło nie mogło zostać zmienione", - "updateFailure": "Twoje ustawienia nie mogły zostać zapisane" - }, - "table": { - "authorizedApps": { - "header": { - "application": "Aplikacja", - "permissions": "Uprawnienia" - } - }, - "yourApps": { - "header": { - "application": "Aplikacja", - "creationDate": "Data utworzenia", - "scopes": "Zakresy dostępu" - } - }, - "artists": { - "header": { - "creationDate": "Data utworzenia", - "name": "Nazwa" - } - } - }, - "label": { - "avatar": "Awatar", - "currentPassword": "Aktualne hasło", - "newEmail": "Nowy adres e-mail", - "newPassword": "Nowe hasło", - "password": "Hasło" - }, - "button": { - "password": "Zmień hasło", - "delete": "Usuń", - "deleteAccountConfirm": "Usuń moje konto", - "deleteAccount": "Usuń moje konto…", - "disableSubsonic": "Wyłącz dostęp", - "edit": "Edytuj", - "refresh": "Odśwież", - "remove": "Usuń", - "removeApp": "Usuń aplikację", - "revoke": "Odwołaj", - "revokeAccess": "Odwołaj dostęp", - "update": "Zapisz", - "updateSettings": "Zapisz ustawienia" - }, - "description": { - "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", - "changePassword": { - "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", - "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach które go używają." - }, - "contentFilters": "Filtry treści pomogą Ci ukryć treści, których nie chcesz widzieć w serwisie.", - "authorizedApps": "To jest lista aplikacji, które mają dostęp do informacji Twojego konta.", - "yourApps": "To jest lista aplikacji, które zarejestrowałeś(-aś).", - "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", - "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pól poniżej. Zostaniesz poproszony o potwierdzenie tej czynności." - }, - "modal": { - "changePassword": { - "header": "Zmienić Twoje hasło?", - "content": { - "warning": "Zmiana hasła będzie miała następujące konsekwencje:", - "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", - "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic" - } - }, - "deleteAccount": { - "header": "Czy na pewno chcesz usunąć swoje konto?", - "content": { - "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerów. Zostaniesz natychmiast wylogowany(-a)." - } - }, - "deleteApp": { - "header": "Usunąć aplikację „{ application }”?", - "content": { - "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." - } - }, - "revokeApp": { - "header": "Czy odwołać dostęp dla aplikacji „{ application }”?", - "content": { - "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." - } - } - }, - "help": { - "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", - "changePassword": "Upewnij się, że Twoje hasło jest poprawne", - "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." - }, - "link": { - "managePlugins": "Zarządzaj rozszerzeniami", - "newApp": "Zarejestruj nową aplikację" - }, - "warning": { - "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerów w ciągu kilku minut. Poinformujemy też inne serwery, które mogą mieć kopię twoich danych, aby przystąpiły do usuwania. Weź pod uwagę, że niektóre serwery mogą być wyłączone, albo nie chcieć współpracować." - }, - "message": { - "currentEmail": "Twój obecny adres e-mail to { email }.", - "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrótce usunięte" - } - }, - "Logout": { - "header": { - "confirm": "Czy na pewno chcesz się wylogować?", - "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" - }, - "link": { - "login": "Zaloguj się!" - }, - "title": "Wyloguj się", - "button": { - "logout": "Tak, wyloguj mnie!" - }, - "message": { - "loggedIn": "Jesteś obecnie zalogowany jako { username }" - } - }, - "ApplicationNew": { - "link": { - "settings": "Wróć do ustawień" - }, - "title": "Utwórz nową aplikację" - }, - "ApplicationForm": { - "label": { - "scopes": { - "description": "Zaznaczenie nadrzędnych zakresów dostępu „Odczyt” lub „Zapis” umożliwia dostęp do wszystkich odpowiednich zakresów podrzędnych.", - "read": { - "label": "Odczyt", - "description": "Dostęp do odczytu danych użytkownika" - }, - "write": { - "label": "Zapis", - "description": "Dostęp do zapisu danych użytkownika" - } - }, - "name": "Nazwa", - "redirectUri": "Adres URI przekierowania" - }, - "button": { - "create": "Utwórz aplikację", - "update": "Zapisz aplikację" - }, - "help": { - "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." - }, - "header": { - "failure": "Nie udało się zapisać Twoich zmian" - } - }, - "LoginForm": { - "link": { - "createAccount": "Utwórz konto", - "resetPassword": "Zresetuj hasło" - }, - "placeholder": { - "username": "Wprowadź swoją nazwę użytkownika lub adres e-mail" - }, - "help": { - "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespół moderujący rozpatrzy twoją aplikację.", - "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." - }, - "button": { - "login": "Zaloguj się" - }, - "label": { - "password": "Hasło", - "username": "Nazwa użytkownika lub adres e-mail" - }, - "header": { - "loginFailure": "Nie udało się Cię zalogować" - } - }, - "SignupForm": { - "button": { - "create": "Utwórz konto" - }, - "label": { - "email": "Adres e-mail", - "password": "Hasło", - "username": "Nazwa użytkownika" - }, - "placeholder": { - "email": "Wprowadź swój adres e-mail", - "invitation": "Wprowadź swój kod zaproszenia (wielkość znaków nie ma znaczenia)", - "username": "Wprowadź swoją nazwę użytkownika" - }, - "header": { - "login": "Zaloguj się na swoje konto Funkwhale", - "signupFailure": "Twoje konto nie mogło zostać utworzone." - }, - "message": { - "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", - "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorów.", - "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespół moderacyjny ją rozpatrzy.", - "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swój adres e-mail przed próbą logowania." - } - }, - "Plugin": { - "link": { - "documentation": "Dokumentacja" - }, - "label": { - "pluginEnabled": "Włączony", - "library": "Biblioteka" - }, - "header": { - "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" - }, - "description": { - "library": "Biblioteka, do której pliki powinny zostać zaimportowane." - }, - "button": { - "save": "Zapisz", - "scan": "Skanuj" - } - } - }, "About": { - "stat": { - "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "godzina muzyki | godziny muzyki" + "description": { + "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", + "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "publicContent": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji.", + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" }, "header": { - "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", "aboutPod": "O tej instancji", - "publicContent": "Przeglądaj publiczne treści", "findApp": "Poznaj kompatybilne aplikacje", + "funkwhale": "Serwis społecznościowy służący do udostępniania i cieszenia się muzyką", + "publicContent": "Przeglądaj publiczne treści", "signup": "Zarejestruj się" }, - "title": "O tej instancji", + "help": { + "closedRegistrations": "Rejestracja nie jest możliwa na tej instancji. Możesz zapisać się na innej używając linka poniżej." + }, "link": { "findOtherPod": "Znajdź inną instancję", "learnMore": "Dowiedz się więcej" }, - "description": { - "funkwhale": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", - "publicContent": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji.", - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "findApp": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji.", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" + "message": { + "greeting": "Cześć, {username}", + "loggedIn": "Jesteś już zalogowany!" }, "placeholder": { "noDescription": "Opis nie jest dostępny." }, - "message": { - "loggedIn": "Jesteś już zalogowany!" - } - }, - "Home": { "stat": { "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", - "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + "hoursOfMusic": "godzina muzyki | godziny muzyki" + }, + "title": "O tej instancji" + }, + "AboutPod": { + "feature": { + "allowList": "Lista zezwoleń", + "anonymousAccess": "Anonimowy dostęp", + "federation": "Federacja", + "quota": "Limit przestrzeni", + "registrations": "Rejestracje", + "status": { + "closed": "Zamknięte", + "disabled": "Wyłączony", + "enabled": "Włączone", + "open": "Otwarte" + }, + "version": "Wersja Funkwhale" }, "header": { - "aboutFunkwhale": "O Funkwhale", "about": "O tej instancji", "contact": "Kontakt", + "features": "Informacje dodatkowe", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "link": { + "about": "O tej instancji", + "features": "Informacje dodatkowe", + "introduction": "Wprowadzenie", + "rules": "Reguły", + "statistics": "Statystyki", + "terms": "Regulamin i polityka prywatności" + }, + "message": { + "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" + }, + "notApplicable": "Niedostępne", + "placeholder": { + "noDescription": "Opis nie jest dostępny.", + "noRules": "Nie ustalono reguł.", + "noTerms": "Nie ustalono warunków." + }, + "stat": { + "activeUsers": "aktywny użytkownik | aktywni użytkownicy", + "albumsCount": "album | albumy", + "artistsCount": "wykonawca | wykonawców", + "hoursOfMusic": "godzina muzyki | godziny muzyki", + "listeningsCount": "odsłuchania | odsłuchania", + "tracksCount": "utwór | utwory" + }, + "title": "O tej instancji" + }, + "Home": { + "description": { + "funkwhale": { + "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci.", + "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy." + }, + "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!", + "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!" + }, + "header": { + "about": "O tej instancji", + "aboutFunkwhale": "O Funkwhale", + "contact": "Kontakt", + "links": "Użyteczne linki", "login": "Zaloguj się", - "newChannels": "Nowe kanały", "newAlbums": "Ostatnio dodane albumy", + "newChannels": "Nowe kanały", "signup": "Zarejestruj się", "statistics": "Statystyki", - "links": "Użyteczne linki", "welcome": "Witaj na { podName }!" }, "link": { - "publicContent": { - "label": "Przeglądaj publiczne treści", - "description": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji" + "findOtherPod": "Znajdź inną instancję", + "funkwhale": "Odwiedź funkwhale.audio", + "learnMore": "Dowiedz się więcej", + "mobileApps": { + "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji", + "label": "Aplikacje mobilne" }, + "publicContent": { + "description": "Słuchaj publicznych albumów i list odtwarzania udostępnianych na tej instancji", + "label": "Przeglądaj publiczne treści" + }, + "rules": "Regulamin serwera", "userGuides": { "description": "Odkryj wszystko, co powinieneś wiedzieć o Funkwhale i jego funkcjach", "label": "Podręczniki użytkownika" }, - "findOtherPod": "Znajdź inną instancję", - "learnMore": "Dowiedz się więcej", - "mobileApps": { - "label": "Aplikacje mobilne", - "description": "Używaj Funkwhale na innych urządzeniach za pomocą naszych aplikacji" - }, - "rules": "Regulamin serwera", - "viewMore": "Zobacz więcej…", - "funkwhale": "Odwiedź funkwhale.audio" + "viewMore": "Zobacz więcej…" }, - "description": { - "funkwhale": { - "paragraph2": "Funkwhale jest bezpłatny i rozwijany przez przyjazną społeczność wolontariuszy.", - "paragraph1": "Ta instancja używa Funkwhale - tworzonego przez społeczność projektu, który pozwala Ci słuchać i udostępniać muzykę w zdecentralizowanej, otwartej sieci." - }, - "signup": "Zarejestruj się teraz, aby śledzić swoich ulubionych wykonawców, tworzyć listy odtwarzania, odkrywać nowe treści i wiele więcej!", - "quota": "Użytkownicy tej instancji dostają też { quota } przestrzeni na swoje utwory!" - }, - "title": "Strona główna", "placeholder": { "noDescription": "Żaden opis nie jest dostępny." + }, + "stat": { + "activeUsers": "{ n } aktywny użytkownik | { n } aktywni użytkownicy", + "hoursOfMusic": "{ n } godzina muzyki | { n } godziny muzyki" + }, + "title": "Strona główna" + }, + "PageNotFound": { + "header": { + "pageNotFound": "Nie odnaleziono strony!" + }, + "link": { + "home": "Przejdź na stronę główną" + }, + "message": { + "pageNotFound": "Przepraszamy, strona której szukasz nie istnieje:" + }, + "title": "Nie odnaleziono strony" + }, + "Queue": { + "button": { + "clear": "Wyczyść", + "close": "Zamknij", + "stopRadio": "Zatrzymaj radio" + }, + "header": { + "failure": "Ten utwór nie mógł zostać wczytany", + "radio": "Słuchasz stacji radiowej" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", + "duration": "Czas trwania", + "next": "Następny utwór", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previous": "Poprzedni utwór", + "queue": "Kolejka odtwarzania", + "remove": "Usuń", + "restart": "Odtwórz utwór ponownie" + }, + "message": { + "automaticPlay": "Następny utwór zostanie odtworzony automatycznie w ciągu kilku sekund…", + "radio": "Nowe utwory pojawią się tutaj automatycznie." + }, + "meta": { + "queuePosition": "Utwór { index } z { length }" + }, + "warning": { + "connectivity": "Możesz mieć problemy z łącznością." + } + }, + "RemoteSearchForm": { + "button": { + "fediverse": "Fediverse", + "rss": "Kanał RSS", + "search": "Szukaj" + }, + "description": { + "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", + "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." + }, + "error": { + "fetchFailed": "Ten obiekt nie mógł zostać pobrany" + }, + "header": { + "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" + }, + "label": { + "fediverse": { + "fieldLabel": "Obiekt Fediverse", + "title": "Obserwuj podcast z Fediverse" + }, + "rss": { + "fieldLabel": "Lokalizacja kanału RSS", + "fieldPlaceholder": "https://adres.strony/rss.xml", + "title": "Zasubskrybuj kanał RSS podcastu" + } + }, + "warning": { + "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" + } + }, + "ShortcutsModal": { + "button": { + "close": "Zamknij" + }, + "header": { + "modal": "Skróty klawiszowe" + }, + "shortcut": { + "audio": { + "clearQueue": "Wyczyść kolejkę odtwarzania", + "decreaseVolume": "Zmniejsz głośność", + "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", + "increaseVolume": "Zwiększ głośność", + "label": "Skróty odtwarzacza", + "playNext": "Następny utwór", + "playPause": "Zatrzymaj/odtwarzaj aktualny utwór", + "playPrevious": "Poprzedni utwór", + "seekBack30": "Cofnij o 30 sekund", + "seekBack5": "Cofnij o 5 sekund", + "seekForward30": "Pomiń 30 sekund", + "seekForward5": "Pomiń 5 sekund", + "shuffleQueue": "Wymieszaj kolejkę", + "toggleFavorite": "Dodaj lub usuń z ulubionych", + "toggleLoop": "Włącz zapętlenie kolejki", + "toggleMute": "Przełącz wyciszenie" + }, + "general": { + "focus": "Aktywuj pasek wyszukiwania", + "label": "Skróty ogólne", + "show": "Pokaż dostępne skróty klawiszowe", + "unfocus": "Dezaktywuj pasek wyszukiwania" + } + } + }, + "Sidebar": { + "header": { + "administration": "Administracja", + "explore": "Odkrywaj", + "library": "Moja biblioteka", + "main": "Główna nawigacja", + "more": "Więcej" + }, + "label": { + "add": "Dodaj zawartość", + "administration": "Administracja", + "edits": "Edycje oczekujące na rozpatrzenie", + "follows": "Oczekujące prośby o obserwowanie", + "language": "Język", + "main": "Menu główne", + "play": "Odtwarzaj ten utwór", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "albums": "Albumy", + "artists": "Artyści", + "browse": "Przeglądaj", + "channels": "Kanały", + "createAccount": "Utwórz konto", + "favorites": "Ulubione", + "home": "Strona główna", + "library": "Biblioteka", + "login": "Zaloguj się", + "moderation": "Moderacja", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "search": "Szukaj", + "settings": "Ustawienia", + "users": "Użytkownicy" + } + }, + "admin": { + "SettingsGroup": { + "button": { + "save": "Zapisz" + }, + "header": { + "error": "Wystąpił błąd podczas zapisywania ustawień", + "image": "Aktualny obraz" + }, + "message": { + "success": "Pomyślnie zapisano ustawienia." + } + }, + "SignupFormBuilder": { + "button": { + "add": "Dodaj nowe pole", + "edit": "Edytuj formularz", + "preview": "Podgląd formularza" + }, + "help": { + "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", + "helpText": "Opcjonalny tekst, który będzie widoczny nad formularzem rejestracji." + }, + "label": { + "additionalField": "Dodatkowe pole", + "additionalFields": "Dodatkowe pola", + "delete": "Usuń", + "helpText": "Podręcznik pomocy", + "moveDown": "Przesuń w dół", + "moveUp": "Przesuń w górę" + }, + "table": { + "additionalFields": { + "header": { + "actions": "Działania", + "label": "Etykieta pola", + "required": "Wymagane", + "type": "Typ pola" + }, + "required": { + "false": "Nie", + "true": "Tak" + }, + "type": { + "long": "Długi tekst", + "short": "Krótki tekst" + } + } + } } }, "audio": { - "artist": { - "Card": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "tracks": "{ n } utwór | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, "ChannelCard": { "meta": { "episodes": "{ n } epizod | { n } epizody", @@ -429,249 +343,49 @@ }, "title": "Aktualizowany { date }" }, - "ChannelSerieCard": { - "meta": { - "episodes": "{ n } epizod | { n } epizody" - } - }, - "album": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - } - }, - "Widget": { - "button": { - "more": "Pokaż więcej" - } - } - }, - "Player": { - "meta": { - "position": "{ index } z { length }" - }, - "header": { - "player": "Odtwarzacz i jego skróty" - }, - "label": { - "clearQueue": "Wyczyść kolejkę odtwarzania", - "expandQueue": "Rozwiń kolejkę odtwarzania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", - "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", - "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", - "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", - "audioPlayer": "Odtwarzacz multimediów", - "mute": "Wycisz", - "nextTrack": "Następny utwór", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previousTrack": "Poprzedni utwór", - "shuffleQueue": "Wymieszaj swoją kolejkę", - "unmute": "Odcisz" - } - }, - "PlayButton": { - "button": { - "addToQueue": "Dodaj do kolejki odtwarzania", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "episodeDetails": "Szczegóły odcinka", - "hideArtist": "Ukryj zawartość od tego wykonawcy", - "discretePlay": "Odtwarzaj", - "playAlbum": "Odtwarzaj album", - "playArtist": "Odtwarzaj wykonawcę", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "playPlaylist": "Odtwarzaj listę odtwarzania", - "startRadio": "Odtwarzaj podobne utwory", - "playTrack": "Odtwarzaj utwór", - "playTracks": "Odtwarzaj utwory", - "report": "Zgłoś…", - "trackDetails": "Szczegóły utworu" - }, - "title": { - "more": "Więcej…", - "unavailable": "Ten utwór nie jest dostępny w żadnej z bibliotek, do których masz dostęp" - } - }, - "podcast": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "Szczegóły odcinka", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "Szczegóły utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "track": { - "Modal": { - "button": { - "addToFavorites": "Dodaj do ulubionych", - "addToPlaylist": "Dodaj do listy odtwarzania…", - "addToQueue": "Dodaj do kolejki odtwarzania", - "episodeDetails": "Szczegóły odcinka", - "playNext": "Odtwórz następny", - "playNow": "Odtwórz teraz", - "startRadio": "Odtwarzaj stację radiową", - "removeFromFavorites": "Usuń z ulubionych", - "trackDetails": "Szczegóły utworu", - "albumDetails": "Zobacz album", - "artistDetails": "Zobacz wykonawcę", - "channelDetails": "Zobacz kanał", - "seriesDetails": "Zobacz serial" - } - }, - "Table": { - "table": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "title": "Tytuł" - } - } - }, - "Widget": { - "empty": { - "noResults": "Niczego tu nie ma" - }, - "button": { - "more": "Pokaż więcej" - } - }, - "MobileRow": { - "button": { - "actions": "Wyświetl akcje dla utworu" - } - } - }, - "VolumeControl": { - "label": { - "slider": "Dostosuj głośność" - }, - "button": { - "mute": "Wycisz", - "unmute": "Odcisz" - } - }, - "SearchBar": { - "label": { - "album": "Album", - "artist": "Wykonawca", - "category": { - "federation": "Federacja", - "podcasts": "Podcasty" - }, - "search": "Szukaj treści", - "tag": "Tag", - "track": "Utwór" - }, - "link": { - "more": "Więcej wyników 🡒", - "fediverse": "Szukaj we fediverse", - "rss": "Zasubskrybuj podcast za pomocą RSS" - }, - "header": { - "noResults": "Nie znaleziono wyników" - }, - "placeholder": { - "search": "Szukaj wykonawców, albumów, utworów…" - }, - "empty": { - "noResults": "Przepraszamy, to wyszukiwanie nie zwróciło wyników" - } - }, - "Search": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "search": "Poszukaj trochę muzyki" - }, - "placeholder": { - "search": "Wykonawca, album, utwór…" - }, - "empty": { - "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", - "noArtists": "Nie znaleziono wykonawców spełniających Twoje kryteria" + "ChannelEntries": { + "help": { + "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." } }, "ChannelForm": { - "label": { - "discography": "Dyskografia wykonawcy", - "category": "Kategoria", - "image": "Obrazek kanału", - "description": "Opis", - "username": "Nazwa we Fediverse", - "language": "Język", - "name": "Nazwa", - "email": "Adres e-mail właściciela", - "owner": "Nazwa posiadacza", - "podcast": "Podcasty", - "subcategory": "Podkategoria", - "tags": "Tagi" - }, - "placeholder": { - "name": "Wspaniała nazwa kanału", - "username": "wspaniałanazwakanału" - }, "header": { "error": "Wystąpił błąd podczas zapisywania kanału" }, "help": { - "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "discography": "Opublikuj muzykę którą tworzysz, jako fajną dyskografię podzieloną na albumy i single.", + "podcast": "Publikuj swoje odcinki i informuj o tym swoją społeczność na bieżąco.", "podcastFields": "Używane do wypełnienia pól itunes:email oraz itunes:name wymaganych przez pewne platformy jak iTunes czy Spotify.", "username": "Używana w adresie URL i do obserwacji tego kanału we Fediverse. Nie możesz zmienić jej później." }, + "label": { + "category": "Kategoria", + "description": "Opis", + "discography": "Dyskografia wykonawcy", + "email": "Adres e-mail właściciela", + "image": "Obrazek kanału", + "language": "Język", + "name": "Nazwa", + "owner": "Nazwa posiadacza", + "podcast": "Podcasty", + "subcategory": "Podkategoria", + "tags": "Tagi", + "username": "Nazwa we Fediverse" + }, + "legend": { + "purpose": "Do czego używany będzie ten kanał?" + }, "loader": { "loading": "Ładowanie" }, - "legend": { - "purpose": "Do czego używany będzie ten kanał?" + "placeholder": { + "name": "Wspaniała nazwa kanału", + "username": "wspaniałanazwakanału" } }, - "LibraryFollowButton": { - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "unfollow": "Przestań obserwować" - } - }, - "EmbedWizard": { - "button": { - "copy": "Kopiuj" - }, - "help": { - "embed": "Wklej ten kod do źródła HTML swojej strony internetowej", - "width": "Pozostaw puste, aby uzyskać elastyczny widget", - "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia." - }, - "label": { - "embed": "Kod osadzenia", - "height": "Wysokość widgetu", - "width": "Szerokość widgetu" - }, - "header": { - "preview": "Podgląd" - }, - "warning": { - "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." - }, - "message": { - "copy": "Skopiowano tekst do schowka!" + "ChannelSerieCard": { + "meta": { + "episodes": "{ n } epizod | { n } epizody" } }, "ChannelSeries": { @@ -687,28 +401,1055 @@ "showMore": "Pokaż więcej" } }, - "ChannelEntries": { + "EmbedWizard": { + "button": { + "copy": "Kopiuj" + }, + "header": { + "preview": "Podgląd" + }, "help": { - "subscribe": "Powinieneś śledzić ten kanał, aby zobaczyć jego zawartość." + "anonymous": "Skontaktuj się z administracją i poproś o zmianę odpowiedniego ustawienia.", + "embed": "Wklej ten kod do źródła HTML swojej strony internetowej", + "width": "Pozostaw puste, aby uzyskać elastyczny widget" + }, + "label": { + "embed": "Kod osadzenia", + "height": "Wysokość widgetu", + "width": "Szerokość widgetu" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "warning": { + "anonymous": "Udostępnianie nie będzie działało ponieważ ta instancja nie pozwala anonimowym użytkownikom na dostęp do treści." } + }, + "LibraryFollowButton": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "unfollow": "Przestań obserwować" + } + }, + "PlayButton": { + "button": { + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "discretePlay": "Odtwarzaj", + "episodeDetails": "Szczegóły odcinka", + "hideArtist": "Ukryj zawartość od tego wykonawcy", + "playAlbum": "Odtwarzaj album", + "playArtist": "Odtwarzaj wykonawcę", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "playPlaylist": "Odtwarzaj listę odtwarzania", + "playTrack": "Odtwarzaj utwór", + "playTracks": "Odtwarzaj utwory", + "report": "Zgłoś…", + "startRadio": "Odtwarzaj podobne utwory", + "trackDetails": "Szczegóły utworu" + }, + "title": { + "more": "Więcej…", + "unavailable": "Ten utwór nie jest dostępny w żadnej z bibliotek, do których masz dostęp" + } + }, + "Player": { + "header": { + "player": "Odtwarzacz i jego skróty" + }, + "label": { + "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", + "audioPlayer": "Odtwarzacz multimediów", + "clearQueue": "Wyczyść kolejkę odtwarzania", + "expandQueue": "Rozwiń kolejkę odtwarzania", + "loopingDisabled": "Zapętlanie jest wyłączone. Naciśnij, aby przełączyć na zapętlanie jednego utworu.", + "loopingSingle": "Zapętlanie jednego utworu jest włączone. Naciśnij, aby przełączyć na zapętlanie całej kolejki odtwarzania.", + "loopingWholeQueue": "Zapętlanie całej kolejki jest włączone. Naciśnij, aby wyłączyć zapętlanie.", + "mute": "Wycisz", + "nextTrack": "Następny utwór", + "pause": "Wstrzymaj", + "play": "Odtwarzaj", + "previousTrack": "Poprzedni utwór", + "shuffleQueue": "Wymieszaj swoją kolejkę", + "unmute": "Odcisz" + }, + "meta": { + "position": "{ index } z { length }" + } + }, + "Search": { + "empty": { + "noAlbums": "Nie znaleziono albumu spełniającego Twoje kryteria", + "noArtists": "Nie znaleziono wykonawców spełniających Twoje kryteria" + }, + "header": { + "albums": "Albumy", + "artists": "Artyści", + "search": "Poszukaj trochę muzyki" + }, + "placeholder": { + "search": "Wykonawca, album, utwór…" + } + }, + "SearchBar": { + "empty": { + "noResults": "Przepraszamy, to wyszukiwanie nie zwróciło wyników" + }, + "header": { + "noResults": "Nie znaleziono wyników" + }, + "label": { + "album": "Album", + "artist": "Wykonawca", + "category": { + "federation": "Federacja", + "podcasts": "Podcasty" + }, + "search": "Szukaj treści", + "tag": "Tag", + "track": "Utwór" + }, + "link": { + "fediverse": "Szukaj we fediverse", + "more": "Więcej wyników 🡒", + "rss": "Zasubskrybuj podcast za pomocą RSS" + }, + "placeholder": { + "search": "Szukaj wykonawców, albumów, utworów…" + } + }, + "VolumeControl": { + "button": { + "mute": "Wycisz", + "unmute": "Odcisz" + }, + "label": { + "slider": "Dostosuj głośność" + } + }, + "album": { + "Card": { + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "artist": { + "Card": { + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + } + } + }, + "podcast": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "Szczegóły odcinka", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "Szczegóły utworu" + } + } + }, + "track": { + "MobileRow": { + "button": { + "actions": "Wyświetl akcje dla utworu" + } + }, + "Modal": { + "button": { + "addToFavorites": "Dodaj do ulubionych", + "addToPlaylist": "Dodaj do listy odtwarzania…", + "addToQueue": "Dodaj do kolejki odtwarzania", + "albumDetails": "Zobacz album", + "artistDetails": "Zobacz wykonawcę", + "channelDetails": "Zobacz kanał", + "episodeDetails": "Szczegóły odcinka", + "playNext": "Odtwórz następny", + "playNow": "Odtwórz teraz", + "removeFromFavorites": "Usuń z ulubionych", + "seriesDetails": "Zobacz serial", + "startRadio": "Odtwarzaj stację radiową", + "trackDetails": "Szczegóły utworu" + } + }, + "Table": { + "table": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "title": "Tytuł" + } + } + }, + "Widget": { + "button": { + "more": "Pokaż więcej" + }, + "empty": { + "noResults": "Niczego tu nie ma" + } + } + } + }, + "auth": { + "ApplicationEdit": { + "button": { + "regenerateToken": "Stwórz nowy token" + }, + "header": { + "appDetails": "Szczegóły aplikacji", + "editApp": "Edytuj aplikację" + }, + "help": { + "appDetails": "Identyfikator i sekret aplikacji są danymi wrażliwymi i powinny być traktowane jak hasła. Nie powinieneś się nimi z nikim dzielić." + }, + "label": { + "accessToken": "Token dostępowy", + "appId": "Identyfikator aplikacji", + "appSecret": "Sekret aplikacji" + }, + "link": { + "settings": "Wróć do ustawień" + }, + "title": "Edytuj aplikację" + }, + "ApplicationForm": { + "button": { + "create": "Utwórz aplikację", + "update": "Zapisz aplikację" + }, + "header": { + "failure": "Nie udało się zapisać Twoich zmian" + }, + "help": { + "redirectUri": "Użyj \"urn:ietf:wg:oauth:2.0:oob\" jako URI przekierowania, jeśli twoja aplikacja nie jest dostępna w sieci web." + }, + "label": { + "name": "Nazwa", + "redirectUri": "Adres URI przekierowania", + "scopes": { + "description": "Zaznaczenie nadrzędnych zakresów dostępu „Odczyt” lub „Zapis” umożliwia dostęp do wszystkich odpowiednich zakresów podrzędnych.", + "read": { + "description": "Dostęp do odczytu danych użytkownika", + "label": "Odczyt" + }, + "write": { + "description": "Dostęp do zapisu danych użytkownika", + "label": "Zapis" + } + } + } + }, + "ApplicationNew": { + "link": { + "settings": "Wróć do ustawień" + }, + "title": "Utwórz nową aplikację" + }, + "Authorize": { + "button": { + "authorize": "Autoryzuj { app }" + }, + "header": { + "access": "Aplikacja { app } chciałaby uzyskać dostęp do twojego konta Funkwhale", + "allScopes": "Pełen dostęp", + "authorize": "Autoryzuj zewnętrzną aplikację", + "authorizeFailure": "Wystąpił błąd podczas autoryzowania aplikacji", + "fetchFailure": "Wystąpił błąd podczas pobierania danych aplikacji", + "readOnly": "Tylko do odczytu", + "writeOnly": "Tylko do zapisu" + }, + "help": { + "copyCode": "Pokazany zostanie kod do wklejenia w aplikacji.", + "pasteCode": "Wklej następujący kod do aplikacji:", + "redirect": "Zostaniesz przekierowany na { 0 }" + }, + "message": { + "unknownPermissions": "Aplikacja prosi też o następujące nieznane uprawnienia:" + }, + "title": "Autoryzuj aplikację" + }, + "LoginForm": { + "button": { + "login": "Zaloguj się" + }, + "header": { + "loginFailure": "Nie udało się Cię zalogować" + }, + "help": { + "approvalRequired": "Jeżeli niedawno się rejestrowałeś, może być koniecznie odczekanie, aż zespół moderujący rozpatrzy twoją aplikację.", + "invalidCredentials": "Upewnij się, że Twoja kombinacja nazwy użytkownika i hasła są poprawne oraz zweryfikuj poprawność adresu e-mail." + }, + "label": { + "password": "Hasło", + "username": "Nazwa użytkownika lub adres e-mail" + }, + "link": { + "createAccount": "Utwórz konto", + "resetPassword": "Zresetuj hasło" + }, + "placeholder": { + "username": "Wprowadź swoją nazwę użytkownika lub adres e-mail" + } + }, + "Logout": { + "button": { + "logout": "Tak, wyloguj mnie!" + }, + "header": { + "confirm": "Czy na pewno chcesz się wylogować?", + "unauthenticated": "Nie jesteś obecnie zalogowany(-a)" + }, + "link": { + "login": "Zaloguj się!" + }, + "message": { + "loggedIn": "Jesteś obecnie zalogowany jako { username }" + }, + "title": "Wyloguj się" + }, + "Plugin": { + "button": { + "save": "Zapisz", + "scan": "Skanuj" + }, + "description": { + "library": "Biblioteka, do której pliki powinny zostać zaimportowane." + }, + "header": { + "failure": "Wystąpił błąd podczas zapisywania rozszerzenia" + }, + "label": { + "library": "Biblioteka", + "pluginEnabled": "Włączony" + }, + "link": { + "documentation": "Dokumentacja" + } + }, + "Settings": { + "button": { + "delete": "Usuń", + "deleteAccount": "Usuń moje konto…", + "deleteAccountConfirm": "Usuń moje konto", + "disableSubsonic": "Wyłącz dostęp", + "edit": "Edytuj", + "password": "Zmień hasło", + "refresh": "Odśwież", + "remove": "Usuń", + "removeApp": "Usuń aplikację", + "revoke": "Odwołaj", + "revokeAccess": "Odwołaj dostęp", + "update": "Zapisz", + "updateSettings": "Zapisz ustawienia" + }, + "description": { + "authorizedApps": "To jest lista aplikacji, które mają dostęp do informacji Twojego konta.", + "changeEmail": "Zmień adres e-mail powiązany z tym kontem. Na nowy adres zostanie wysłane potwierdzenie.", + "changePassword": { + "paragraph1": "Zmiana Twojego hasła zmieni też hasło do API Subsonic, jeśli je uzyskałeś(-aś).", + "paragraph2": "Będziesz musiał zaktualizować hasło w aplikacjach które go używają." + }, + "contentFilters": "Filtry treści pomogą Ci ukryć treści, których nie chcesz widzieć w serwisie.", + "deleteAccount": "Możesz permanentnie i nieodwracalnie skasować swoje konto i wszystkie powiązane informacje używając pól poniżej. Zostaniesz poproszony o potwierdzenie tej czynności.", + "plugins": "Użyj rozszerzeń do Funkwhale i zyskaj dodatkowe funkcjonalności.", + "yourApps": "To jest lista aplikacji, które zarejestrowałeś(-aś)." + }, + "header": { + "accountFailure": "Nie udało się usunąć Twojego konta", + "accountSettings": "Ustawienia konta", + "authorizedApps": "Autoryzowane aplikacje", + "avatar": "Awatar", + "avatarFailure": "Nie można było zapisać twojego awatara", + "changeEmail": "Zmień swój adres e-mail", + "changePassword": "Zmień swoje hasło", + "contentFilters": "Filtry treści", + "deleteAccount": "Usuń moje konto", + "emailFailure": "Nie udało się zmienić Twojego adresu e-mail", + "hiddenArtists": "Ukryci wykonawcy", + "noApps": "Żadna aplikacja nie jest połączona z Twoim kontem.", + "noPersonalApps": "Nie zarejestrowałeś jeszcze żadnej aplikacji.", + "passwordFailure": "Twoje hasło nie mogło zostać zmienione", + "plugins": "Rozszerzenia", + "settingsUpdated": "Zapisano ustawienia", + "updateFailure": "Twoje ustawienia nie mogły zostać zapisane", + "yourApps": "Twoje aplikacje" + }, + "help": { + "changePassword": "Upewnij się, że Twoje hasło jest poprawne", + "noApps": "Jeśli zezwolisz jakimś zewnętrznym aplikacjom na dostęp do twoich danych, te aplikacje pojawią się tutaj.", + "noPersonalApps": "Zarejestruj jakąś, aby zintegrować Funkwhale z innymi aplikacjami." + }, + "label": { + "avatar": "Awatar", + "currentPassword": "Aktualne hasło", + "newEmail": "Nowy adres e-mail", + "newPassword": "Nowe hasło", + "password": "Hasło" + }, + "link": { + "managePlugins": "Zarządzaj rozszerzeniami", + "newApp": "Zarejestruj nową aplikację" + }, + "message": { + "confirmDelete": "Żądanie o usunięcie konta zostało przesłane. Twoje konto i powiązane z nim treści zostaną wkrótce usunięte", + "currentEmail": "Twój obecny adres e-mail to { email }." + }, + "modal": { + "changePassword": { + "content": { + "logout": "Zostaniesz wylogowany i będziesz musiał zalogować się nowym hasłem", + "subsonic": "Twoje hasło do API Subsonic zostanie zmienione na nowe, losowe i zostaniesz wylogowany z urządzeń korzystających ze starego hasła do API Subsonic", + "warning": "Zmiana hasła będzie miała następujące konsekwencje:" + }, + "header": "Zmienić Twoje hasło?" + }, + "deleteAccount": { + "content": { + "warning": "To jest nieodwracalne i permanentnie usunie Twoje dane z naszych serwerów. Zostaniesz natychmiast wylogowany(-a)." + }, + "header": "Czy na pewno chcesz usunąć swoje konto?" + }, + "deleteApp": { + "content": { + "warning": "To permanentnie usunie aplikację i wszystkie powiązane tokeny." + }, + "header": "Usunąć aplikację „{ application }”?" + }, + "revokeApp": { + "content": { + "warning": "To uniemożliwi tej aplikacji dostęp do usługi w Twoim imieniu." + }, + "header": "Czy odwołać dostęp dla aplikacji „{ application }”?" + } + }, + "table": { + "artists": { + "header": { + "creationDate": "Data utworzenia", + "name": "Nazwa" + } + }, + "authorizedApps": { + "header": { + "application": "Aplikacja", + "permissions": "Uprawnienia" + } + }, + "yourApps": { + "header": { + "application": "Aplikacja", + "creationDate": "Data utworzenia", + "scopes": "Zakresy dostępu" + } + } + }, + "title": "Ustawienia konta", + "warning": { + "deleteAccount": "Twoje konto zostanie usunięte z naszych serwerów w ciągu kilku minut. Poinformujemy też inne serwery, które mogą mieć kopię twoich danych, aby przystąpiły do usuwania. Weź pod uwagę, że niektóre serwery mogą być wyłączone, albo nie chcieć współpracować." + } + }, + "SignupForm": { + "button": { + "create": "Utwórz konto" + }, + "header": { + "login": "Zaloguj się na swoje konto Funkwhale", + "signupFailure": "Twoje konto nie mogło zostać utworzone." + }, + "label": { + "email": "Adres e-mail", + "password": "Hasło", + "username": "Nazwa użytkownika" + }, + "message": { + "accountCreated": "Twoje konto zostało stworzone z powodzeniem. Zweryfikuj swój adres e-mail przed próbą logowania.", + "awaitingReview": "Twoja aplikacja o konto została przesłana. Zostaniesz poinformowany za pomocą wiadomości e-mail kiedy zespół moderacyjny ją rozpatrzy.", + "registrationClosed": "Publiczna rejestracja na tej instancji nie jest aktywna. Potrzebujesz zaproszenia, aby się zarejestrować.", + "requiresReview": "Rejestrowanie się na tej instancji jest dozwolone, ale wymaga zatwierdzenia przez jednego z moderatorów." + }, + "placeholder": { + "email": "Wprowadź swój adres e-mail", + "invitation": "Wprowadź swój kod zaproszenia (wielkość znaków nie ma znaczenia)", + "username": "Wprowadź swoją nazwę użytkownika" + } + }, + "SubsonicTokenForm": { + "button": { + "confirmDisable": "Wyłącz dostęp", + "confirmNewPassword": "Poproś o hasło", + "disable": "Wyłącz dostęp Subsonic", + "newPassword": "Poproś o nowe hasło" + }, + "description": { + "subsonic": { + "paragraph1": "Funkwhale jest kompatybilny z innymi odtwarzaczami muzycznymi obsługującymi API Subsonic.", + "paragraph2": "Możesz użyć tego, aby cieszyć się swoją muzyką w trybie offline, na przykład na smartfonie czy tablecie.", + "paragraph3": "Korzystanie z Funkwhale za pomocą tych aplikacji wymaga jednak oddzielnego hasła, które możesz ustawić poniżej." + } + }, + "header": { + "error": "Błąd", + "subsonic": "Hasło do API Subsonic" + }, + "label": { + "subsonicField": "Twoje hasło do API Subsonic" + }, + "link": { + "apps": "Odkryj, jak korzystać z Funkwhale za pomocą innych aplikacji" + }, + "message": { + "accessDisabled": "Dostęp wyłączony", + "passwordUpdated": "Zaktualizowano hasło", + "unavailable": "API Subsonic nie jest dostępne na tej instancji Funkwhale." + }, + "modal": { + "disableSubsonic": { + "content": { + "warning": "To całkowicie wyłączy dostęp do API Subsonic z tego konta." + }, + "header": "Wyłączyć dostęp do API Subsonic?" + }, + "newPassword": { + "content": { + "warning": "To wyloguje Cię z urządzeń na których jesteś obecnie zalogowany." + }, + "header": "Poprosić o nowe hasło do API Subsonic?" + } + } + } + }, + "channels": { + "AlbumForm": { + "header": { + "error": "Wystąpił błąd podczas tworzenia" + }, + "label": { + "albumTitle": "Tytuł" + } + }, + "AlbumModal": { + "button": { + "cancel": "Anuluj", + "create": "Utwórz" + }, + "header": { + "newAlbum": "Nowy album", + "newSeries": "Nowy serial" + } + }, + "AlbumSelect": { + "label": { + "album": "Album", + "series": "Seriale" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + }, + "option": { + "none": "Nic" + } + }, + "LicenseSelect": { + "label": { + "license": "Licencja" + }, + "link": { + "license": "O tej licencji" + }, + "option": { + "none": "Nic" + } + }, + "SubscribeButton": { + "help": { + "auth": "Musisz być zalogowany, aby obserwować ten kanał" + }, + "title": { + "subscribe": "Obserwuj", + "unsubscribe": "Przestań obserwować" + } + }, + "UploadForm": { + "button": { + "edit": "Edytuj", + "ignore": "Ignoruj", + "remove": "Usuń", + "resume": "Wznów", + "retry": "Spróbuj ponownie" + }, + "description": { + "extensions": "Wspierane rozszerzenia: { extensions }" + }, + "header": { + "error": "Wystąpił błąd podczas publikowania" + }, + "help": { + "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." + }, + "label": { + "channel": "Kanał", + "openBrowser": "Przeglądaj…" + }, + "message": { + "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", + "pending": "Masz jakieś pliki oczekujące na publikację." + }, + "status": { + "errored": "Zakończono błędem", + "pending": "W toku", + "uploading": "Przesyłanie" + }, + "warning": { + "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." + } + }, + "UploadMetadataForm": { + "label": { + "description": "Opis", + "image": "Obrazek utworu", + "position": "Pozycja", + "tags": "Tagi", + "title": "Tytuł" + } + }, + "UploadModal": { + "button": { + "cancel": "Anuluj", + "close": "Zamknij", + "finishLater": "Ukończ później", + "next": "Następny krok", + "previous": "Poprzedni krok", + "publish": "Opublikuj", + "update": "Zaktualizuj" + }, + "header": { + "processing": "Przetwarzanie przesłanych plików", + "publish": "Publikuj audio", + "uploadDetails": "Szczegóły pliku", + "uploadFiles": "Pliki do przesłania" + }, + "meta": { + "files": "{ n } plik | { n } pliki", + "quota": "Pozostałe wolne miejsce:" + } + } + }, + "common": { + "ActionTable": { + "button": { + "allSelected": "Wybrano { n } element | Wybrano { n } elementy", + "go": "Wykonaj", + "launch": "Wykonaj", + "refresh": "Odśwież zawartość tabeli", + "select": "Wybierz", + "selectAll": "Zaznacz wszystkie elementy", + "selectCurrentPage": "Zaznacz tylko obecną stronę", + "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", + "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }" + }, + "header": { + "error": "Wystąpił błąd podczas aplikowania działania" + }, + "label": { + "actions": "Działania", + "performAction": "Wykonaj akcje" + }, + "message": { + "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść", + "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach" + }, + "modal": { + "performAction": { + "content": { + "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdź dwukrotnie czy to na pewno to, czego chcesz." + }, + "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?" + } + } + }, + "AttachmentInput": { + "button": { + "remove": "Usuń" + }, + "header": { + "failure": "Nie można było zapisać twojego załącznika" + }, + "help": { + "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." + }, + "label": { + "upload": "Prześlij nowy obraz…" + }, + "loader": { + "uploading": "Przesyłanie pliku…" + } + }, + "CollapseLink": { + "button": { + "collapse": "Zwiń", + "expand": "Rozwiń" + } + }, + "ContentForm": { + "button": { + "preview": "Podgląd", + "write": "Zapisz" + }, + "empty": { + "noContent": "Nie ma nic do podglądu." + }, + "help": { + "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." + }, + "placeholder": { + "input": "Napisz tutaj kilka słów…" + } + }, + "CopyInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "success": "Skopiowano tekst do schowka!" + } + }, + "DangerousButton": { + "button": { + "cancel": "Anuluj", + "confirm": "Potwierdź" + }, + "header": { + "confirm": "Czy chcesz potwierdzić to działanie?" + } + }, + "Duration": { + "meta": { + "hours": "{ hours } godz. { minutes } min", + "minutes": "{ minutes } min" + } + }, + "EmptyState": { + "button": { + "refresh": "Odśwież" + }, + "header": { + "noResults": "Nic nie znaleziono." + } + }, + "ExpandableDiv": { + "button": { + "less": "Pokaż mniej", + "more": "Pokaż więcej" + } + }, + "InlineSearchBar": { + "button": { + "clear": "Wyczyść" + }, + "label": { + "search": "Szukaj" + }, + "placeholder": { + "search": "Szukaj…" + } + }, + "LoginModal": { + "description": { + "noAccess": "Nie masz dostępu!" + }, + "header": { + "unauthenticated": "Nie uwierzytelniono" + }, + "link": { + "login": "Zaloguj się", + "signup": "Zarejestruj się" + } + }, + "RenderedDescription": { + "button": { + "cancel": "Anuluj", + "edit": "Edytuj", + "less": "Pokaż mniej", + "more": "Pokaż więcej", + "update": "Zapisz opis" + }, + "empty": { + "noDescription": "Żaden opis nie jest dostępny" + }, + "header": { + "failure": "Wystąpił błąd podczas aktualizowania opisu" + } + }, + "UserMenu": { + "label": { + "language": "Język", + "shortcuts": "Skróty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "Pokój czatowy", + "docs": "Dokumentacja", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + }, + "UserModal": { + "button": { + "switchInstance": "Skorzystaj z innej instancji" + }, + "header": { + "options": "Opcje" + }, + "label": { + "language": "Język", + "shortcuts": "Skróty klawiszowe", + "theme": "Motyw" + }, + "link": { + "about": "O tej instancji", + "chat": "Pokój czatowy", + "forum": "Forum dyskusyjne", + "git": "Zgłoś problem", + "login": "Zaloguj się", + "logout": "Wyloguj się", + "notifications": "Powiadomienia", + "profile": "Profil", + "settings": "Ustawienia", + "signup": "Zarejestruj się", + "support": "Podręcznik pomocy" + } + } + }, + "favorites": { + "List": { + "empty": { + "noFavorites": "Nie dodałeś jeszcze żadnych utworów do Twoich ulubionych" + }, + "header": { + "favorites": "{ n } polubienie | { n } polubienia" + }, + "link": { + "library": "Przeglądaj bibliotekę" + }, + "loader": { + "loading": "Ładowanie Twoich ulubionych…" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "title": "Twoje ulubione" + }, + "TrackFavoriteIcon": { + "button": { + "add": "Dodaj do ulubionych", + "remove": "Usuń z ulubionych" + }, + "label": { + "inFavorites": "W ulubionych" + } + } + }, + "federation": { + "FetchButton": { + "button": { + "close": "Zamknij", + "reload": "Zamknij i odśwież stronę" + }, + "description": { + "failure": "Podczas próby odświeżenia danych wystąpił błąd:", + "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone później.", + "skipped": "Zdalny serwer odpowiedział, ale zwrócił nie wspierane przez Funkwhale dane.", + "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera." + }, + "header": { + "failure": "Błąd odswieżania", + "pending": "Odświeżanie w toku", + "refresh": "Odświeżanie obiektu z serwera zdalnego…", + "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", + "skipped": "Odświeżanie zostało pominięte", + "success": "Odświeżanie zakończone sukcesem" + }, + "loader": { + "awaitingResult": "Ładowanie zdalnych wyników…", + "fetchRequest": "Pobieranie…" + }, + "table": { + "error": { + "label": { + "detail": "Szczegóły błędu", + "type": "Typ błędu" + }, + "value": { + "connectionError": "Nie można połączyć się ze zdalnym serwerem", + "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", + "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", + "invalidAttributesError": "Dane zwrócone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", + "invalidJsonError": "Zdalny serwer zwrócił dane nie będące poprawnym JSON lub JSON-LD", + "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", + "unknownError": "Nieznany błąd" + } + } + } + }, + "LibraryWidget": { + "button": { + "showMore": "Pokaż więcej" + }, + "empty": { + "noMatch": "Nie znaleziono pasującej biblioteki." + } + } + }, + "forms": { + "PasswordInput": { + "button": { + "copy": "Kopiuj" + }, + "message": { + "copy": "Skopiowano tekst do schowka!" + }, + "title": "Pokaż/ukryj hasło" } }, "library": { "AlbumBase": { + "link": { + "addDescription": "Dodaj opis…" + }, "meta": { "episodes": "{ n } epizod | { n } epizody", "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "addDescription": "Dodaj opis…" } }, - "ArtistBase": { - "meta": { - "tracks": "{ n } utwór w | { n } utwory w", - "albums": "{ n } albumie | { n } albumach" + "AlbumDetail": { + "description": { + "libraries": "Ten album występuje w następujących bibliotekach:" }, - "title": "Wykonawca", + "header": { + "episodes": "Odcinki", + "libraries": "Powiązane biblioteki", + "tracks": "Utwory" + }, + "meta": { + "volume": "Płyta { number }" + } + }, + "AlbumDropdown": { + "button": { + "cancel": "Anuluj", + "delete": "Usuń…", + "edit": "Edytuj", + "embed": "Osadź", + "more": "Więcej…" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + }, + "embed": { + "header": "Osadź ten album na swojej stronie internetowej" + } + } + }, + "AlbumEdit": { + "header": { + "edit": "Edytuj ten album", + "suggest": "Zasugeruj zmiany w tym albumie" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Albums": { + "button": { + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj albumy" + }, + "label": { + "search": "Szukaj", + "tags": "Tagi" + }, + "link": { + "addMusic": "Dodaj trochę muzyki" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Wprowadź tytuł albumu…" + }, + "title": "Albumy" + }, + "ArtistBase": { "button": { "cancel": "Anuluj", "edit": "Edytuj", @@ -716,76 +1457,186 @@ "more": "Więcej…", "play": "Odtwarzaj wszystkie albumy" }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "musicbrainz": "Zobacz na MusicBrainz", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "meta": { + "albums": "{ n } albumie | { n } albumach", + "tracks": "{ n } utwór w | { n } utwory w" + }, "modal": { "embed": { "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" } }, + "title": "Wykonawca" + }, + "ArtistDetail": { + "button": { + "filter": "Usuń filtr", + "more": "Załaduj więcej…" + }, + "description": { + "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" + }, + "header": { + "album": "Albumy tego wykonawcy", + "library": "Powiązane biblioteki", + "track": "Nowe utwory tego wykonawcy" + }, "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" + "filter": "Przejrzyj moje filtry" + }, + "message": { + "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." } }, - "radios": { - "Builder": { - "header": { - "matches": "{ n } utwór zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", - "builder": "Budowanie", - "created": "Utworzono stację radiową", - "updated": "Zaktualizowano stację radiową" + "ArtistEdit": { + "header": { + "edit": "Edytuj tego wykonawcę", + "suggest": "Zasugeruj zmiany w tym wykonawcy" + }, + "message": { + "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." + } + }, + "Artists": { + "button": { + "search": "Szukaj", + "upload": "Dodaj trochę muzyki" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj wykonawców" + }, + "label": { + "excludeCompilation": "Wyklucz wykonawców składanek", + "search": "Nazwa wykonawcy", + "tags": "Tagi" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" }, - "table": { - "filter": { - "header": { - "actions": "Działania", - "candidates": "Kandydaci", - "config": "Konfiguracja", - "exclude": "Wyklucz", - "name": "Nazwa filtra" - } - } + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Szukaj…" + }, + "title": "Artyści" + }, + "EditCard": { + "button": { + "approve": "Zatwierdź", + "delete": "Usuń", + "reject": "Odrzuć" + }, + "header": { + "modification": "Edycja { id }" + }, + "link": { + "track": "Utwór #{ id } - { name }" + }, + "modal": { + "content": { + "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." }, - "button": { - "filter": "Dodaj filtr", - "save": "Zapisz" - }, - "label": { - "filter": "Dodaj filtry, aby dostosować swoją stację radiową", - "description": "Opis", - "public": "Wyświetlaj publicznie", - "name": "Nazwa stacji radiowej" - }, - "placeholder": { - "description": "Mój wspaniały opis", - "name": "Moja wspaniała stacja radiowa" - }, - "title": "Tworzenie stacji radiowej", - "option": { - "filter": "Wybierz filtr" - }, - "description": { - "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, która będzie odtwarzać tylko utwory pasujące do Twoich kryteriów." + "delete": { + "header": "Usunąć tę sugestię?" } }, - "Filter": { - "cancelButton": "Anuluj", - "excludeLabel": "Wyklucz", - "removeButton": "Usuń", - "matchingTracksModalHeader": "Utwory zgodne z filtrem" + "status": { + "applied": "Zatwierdzono i zastosowano", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "table": { + "update": { + "header": { + "field": "Pole", + "newValue": "Nowa wartość", + "oldValue": "Poprzednia wartość" + }, + "notApplicable": "Niedostępne" + } + } + }, + "EditForm": { + "button": { + "cancel": "Anuluj", + "clear": "Wyczyść", + "new": "Prześlij kolejne zmiany", + "reset": "Przywróć wartość domyślną", + "showAll": "Pokaż wszystkie edycje", + "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", + "submit": "Prześlij i zastosuj zmiany", + "suggest": "Prześlij sugestię" + }, + "empty": { + "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania zmian", + "recentEdits": "Ostatnie edycje", + "success": "Twoje zmiany zostały przesłane pomyślnie.", + "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie" + }, + "label": { + "summary": "Podsumowanie (opcjonalne)" + }, + "message": { + "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorów." + }, + "notApplicable": "Niedostępne", + "placeholder": { + "summary": "Kilka słów opisujących twoje zmiany." } }, "FileUpload": { - "tooltip": { - "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", - "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", - "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plików to { extensions }", - "retry": "Spróbuj ponownie", - "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", - "timeout": "Przesyłanie zajęło zbyt długo, spróbuj jeszcze raz" + "button": { + "cancel": "Anuluj", + "retry": "Spróbuj przesłać ponownie nieudane" + }, + "description": { + "import": "Rezultaty twojego importu:", + "previousImport": "Rezultaty twojego poprzedniego importu:" + }, + "header": { + "failure": "Wystąpił błąd podczas importowania", + "local": "Wgraj muzykę ze swojego urządzenia", + "server": "Stan importu", + "status": "Stan importu" + }, + "label": { + "extensions": "Wspierane rozszerzenia: { extensions }", + "remainingSpace": "Pozostałe wolne miejsce", + "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania" + }, + "link": { + "picard": "Polecamy używać w tym celu Picarda.", + "processing": "Przetwarzanie", + "uploading": "Przesyłanie" + }, + "message": { + "local": { + "copyright": "Nie wgrywasz plików chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo", + "format": "Pliki, które przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", + "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", + "tag": "Pliki muzyczne które przesyłasz posiadają poprawne metadane." + } }, "table": { "upload": { @@ -802,114 +1653,96 @@ } } }, + "tooltip": { + "denied": "Plik odrzucony, upewnij się że nie jest zbyt duży i że nie przekroczyłeś swojego limitu", + "extension": "Nieprawidłowy typ pliku. Upewnij się, że przesyłasz plik audio. Wspierane typy plików to { extensions }", + "network": "Wystąpił błąd sieciowy podczas przesyłania tego pliku", + "retry": "Spróbuj ponownie", + "size": "Nie można było przesłać tego pliku. Upewnij się, że nie jest zbyt duży", + "timeout": "Przesyłanie zajęło zbyt długo, spróbuj jeszcze raz" + } + }, + "FsBrowser": { "button": { - "cancel": "Anuluj", - "retry": "Spróbuj przesłać ponownie nieudane" - }, - "label": { - "uploadWidget": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", - "remainingSpace": "Pozostałe wolne miejsce", - "extensions": "Wspierane rozszerzenia: { extensions }" - }, + "import": "Import" + } + }, + "FsLogs": { + "empty": { + "notStarted": "Importowanie jeszcze się nie rozpoczęło" + } + }, + "Home": { "header": { - "failure": "Wystąpił błąd podczas importowania", - "server": "Stan importu", - "status": "Stan importu", - "local": "Wgraj muzykę ze swojego urządzenia" + "newChannels": "Nowe kanały", + "playlists": "Listy odtwarzania", + "recentlyAdded": "Ostatnio dodane", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" }, - "link": { - "processing": "Przetwarzanie", - "uploading": "Przesyłanie", - "picard": "Polecamy używać w tym celu Picarda." + "title": "Biblioteka" + }, + "ImportStatusModal": { + "button": { + "close": "Zamknij" }, - "description": { - "import": "Rezultaty twojego importu:", - "previousImport": "Rezultaty twojego poprzedniego importu:" - }, - "message": { - "local": { - "format": "Pliki, które przesyłasz, są w formacie OGG, FLAC, MP3 lub AIFF", - "tag": "Pliki muzyczne które przesyłasz posiadają poprawne metadane.", - "message": "Za chwilę dodasz utwory do swojej biblioteki. Zanim kontynuujesz, upewnij się że:", - "copyright": "Nie wgrywasz plików chronionych prawem autorskim do publicznej biblioteki, w przeciwnym wypadku możesz łamać prawo" + "error": { + "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", + "invalidMetadata": { + "label": "Nieprawidłowe metadane", + "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." + }, + "unknownError": { + "label": "Nieznany błąd", + "message": "Wystąpił nieznany błąd" } - } - }, - "EditForm": { - "placeholder": { - "summary": "Kilka słów opisujących twoje zmiany." - }, - "button": { - "cancel": "Anuluj", - "clear": "Wyczyść", - "reset": "Przywróć wartość domyślną", - "showUnreviewed": "Ogranicz do nierozpatrzonych edycji", - "showAll": "Pokaż wszystkie edycje", - "submit": "Prześlij i zastosuj zmiany", - "new": "Prześlij kolejne zmiany", - "suggest": "Prześlij sugestię" }, "header": { - "failure": "Wystąpił błąd podczas przesyłania zmian", - "recentEdits": "Ostatnie edycje", - "unreviewed": "Ostatnie propozycje zmian czekające na rozpatrzenie", - "success": "Twoje zmiany zostały przesłane pomyślnie." + "importDetail": "Szczegóły importu" }, - "notApplicable": "Niedostępne", - "empty": { - "suggestEdit": "Zaproponuj zmiany przy użyciu poniższego formularza." - }, - "label": { - "summary": "Podsumowanie (opcjonalne)" + "link": { + "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu", + "support": "Otwórz wątek pomocy (do wiadomości dołącz informacje dla programistów)" }, "message": { - "noPermission": "Nie masz uprawnień do edycji tego obiektu, ale możesz zasugerować zmiany. Po przesłaniu sugestie zostaną rozpatrzone przez moderatorów." + "importDetail": "Przetwarzanie przesłanych plików nadal jest w toku.", + "importSuccess": "Plik został pomyślnie przetworzony przez serwer." + }, + "table": { + "error": { + "debug": "Informacje dla programistów", + "errorDetail": "Szczegóły błędu", + "errorType": "Typ błędu", + "help": "Uzyskiwanie pomocy" + } + }, + "warning": { + "importSkipped": "Plik został pominięty, ponieważ podobny utwór jest już dostępny w jednej z bibliotek." } }, - "Albums": { - "link": { - "addMusic": "Dodaj trochę muzyki" - }, - "title": "Albumy", - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj albumy" - }, - "placeholder": { - "search": "Wprowadź tytuł albumu…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { + "Podcasts": { + "button": { + "cancel": "Anuluj", + "channel": "Utwórz nowy kanał", + "feed": "Zasubskrybuj kanał RSS", "search": "Szukaj", - "tags": "Tagi" + "subscribe": "Obserwuj" }, - "button": { - "search": "Szukaj" - } - }, - "Artists": { - "button": { - "upload": "Dodaj trochę muzyki", - "search": "Szukaj" + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj podcasty" }, "label": { - "search": "Nazwa wykonawcy", - "excludeCompilation": "Wyklucz wykonawców składanek", + "search": "Tytuł podcastu", "tags": "Tagi" }, - "title": "Artyści", + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -918,20 +1751,107 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj wykonawców" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, "placeholder": { "search": "Szukaj…" + }, + "title": "Podcasty" + }, + "Radios": { + "button": { + "add": "Utwórz stację radiową", + "create": "Utwórz własną stację radiową" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj stacje radiowe", + "instance": "Stacje radiowe instancji", + "user": "Stacje radiowe użytkowników" + }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyniki na stronie" + }, + "placeholder": { + "search": "Wprowadź nazwę stacji radiowej…" + }, + "title": "Stacje radiowe" + }, + "TagDetail": { + "header": { + "channels": "Kanały", + "tracks": "Utwory" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "moderation": "Otwórz w interfejsie moderacyjnym" } }, + "TagSelector": { + "placeholder": { + "search": "Szukaj…" + } + }, + "TrackBase": { + "button": { + "cancel": "Anuluj", + "delete": "Usuń…", + "download": "Pobierz", + "edit": "Edytuj", + "embed": "Osadź", + "more": "Więcej…", + "play": "Odtwarzaj" + }, + "link": { + "discogs": "Wyszukaj na Discogs", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "wikipedia": "Wyszukaj na Wikipedii" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten utwór zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwór?" + }, + "embed": { + "header": "Osadź ten utwór na swojej stronie internetowej" + } + }, + "title": "Utwór" + }, "TrackDetail": { + "description": { + "library": "Ten utwór występuje w następujących bibliotekach:" + }, + "header": { + "episode": "Szczegóły odcinka", + "library": "Powiązane biblioteki", + "playlists": "Powiązane listy odtwarzania", + "release": "Szczegóły wydania", + "track": "Szczegóły utworu" + }, + "link": { + "musicbrainz": "Zobacz na MusicBrainz" + }, + "notApplicable": "Niedostępne", "table": { "release": { "album": "Album", @@ -951,272 +1871,6 @@ "duration": "Czas trwania", "size": "Rozmiar" } - }, - "header": { - "episode": "Szczegóły odcinka", - "library": "Powiązane biblioteki", - "playlists": "Powiązane listy odtwarzania", - "release": "Szczegóły wydania", - "track": "Szczegóły utworu" - }, - "notApplicable": "Niedostępne", - "description": { - "library": "Ten utwór występuje w następujących bibliotekach:" - }, - "link": { - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TagDetail": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "header": { - "channels": "Kanały", - "tracks": "Utwory" - } - }, - "ArtistDetail": { - "header": { - "album": "Albumy tego wykonawcy", - "track": "Nowe utwory tego wykonawcy", - "library": "Powiązane biblioteki" - }, - "button": { - "more": "Załaduj więcej…", - "filter": "Usuń filtr" - }, - "link": { - "filter": "Przejrzyj moje filtry" - }, - "description": { - "library": "Utwory tego wykonawcy występują w następujących bibliotekach:" - }, - "message": { - "filter": "Obecnie ukrywasz treści powiązane z tym wykonawcą." - } - }, - "ImportStatusModal": { - "error": { - "importFailure": "Wystąpił błąd podczas przetwarzania przesłanego pliku. Więcej informacji znajdziesz poniżej.", - "unknownError": { - "message": "Wystąpił nieznany błąd", - "label": "Nieznany błąd" - }, - "invalidMetadata": { - "label": "Nieprawidłowe metadane", - "message": "Metadane zawarte w tym pliku są nieprawidłowe lub brakuje części wymaganych informacji." - } - }, - "button": { - "close": "Zamknij" - }, - "table": { - "error": { - "debug": "Informacje dla programistów", - "errorDetail": "Szczegóły błędu", - "errorType": "Typ błędu", - "help": "Uzyskiwanie pomocy" - } - }, - "header": { - "importDetail": "Szczegóły importu" - }, - "link": { - "support": "Otwórz wątek pomocy (do wiadomości dołącz informacje dla programistów)", - "documentation": "Przeczytaj naszą dokumentację dotyczącą tego błędu" - }, - "message": { - "importDetail": "Przetwarzanie przesłanych plików nadal jest w toku.", - "importSuccess": "Plik został pomyślnie przetworzony przez serwer." - }, - "warning": { - "importSkipped": "Plik został pominięty, ponieważ podobny utwór jest już dostępny w jednej z bibliotek." - } - }, - "EditCard": { - "button": { - "approve": "Zatwierdź", - "delete": "Usuń", - "reject": "Odrzuć" - }, - "status": { - "approved": "Zatwierdzono", - "applied": "Zatwierdzono i zastosowano", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "modal": { - "delete": { - "header": "Usunąć tę sugestię?" - }, - "content": { - "warning": "Sugestia zostanie całkowicie usunięta. To działanie jest nieodwracalne." - } - }, - "table": { - "update": { - "header": { - "field": "Pole", - "newValue": "Nowa wartość", - "oldValue": "Poprzednia wartość" - }, - "notApplicable": "Niedostępne" - } - }, - "header": { - "modification": "Edycja { id }" - }, - "link": { - "track": "Utwór #{ id } - { name }" - } - }, - "Podcasts": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj podcasty" - }, - "button": { - "cancel": "Anuluj", - "channel": "Utwórz nowy kanał", - "search": "Szukaj", - "subscribe": "Obserwuj", - "feed": "Zasubskrybuj kanał RSS" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "label": { - "search": "Tytuł podcastu", - "tags": "Tagi" - }, - "title": "Podcasty", - "pagination": { - "results": "Wyniki na stronie" - }, - "placeholder": { - "search": "Szukaj…" - }, - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - }, - "Radios": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "header": { - "browse": "Przeglądaj stacje radiowe", - "instance": "Stacje radiowe instancji", - "user": "Stacje radiowe użytkowników" - }, - "button": { - "add": "Utwórz stację radiową", - "create": "Utwórz własną stację radiową" - }, - "placeholder": { - "search": "Wprowadź nazwę stacji radiowej…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, - "title": "Stacje radiowe", - "pagination": { - "results": "Wyniki na stronie" - }, - "label": { - "search": "Szukaj" - } - }, - "AlbumDropdown": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń…", - "edit": "Edytuj", - "embed": "Osadź", - "more": "Więcej…" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź ten album na swojej stronie internetowej" - } - }, - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }", - "musicbrainz": "Zobacz na MusicBrainz" - } - }, - "TrackBase": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń…", - "download": "Pobierz", - "edit": "Edytuj", - "embed": "Osadź", - "more": "Więcej…", - "play": "Odtwarzaj" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwór?", - "content": { - "warning": "Ten utwór zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź ten utwór na swojej stronie internetowej" - } - }, - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "discogs": "Wyszukaj na Discogs", - "wikipedia": "Wyszukaj na Wikipedii", - "django": "Zobacz w panelu administracyjnym Django", - "domain": "Zobacz na { domain }" - }, - "title": "Utwór" - }, - "AlbumEdit": { - "header": { - "edit": "Edytuj ten album", - "suggest": "Zasugeruj zmiany w tym albumie" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." - } - }, - "ArtistEdit": { - "header": { - "edit": "Edytuj tego wykonawcę", - "suggest": "Zasugeruj zmiany w tym wykonawcy" - }, - "message": { - "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, "TrackEdit": { @@ -1228,49 +1882,67 @@ "remote": "Ten obiekt jest zarządzany przez inną instancję, nie możesz go edytować." } }, - "AlbumDetail": { - "header": { - "episodes": "Odcinki", - "tracks": "Utwory", - "libraries": "Powiązane biblioteki" + "radios": { + "Builder": { + "button": { + "filter": "Dodaj filtr", + "save": "Zapisz" + }, + "description": { + "builder": "Możesz użyć tego interfejsu, aby utworzyć własną stację radiową, która będzie odtwarzać tylko utwory pasujące do Twoich kryteriów." + }, + "header": { + "builder": "Budowanie", + "created": "Utworzono stację radiową", + "matches": "{ n } utwór zgodny z wybranymi filtrami | { n } utwory zgodne z wybranymi filtrami", + "updated": "Zaktualizowano stację radiową" + }, + "label": { + "description": "Opis", + "filter": "Dodaj filtry, aby dostosować swoją stację radiową", + "name": "Nazwa stacji radiowej", + "public": "Wyświetlaj publicznie" + }, + "option": { + "filter": "Wybierz filtr" + }, + "placeholder": { + "description": "Mój wspaniały opis", + "name": "Moja wspaniała stacja radiowa" + }, + "table": { + "filter": { + "header": { + "actions": "Działania", + "candidates": "Kandydaci", + "config": "Konfiguracja", + "exclude": "Wyklucz", + "name": "Nazwa filtra" + } + } + }, + "title": "Tworzenie stacji radiowej" }, - "description": { - "libraries": "Ten album występuje w następujących bibliotekach:" - }, - "meta": { - "volume": "Płyta { number }" - } - }, - "FsBrowser": { - "button": { - "import": "Import" - } - }, - "FsLogs": { - "empty": { - "notStarted": "Importowanie jeszcze się nie rozpoczęło" - } - }, - "Home": { - "title": "Biblioteka", - "header": { - "newChannels": "Nowe kanały", - "playlists": "Listy odtwarzania", - "recentlyAdded": "Ostatnio dodane", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - }, - "TagSelector": { - "placeholder": { - "search": "Szukaj…" + "Filter": { + "cancelButton": "Anuluj", + "excludeLabel": "Wyklucz", + "matchingTracksModalHeader": "Utwory zgodne z filtrem", + "removeButton": "Usuń" } } }, - "favorites": { - "List": { - "header": { - "favorites": "{ n } polubienie | { n } polubienia" + "manage": { + "ChannelsTable": { + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "option": { + "all": "Wszystkie" }, "ordering": { "direction": { @@ -1280,573 +1952,274 @@ }, "label": "Porządkowanie" }, - "link": { - "library": "Przeglądaj bibliotekę" - }, - "loader": { - "loading": "Ładowanie Twoich ulubionych…" - }, - "empty": { - "noFavorites": "Nie dodałeś jeszcze żadnych utworów do Twoich ulubionych" - }, "pagination": { - "results": "Wyniki na stronie" - }, - "title": "Twoje ulubione" - }, - "TrackFavoriteIcon": { - "button": { - "add": "Dodaj do ulubionych", - "remove": "Usuń z ulubionych" - }, - "label": { - "inFavorites": "W ulubionych" - } - } - }, - "channels": { - "UploadModal": { - "meta": { - "files": "{ n } plik | { n } pliki", - "quota": "Pozostałe wolne miejsce:" - }, - "button": { - "cancel": "Anuluj", - "close": "Zamknij", - "finishLater": "Ukończ później", - "next": "Następny krok", - "previous": "Poprzedni krok", - "publish": "Opublikuj", - "update": "Zaktualizuj" - }, - "header": { - "uploadFiles": "Pliki do przesłania", - "processing": "Przetwarzanie przesłanych plików", - "publish": "Publikuj audio", - "uploadDetails": "Szczegóły pliku" - } - }, - "AlbumSelect": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "label": { - "album": "Album", - "series": "Seriale" - }, - "option": { - "none": "Nic" - } - }, - "LicenseSelect": { - "link": { - "license": "O tej licencji" - }, - "label": { - "license": "Licencja" - }, - "option": { - "none": "Nic" - } - }, - "UploadForm": { - "help": { - "license": "Wybierz na jakiej licencji będą dostępne zamieszczone treści, aby zapewnić pewne wolności swojej publice." - }, - "label": { - "openBrowser": "Przeglądaj…", - "channel": "Kanał" - }, - "message": { - "dragAndDrop": "Przeciągnij i upuść pliki lub katalogi bądź po prostu kliknij, aby wybrać pliki do przesłania", - "pending": "Masz jakieś pliki oczekujące na publikację." - }, - "button": { - "edit": "Edytuj", - "ignore": "Ignoruj", - "remove": "Usuń", - "resume": "Wznów", - "retry": "Spróbuj ponownie" - }, - "header": { - "error": "Wystąpił błąd podczas publikowania" - }, - "status": { - "errored": "Zakończono błędem", - "pending": "W toku", - "uploading": "Przesyłanie" - }, - "description": { - "extensions": "Wspierane rozszerzenia: { extensions }" - }, - "warning": { - "quota": "Nie masz więcej wolnego miejsca na swoje pliki. Skontaktuj się z moderatorem celem zwiększenia przydziału lub usuń trochę treści." - } - }, - "AlbumModal": { - "button": { - "cancel": "Anuluj", - "create": "Utwórz" - }, - "header": { - "newAlbum": "Nowy album", - "newSeries": "Nowy serial" - } - }, - "UploadMetadataForm": { - "label": { - "description": "Opis", - "position": "Pozycja", - "tags": "Tagi", - "title": "Tytuł", - "image": "Obrazek utworu" - } - }, - "AlbumForm": { - "header": { - "error": "Wystąpił błąd podczas tworzenia" - }, - "label": { - "albumTitle": "Tytuł" - } - }, - "SubscribeButton": { - "title": { - "subscribe": "Obserwuj", - "unsubscribe": "Przestań obserwować" - }, - "help": { - "auth": "Musisz być zalogowany, aby obserwować ten kanał" - } - } - }, - "AboutPod": { - "stat": { - "hoursOfMusic": "godzina muzyki | godziny muzyki", - "activeUsers": "aktywny użytkownik | aktywni użytkownicy", - "albumsCount": "album | albumy", - "artistsCount": "wykonawca | wykonawców", - "listeningsCount": "odsłuchania | odsłuchania", - "tracksCount": "utwór | utwory" - }, - "title": "O tej instancji", - "link": { - "about": "O tej instancji", - "features": "Informacje dodatkowe", - "introduction": "Wprowadzenie", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "header": { - "about": "O tej instancji", - "contact": "Kontakt", - "features": "Informacje dodatkowe", - "rules": "Reguły", - "statistics": "Statystyki", - "terms": "Regulamin i polityka prywatności" - }, - "feature": { - "allowList": "Lista zezwoleń", - "anonymousAccess": "Anonimowy dostęp", - "status": { - "closed": "Zamknięte", - "disabled": "Wyłączony", - "enabled": "Włączone", - "open": "Otwarte" - }, - "federation": "Federacja", - "version": "Wersja Funkwhale", - "registrations": "Rejestracje", - "quota": "Limit przestrzeni" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "noDescription": "Opis nie jest dostępny.", - "noRules": "Nie ustalono reguł.", - "noTerms": "Nie ustalono warunków." - }, - "message": { - "contact": "Wyślij nam wiadomość e-mail: {'{{'} contactEmail {'}}'}" - } - }, - "common": { - "ActionTable": { - "button": { - "selected": "Wybrano { n } z { total } | Wybrano { n } z { total }", - "allSelected": "Wybrano { n } element | Wybrano { n } elementy", - "go": "Wykonaj", - "launch": "Wykonaj", - "refresh": "Odśwież zawartość tabeli", - "select": "Wybierz", - "selectAll": "Zaznacz wszystkie elementy", - "selectElement": "Zaznacz jeden element | Zaznacz wszystkie { n } elementy", - "selectCurrentPage": "Zaznacz tylko obecną stronę" - }, - "message": { - "success": "Działanie { action } zostało pomyślnie wykonane na { n } elemencie | Działanie { action } zostało pomyślnie wykonane na { n } elementach", - "needsRefresh": "Treść została zaktualizowana - odśwież, aby zobaczyć aktualną treść" - }, - "label": { - "actions": "Działania", - "performAction": "Wykonaj akcje" - }, - "modal": { - "performAction": { - "header": "Czy chcesz wykonać działanie { action } na { n } elemencie? | Czy chcesz wykonać działanie { action } na { n } elementach?", - "content": { - "warning": "Może to wpływać na wiele rzeczy lub mieć nieodwracalne skutki, sprawdź dwukrotnie czy to na pewno to, czego chcesz." - } - } - }, - "header": { - "error": "Wystąpił błąd podczas aplikowania działania" - } - }, - "Duration": { - "meta": { - "hours": "{ hours } godz. { minutes } min", - "minutes": "{ minutes } min" - } - }, - "UserMenu": { - "link": { - "about": "O tej instancji", - "chat": "Pokój czatowy", - "docs": "Dokumentacja", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "Skróty klawiszowe", - "language": "Język", - "theme": "Motyw" - } - }, - "UserModal": { - "link": { - "about": "O tej instancji", - "chat": "Pokój czatowy", - "forum": "Forum dyskusyjne", - "support": "Podręcznik pomocy", - "git": "Zgłoś problem", - "login": "Zaloguj się", - "logout": "Wyloguj się", - "notifications": "Powiadomienia", - "profile": "Profil", - "settings": "Ustawienia", - "signup": "Zarejestruj się" - }, - "label": { - "shortcuts": "Skróty klawiszowe", - "language": "Język", - "theme": "Motyw" - }, - "header": { - "options": "Opcje" - }, - "button": { - "switchInstance": "Skorzystaj z innej instancji" - } - }, - "DangerousButton": { - "button": { - "cancel": "Anuluj", - "confirm": "Potwierdź" - }, - "header": { - "confirm": "Czy chcesz potwierdzić to działanie?" - } - }, - "RenderedDescription": { - "button": { - "cancel": "Anuluj", - "edit": "Edytuj", - "less": "Pokaż mniej", - "more": "Pokaż więcej", - "update": "Zapisz opis" - }, - "header": { - "failure": "Wystąpił błąd podczas aktualizowania opisu" - }, - "empty": { - "noDescription": "Żaden opis nie jest dostępny" - } - }, - "InlineSearchBar": { - "button": { - "clear": "Wyczyść" - }, - "label": { - "search": "Szukaj" + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { - "search": "Szukaj…" - } - }, - "CollapseLink": { - "button": { - "collapse": "Zwiń", - "expand": "Rozwiń" - } - }, - "CopyInput": { - "button": { - "copy": "Kopiuj" - }, - "message": { - "success": "Skopiowano tekst do schowka!" - } - }, - "LoginModal": { - "link": { - "login": "Zaloguj się", - "signup": "Zarejestruj się" - }, - "header": { - "unauthenticated": "Nie uwierzytelniono" - }, - "description": { - "noAccess": "Nie masz dostępu!" - } - }, - "ContentForm": { - "help": { - "markdown": "Formatowanie za pomocą składni Markdown jest wspierane." - }, - "empty": { - "noContent": "Nie ma nic do podglądu." - }, - "button": { - "preview": "Podgląd", - "write": "Zapisz" - }, - "placeholder": { - "input": "Napisz tutaj kilka słów…" - } - }, - "EmptyState": { - "header": { - "noResults": "Nic nie znaleziono." - }, - "button": { - "refresh": "Odśwież" - } - }, - "AttachmentInput": { - "help": { - "upload": "PNG lub JPG. Rozdzielczość powinna mieścić się w przedziale między 1400x1400px a 3000x3000px. Maksymalny rozmiar pliku to 5 MB." - }, - "button": { - "remove": "Usuń" - }, - "label": { - "upload": "Prześlij nowy obraz…" - }, - "loader": { - "uploading": "Przesyłanie pliku…" - }, - "header": { - "failure": "Nie można było zapisać twojego załącznika" - } - }, - "ExpandableDiv": { - "button": { - "less": "Pokaż mniej", - "more": "Pokaż więcej" - } - } - }, - "playlists": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - } - }, - "PlaylistModal": { - "warning": { - "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." - }, - "button": { - "addDuplicate": "Dodaj mimo to", - "addToPlaylist": "Dodaj do tej listy odtwarzania", - "addTrack": "Dodaj utwór", - "cancel": "Anuluj", - "edit": "Edytuj" - }, - "header": { - "addToPlaylist": "Dodaj do listy odtwarzania", - "available": "Dostępne listy odtwarzania", - "manage": "Zarządzaj listami odtwarzania", - "noResults": "Nie ma żadnych wyników zgodnych z Twoim filtrem", - "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania" + "search": "Szukaj za pomocą domeny, nazwy, konta…" }, "table": { - "edit": { + "channel": { "header": { - "edit": "Edytuj", - "lastModification": "Ostatnia modyfikacja", + "account": "Konto", + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", "name": "Nazwa", "tracks": "Utwory" } } - }, - "placeholder": { - "filterPlaylist": "Wprowadź nazwę listy odtwarzania" - }, - "label": { - "filter": "Filtr" - }, - "empty": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } }, - "Editor": { - "button": { - "addDuplicate": "Dodaj mimo to", - "clear": "Wyczyść listę odtwarzania", - "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", - "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwór) | Dodaj z kolejki odtwarzania ({ n } utwory)" - }, - "error": { - "sync": "Podczas zapisywania twoich zmian wystąpił błąd" - }, - "message": { - "sync": "Zsynchronizowano zmiany z serwerem" - }, - "modal": { - "clearPlaylist": { - "header": "Czy chcesz wyczyścić listę odtwarzania „{ playlist }”?", - "content": { - "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + "library": { + "AlbumsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainz…" + }, + "table": { + "album": { + "header": { + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Tytuł", + "releaseDate": "Data wydania", + "tracks": "Utwory" + } } } }, - "help": { - "reorder": "Przeciągnij i upuść aby zmienić kolejność utworów w liście odtwarzania" - }, - "header": { - "editor": "Edytor list odtwarzania" - }, - "warning": { - "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" - }, - "loading": { - "sync": "Synchronizowanie zmian z serwerem…" - } - }, - "TrackPlaylistIcon": { - "button": { - "add": "Dodaj do listy odtwarzania…" - } - }, - "Form": { - "header": { - "createPlaylist": "Utwórz nową listę odtwarzania", - "createSuccess": "Utworzono listę odtwarzania", - "updateSuccess": "Zaktualizowano listę odtwarzania", - "createFailure": "Nie można było utworzyć listy odtwarzania" - }, - "button": { - "create": "Utwórz listę odtwarzania", - "update": "Zapisz listę odtwarzania" - }, - "placeholder": { - "name": "Moja wspaniała lista odtwarzania" - }, - "label": { - "name": "Nazwa listy odtwarzania", - "visibility": "Widoczność listy odtwarzania" - } - }, - "Widget": { - "button": { - "create": "Utwórz listę odtwarzania", - "more": "Pokaż więcej" - }, - "placeholder": { - "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" - } - } - }, - "notifications": { - "NotificationRow": { - "message": { - "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", - "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", - "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" - }, - "button": { - "approve": "Zatwierdź", - "markRead": "Oznacz jako przeczytane", - "markUnread": "Oznacz jako nieprzeczytane", - "reject": "Odrzuć" - } - } - }, - "Sidebar": { - "link": { - "about": "O tej instancji", - "albums": "Albumy", - "artists": "Artyści", - "browse": "Przeglądaj", - "channels": "Kanały", - "createAccount": "Utwórz konto", - "favorites": "Ulubione", - "home": "Strona główna", - "library": "Biblioteka", - "login": "Zaloguj się", - "moderation": "Moderacja", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "search": "Szukaj", - "settings": "Ustawienia", - "users": "Użytkownicy" - }, - "label": { - "add": "Dodaj zawartość", - "administration": "Administracja", - "language": "Język", - "main": "Menu główne", - "follows": "Oczekujące prośby o obserwowanie", - "edits": "Edycje oczekujące na rozpatrzenie", - "play": "Odtwarzaj ten utwór", - "theme": "Motyw" - }, - "header": { - "administration": "Administracja", - "explore": "Odkrywaj", - "main": "Główna nawigacja", - "more": "Więcej", - "library": "Moja biblioteka" - } - }, - "manage": { - "library": { - "UploadsTable": { + "ArtistsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "category": "Kategoria", + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainz…" + }, "table": { - "upload": { + "artist": { + "header": { + "albums": "Albumy", + "creationDate": "Data utworzenia", + "domain": "Domena", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "EditsCardList": { + "label": { + "status": "Stan" + }, + "option": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "Oczekuje na rozpatrzenie", + "rejected": "Odrzucono" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domeny…" + } + }, + "LibrariesTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "option": { + "all": "Wszystkie" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu…" + }, + "table": { + "library": { "header": { - "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", + "followers": "Obserwatorzy", "name": "Nazwa", - "size": "Rozmiar", + "uploads": "Przesłane pliki", "visibility": "Widoczność" } } + } + }, + "TagsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + } }, + "label": { + "search": "Szukaj" + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy" + }, + "table": { + "tag": { + "header": { + "albums": "Albumy", + "artists": "Artyści", + "creationDate": "Data utworzenia", + "name": "Nazwa", + "tracks": "Utwory" + } + } + } + }, + "TracksTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainz…" + }, + "table": { + "track": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "creationDate": "Data utworzenia", + "domain": "Domena", + "license": "Licencja", + "title": "Tytuł" + } + } + } + }, + "UploadsTable": { + "action": { + "delete": { + "label": "Usuń", + "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." + } + }, + "label": { + "search": "Szukaj", + "status": "Stan", + "visibility": "Widoczność" + }, + "link": { + "local": "Lokalne" + }, + "notApplicable": "Niedostępne", "option": { "all": "Wszystkie", "failed": "Zakończony błędem", @@ -1862,396 +2235,68 @@ }, "label": "Porządkowanie" }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany plik zostanie usunięty. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj", - "status": "Stan", - "visibility": "Widoczność" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu, źródła…" }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "LibrariesTable": { "table": { - "library": { + "upload": { "header": { + "accessedDate": "Data dostępu", "account": "Konto", "creationDate": "Data utworzenia", "domain": "Domena", - "followers": "Obserwatorzy", + "importStatus": "Stan importu", + "library": "Biblioteka", "name": "Nazwa", - "uploads": "Przesłane pliki", + "size": "Rozmiar", "visibility": "Widoczność" } } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrana biblioteka zostanie usunięta wraz z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "label": { - "search": "Szukaj", - "visibility": "Widoczność" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, użytkownika, nazwy, opisu…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "TracksTable": { - "table": { - "track": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "license": "Licencja", - "title": "Tytuł" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane utwory zostaną usunięte wraz z powiązanymi polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, artysty, albumu, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "ArtistsTable": { - "table": { - "artist": { - "header": { - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "TagsTable": { - "table": { - "tag": { - "header": { - "albums": "Albumy", - "artists": "Artyści", - "creationDate": "Data utworzenia", - "name": "Nazwa", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrany tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "EditsCardList": { - "option": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "Oczekuje na rozpatrzenie", - "rejected": "Odrzucono" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domeny…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - }, - "label": { - "status": "Stan" - } - }, - "AlbumsTable": { - "table": { - "album": { - "header": { - "artist": "Wykonawca", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Tytuł", - "releaseDate": "Data wydania", - "tracks": "Utwory" - } - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": { - "label": "Usuń", - "warning": "Wybrane albumy zostaną usunięte wraz z powiązanymi utworami, plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - }, - "link": { - "local": "Lokalne", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "notApplicable": "Niedostępne", - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, tytułu, wykonawcy, identyfikatora MusicBrainz…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" } } }, "moderation": { - "ReportCard": { - "table": { - "object": { - "account": "Konto", - "domain": "Domena", - "local": "Lokalne", - "owner": "Posiadacz", - "type": "Rodzaj" - }, - "status": { - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "resolutionDate": "Data rozwiązania", - "resolved": "Rozwiązane", - "status": "Stan", - "unresolved": "Nierozstrzygnięte" - }, - "report": { - "category": "Kategoria", - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" + "AccountsTable": { + "action": { + "purge": { + "label": "Wyczyść" } }, - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "message": "Wiadomość", - "reportedObject": "Zgłoszony obiekt" - }, - "button": { - "confirmDelete": "Usuń", - "delete": "Usuń zgłoszony obiekt", - "resolve": "Rozwiąż", - "unresolve": "Cofnij rozwiązanie" - }, - "modal": { - "delete": { - "header": "Usunąć zgłoszony obiekt?", - "content": { - "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne", - "link": { - "moderation": "Otwórz w interfejsie moderacyjnym", - "report": "Zgłoszenie { id }", - "publicPage": "Zobacz publiczną stronę" - }, - "warning": { - "objectDeleted": "Obiekt związany z tym raportem został usunięty." - } - }, - "UserRequestCard": { - "header": { - "actions": "Działania", - "notes": "Notatki wewnętrzne", - "signup": "Wiadomość" - }, - "button": { - "approve": "Zatwierdź", - "reject": "Odrzuć" - }, - "table": { - "status": { - "approved": "Zatwierdzono", - "assignedTo": "Przypisano do", - "internalNotes": "Notatki wewnętrzne", - "pending": "W toku", - "refused": "Odrzucone", - "status": "Stan" - }, - "request": { - "creationDate": "Data utworzenia", - "submittedBy": "Przesłane przez" - } - }, - "notApplicable": "Niedostępne", - "link": { - "request": "Aplikacja { id }" - }, - "message": { - "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." - } - }, - "InstancePolicyForm": { - "header": { - "addRule": "Dodaj nową regułę moderacji", - "editRule": "Edytuj regułę moderacyjną", - "failure": "Wystąpił błąd podczas tworzenia reguły" - }, "label": { - "blockAll": "Zablokuj wszystko", - "policyDisabled": "Wyłączony", - "policyEnabled": "Włączony", - "silenceActivity": "Wycisz aktywność", - "silenceNotifications": "Wycisz powiadomienia", - "customizeRule": "lub dostosuj swoją regułę", - "policyReason": "Powód", - "rejectMedia": "Odrzuć media" + "search": "Szukaj" }, - "tooltip": { - "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", - "rejectMedia": "Nie pobieraj żadnych plików multimedialnych (audio, okładka albumu, awatar konta…) z tego konta lub domeny. To usunie również istniejącą zawartość.", - "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje również możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomóc użytkownikom zrozumieć powód dodania reguły.", - "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", - "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", - "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie." + "link": { + "local": "Konto lokalne" }, - "button": { - "cancel": "Anuluj", - "create": "Utwórz", - "delete": "Usuń", - "confirm": "Usuń regułę moderacyjną", - "update": "Zapisz" + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" }, - "modal": { - "delete": { - "header": "Usunąć tę regułę moderacyjną?", - "content": { - "warning": "To działanie jest nieodwracalne." - } - } - } - }, - "NoteForm": { - "button": { - "add": "Dodaj notatkę" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { - "summary": "np. Opisz, jakie działania zostały podjęte…" + "search": "Szukaj za pomocą domeny, nazwy, opisu…" }, - "header": { - "failure": "Wystąpił błąd podczas przesyłania notatki" + "table": { + "account": { + "header": { + "domain": "Domena", + "firstSeen": "Widziany po raz pierwszy", + "lastSeen": "Ostatnia aktywność", + "moderationRule": "Pod regułą moderacyjną", + "name": "Nazwa", + "uploads": "Przesłane pliki" + }, + "moderationRule": "Tak" + } } }, "DomainsTable": { @@ -2266,6 +2311,16 @@ "label": "Usuń z listy zezwoleń" } }, + "empty": { + "noPods": "Nie znaleziono innych instancji" + }, + "label": { + "inList": "Jest obecny na liście zezwoleń", + "search": "Szukaj" + }, + "link": { + "list": "Ta domena jest obecna na Twojej liście zezwoleń" + }, "option": { "all": "Wszystkie", "no": "Nie", @@ -2279,76 +2334,32 @@ }, "label": "Porządkowanie" }, - "table": { - "domain": { - "header": { - "firstSeen": "Widziany po raz pierwszy", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "moderationRule": "Pod regułą moderacyjną", - "users": "Użytkownicy" - }, - "moderationRule": "Tak" - } - }, - "label": { - "inList": "Jest obecny na liście zezwoleń", - "search": "Szukaj" - }, - "empty": { - "noPods": "Nie znaleziono innych instancji" + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" }, "placeholder": { "search": "Szukaj za pomocą nazwy…" }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - }, - "link": { - "list": "Ta domena jest obecna na Twojej liście zezwoleń" - } - }, - "AccountsTable": { - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, "table": { - "account": { + "domain": { "header": { - "domain": "Domena", "firstSeen": "Widziany po raz pierwszy", - "lastSeen": "Ostatnia aktywność", - "name": "Nazwa", "moderationRule": "Pod regułą moderacyjną", - "uploads": "Przesłane pliki" + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "users": "Użytkownicy" }, "moderationRule": "Tak" } - }, - "link": { - "local": "Konto lokalne" - }, - "action": { - "purge": { - "label": "Wyczyść" - } - }, - "label": { - "search": "Szukaj" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, opisu…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" } }, "InstancePolicyCard": { + "button": { + "edit": "Edytuj" + }, + "header": { + "rule": "Reguła" + }, "label": { "blockAll": "Zablokuj wszystko", "muteActivity": "Wycisz aktywność", @@ -2356,15 +2367,49 @@ "reason": "Powód", "rejectMedia": "Odrzuć media" }, - "button": { - "edit": "Edytuj" - }, "status": { "enabled": "Włączone", "paused": "Wstrzymane" + } + }, + "InstancePolicyForm": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń regułę moderacyjną", + "create": "Utwórz", + "delete": "Usuń", + "update": "Zapisz" }, "header": { - "rule": "Reguła" + "addRule": "Dodaj nową regułę moderacji", + "editRule": "Edytuj regułę moderacyjną", + "failure": "Wystąpił błąd podczas tworzenia reguły" + }, + "label": { + "blockAll": "Zablokuj wszystko", + "customizeRule": "lub dostosuj swoją regułę", + "policyDisabled": "Wyłączony", + "policyEnabled": "Włączony", + "policyReason": "Powód", + "rejectMedia": "Odrzuć media", + "silenceActivity": "Wycisz aktywność", + "silenceNotifications": "Wycisz powiadomienia" + }, + "modal": { + "delete": { + "content": { + "warning": "To działanie jest nieodwracalne." + }, + "header": "Usunąć tę regułę moderacyjną?" + } + }, + "tooltip": { + "blockAll": "Zablokuj wszystko z tego konta lub domeny. To uniemożliwi jakąkolwiek interakcję z jednostką i usunie powiązaną zawartość (przesłane pliki, biblioteki, obserwowane itp.)", + "isActive": "Użyj tego ustawienia, aby tymczasowo włączyć/wyłączyć politykę zarazem nie usuwając jej całkowicie.", + "rejectMedia": "Nie pobieraj żadnych plików multimedialnych (audio, okładka albumu, awatar konta…) z tego konta lub domeny. To usunie również istniejącą zawartość.", + "silenceActivity": "Ukryj zawartość konta lub domeny (pomijając obserwowane).", + "silenceNotifications": "Nie wywołuj powiadomień związanych z kontami lub domenami (pomijając obserwowane).", + "summary": "Wyjaśnij, dlaczego stosujesz tę politykę - to pomoże ci zapamiętać czemu dodałeś tę regułę. Istnieje również możliwość (zależnie od konfiguracji instancji) publicznego wyświetlania tej informacji, żeby pomóc użytkownikom zrozumieć powód dodania reguły." } }, "InstancePolicyModal": { @@ -2374,117 +2419,172 @@ }, "modal": { "manage": { - "header": "Zarządzaj regułami moderacyjnymi dla { obj }", "content": { "warning": "Ta jednostka podlega specyficznym regułom moderacyjnym" - } + }, + "header": "Zarządzaj regułami moderacyjnymi dla { obj }" } } }, + "NoteForm": { + "button": { + "add": "Dodaj notatkę" + }, + "header": { + "failure": "Wystąpił błąd podczas przesyłania notatki" + }, + "placeholder": { + "summary": "np. Opisz, jakie działania zostały podjęte…" + } + }, "NotesThread": { "button": { "delete": "Usuń" }, "modal": { "delete": { - "header": "Usunąć tę notatkę?", "content": { "warning": "Notatka zostanie usunięta. To działanie jest nieodwracalne." - } - } - } - } - }, - "ChannelsTable": { - "table": { - "channel": { - "header": { - "account": "Konto", - "albums": "Albumy", - "creationDate": "Data utworzenia", - "domain": "Domena", - "name": "Nazwa", - "tracks": "Utwory" + }, + "header": "Usunąć tę notatkę?" } } }, - "option": { - "all": "Wszystkie" - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" + "ReportCard": { + "button": { + "confirmDelete": "Usuń", + "delete": "Usuń zgłoszony obiekt", + "resolve": "Rozwiąż", + "unresolve": "Cofnij rozwiązanie" }, - "label": "Porządkowanie" + "header": { + "actions": "Działania", + "message": "Wiadomość", + "notes": "Notatki wewnętrzne", + "reportedObject": "Zgłoszony obiekt" + }, + "link": { + "moderation": "Otwórz w interfejsie moderacyjnym", + "publicPage": "Zobacz publiczną stronę", + "report": "Zgłoszenie { id }" + }, + "modal": { + "delete": { + "content": { + "warning": "To usunie obiekt związany z tym raportem i zaznaczy raport jako rozwiązany. Usunięcie jest nieodwracalne." + }, + "header": "Usunąć zgłoszony obiekt?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "object": { + "account": "Konto", + "domain": "Domena", + "local": "Lokalne", + "owner": "Posiadacz", + "type": "Rodzaj" + }, + "report": { + "category": "Kategoria", + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "resolutionDate": "Data rozwiązania", + "resolved": "Rozwiązane", + "status": "Stan", + "unresolved": "Nierozstrzygnięte" + } + }, + "warning": { + "objectDeleted": "Obiekt związany z tym raportem został usunięty." + } }, - "label": { - "category": "Kategoria", - "search": "Szukaj" - }, - "link": { - "local": "Lokalne", - "moderation": "Otwórz w interfejsie moderacyjnym" - }, - "placeholder": { - "search": "Szukaj za pomocą domeny, nazwy, konta…" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" + "UserRequestCard": { + "button": { + "approve": "Zatwierdź", + "reject": "Odrzuć" + }, + "header": { + "actions": "Działania", + "notes": "Notatki wewnętrzne", + "signup": "Wiadomość" + }, + "link": { + "request": "Aplikacja { id }" + }, + "message": { + "signup": "Ten użytkownik chce się zarejestrować na Twojej instancji." + }, + "notApplicable": "Niedostępne", + "table": { + "request": { + "creationDate": "Data utworzenia", + "submittedBy": "Przesłane przez" + }, + "status": { + "approved": "Zatwierdzono", + "assignedTo": "Przypisano do", + "internalNotes": "Notatki wewnętrzne", + "pending": "W toku", + "refused": "Odrzucone", + "status": "Stan" + } + } } }, "users": { - "UsersTable": { + "InvitationForm": { + "button": { + "clear": "Wyczyść", + "new": "Uzyskaj nowe zaproszenie" + }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia zaproszenia" + }, + "label": { + "invite": "Kod zaproszenia" + }, + "placeholder": { + "invitation": "Pozostaw puste, aby wygenerować kod" + }, "table": { - "user": { + "invitation": { "header": { - "accountStatus": "Stan konta", - "email": "Adres E-mail", - "lastActivity": "Ostatnia aktywność", - "permissions": "Uprawnienia", - "signup": "Rejestracja", - "status": "Stan", - "username": "Nazwa użytkownika" - }, - "accountStatus": { - "active": "Aktywny", - "inactive": "Nieaktywny" - }, - "status": { - "admin": "Administrator", - "regular": "Zwykły użytkownik", - "staff": "Członek administracji" + "code": "Kod", + "link": "Odnośnik do udostępniania" } } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - }, - "notApplicable": "Niedostępne", - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mail…" - }, - "pagination": { - "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" } }, "InvitationsTable": { + "action": { + "delete": "Usuń" + }, + "label": { + "expired": "Wygasłe", + "search": "Szukaj", + "status": "Stan", + "unused": "Nie zużyty", + "used": "Zużyte" + }, "option": { "all": "Wszystkie", "expired": "Wygasłe/zużyte", "open": "Otwarte" }, + "ordering": { + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy, adresu e-mail, kodu…" + }, "table": { "invitation": { "header": { @@ -2495,372 +2595,250 @@ "status": "Stan" } } - }, - "action": { - "delete": "Usuń" - }, - "label": { - "expired": "Wygasłe", - "unused": "Nie zużyty", - "search": "Szukaj", - "status": "Stan", - "used": "Zużyte" - }, + } + }, + "UsersTable": { + "notApplicable": "Niedostępne", "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, "label": "Porządkowanie" }, - "placeholder": { - "search": "Szukaj za pomocą nazwy, adresu e-mail, kodu…" - }, "pagination": { "results": "Wyświetlanie jednego wyniku | Wyświetlanie wyników od { start } do { end } z { total }" - } - }, - "InvitationForm": { - "button": { - "clear": "Wyczyść", - "new": "Uzyskaj nowe zaproszenie" }, - "table": { - "invitation": { - "header": { - "code": "Kod", - "link": "Odnośnik do udostępniania" - } - } - }, - "header": { - "failure": "Wystąpił błąd podczas tworzenia zaproszenia" - }, - "label": { - "invite": "Kod zaproszenia" + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" }, "placeholder": { - "invitation": "Pozostaw puste, aby wygenerować kod" - } - } - } - }, - "admin": { - "SignupFormBuilder": { - "table": { - "additionalFields": { - "header": { - "actions": "Działania", - "label": "Etykieta pola", - "type": "Typ pola", - "required": "Wymagane" - }, - "type": { - "long": "Długi tekst", - "short": "Krótki tekst" - }, - "required": { - "false": "Nie", - "true": "Tak" + "search": "Szukaj za pomocą nazwy, adresu e-mail…" + }, + "table": { + "user": { + "accountStatus": { + "active": "Aktywny", + "inactive": "Nieaktywny" + }, + "header": { + "accountStatus": "Stan konta", + "email": "Adres E-mail", + "lastActivity": "Ostatnia aktywność", + "permissions": "Uprawnienia", + "signup": "Rejestracja", + "status": "Stan", + "username": "Nazwa użytkownika" + }, + "status": { + "admin": "Administrator", + "regular": "Zwykły użytkownik", + "staff": "Członek administracji" + } } } - }, - "button": { - "add": "Dodaj nowe pole", - "edit": "Edytuj formularz", - "preview": "Podgląd formularza" - }, - "label": { - "additionalField": "Dodatkowe pole", - "additionalFields": "Dodatkowe pola", - "delete": "Usuń", - "helpText": "Podręcznik pomocy", - "moveDown": "Przesuń w dół", - "moveUp": "Przesuń w górę" - }, - "help": { - "additionalFields": "Dodatkowe pola do wyświetlenia w formularzu rejestracji. Ich zawartość jest widoczna tylko gdy manualna weryfikacja rejestracji jest włączona.", - "helpText": "Opcjonalny tekst, który będzie widoczny nad formularzem rejestracji." - } - }, - "SettingsGroup": { - "header": { - "image": "Aktualny obraz", - "error": "Wystąpił błąd podczas zapisywania ustawień" - }, - "button": { - "save": "Zapisz" - }, - "message": { - "success": "Pomyślnie zapisano ustawienia." } } }, "moderation": { - "ReportCategoryDropdown": { - "option": { - "all": "Wszystkie" + "FilterModal": { + "button": { + "cancel": "Anuluj", + "hide": "Ukryj zawartość" }, + "header": { + "failure": "Wystąpił błąd podczas tworzenia filtra", + "modal": "Czy chcesz ukryć zawartość od wykonawcy „{ name }”?" + }, + "help": { + "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + }, + "message": { + "success": "Filtr treści został dodany pomyślnie" + }, + "warning": { + "createFilter": { + "listIntro": "Nie będziesz więcej widział utworów, albumów oraz aktywności użytkowników powiązanej z tym wykonawcą:", + "listItem1": "W ulubionych innych użytkowników i historii odtwarzania", + "listItem2": "W panelu „Ostatnio dodane”", + "listItem3": "W wykazach wykonawców i albumów", + "listItem4": "W sugestiach radiowych" + } + } + }, + "ReportCategoryDropdown": { "label": { "category": "Kategoria" + }, + "option": { + "all": "Wszystkie" } }, "ReportModal": { + "button": { + "cancel": "Anuluj", + "submit": "Prześlij zgłoszenie" + }, + "description": { + "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu.", + "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", + "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, który się zajmie się twoim raportem.", + "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego." + }, "header": { "disabled": "Anonimowe zgłoszenia są wyłączone. Zaloguj się, aby przesłać zgłoszenie.", "modal": "Czy chcesz zgłosić ten obiekt?", "submissionFailure": "Wystąpił błąd podczas przesyłania zgłoszenia" }, - "button": { - "cancel": "Anuluj", - "submit": "Prześlij zgłoszenie" - }, "label": { "email": "Adres E-mail", "forwardToDomain": "Przekaż do { domain }", "message": "Wiadomość" }, - "description": { - "forwardToDomain": "Przekaż zanonimizowaną kopię raportu do serwera goszczącego ten element.", - "message": "Użyj tego pola, aby przybliżyć kontekst moderatorowi, który się zajmie się twoim raportem.", - "modal": "Użyj tego formularza, aby przesłać zgłoszenie do zespołu moderującego.", - "email": "Użyjemy tego adresu e-mail, jeśli zajdzie potrzeba, aby się z Tobą skontaktować odnośnie tego raportu." - }, "message": { "submissionSuccess": "Zgłoszenie zostało przesłane pomyślnie, dziękujemy" } - }, - "FilterModal": { + } + }, + "notifications": { + "NotificationRow": { "button": { - "cancel": "Anuluj", - "hide": "Ukryj zawartość" + "approve": "Zatwierdź", + "markRead": "Oznacz jako przeczytane", + "markUnread": "Oznacz jako nieprzeczytane", + "reject": "Odrzuć" }, "message": { - "success": "Filtr treści został dodany pomyślnie" - }, - "header": { - "modal": "Czy chcesz ukryć zawartość od wykonawcy „{ name }”?", - "failure": "Wystąpił błąd podczas tworzenia filtra" - }, - "warning": { - "createFilter": { - "listItem2": "W panelu „Ostatnio dodane”", - "listItem3": "W wykazach wykonawców i albumów", - "listItem1": "W ulubionych innych użytkowników i historii odtwarzania", - "listItem4": "W sugestiach radiowych", - "listIntro": "Nie będziesz więcej widział utworów, albumów oraz aktywności użytkowników powiązanej z tym wykonawcą:" - } - }, - "help": { - "createFilter": "Możesz zmieniać filtry w ustawieniach swojego konta kiedy tylko chcesz." + "libraryAcceptFollow": "{ username } zaakceptował(-a) twoją prośbę o obserwowanie biblioteki \"{ library }\"", + "libraryFollow": "{ username } zaobserwował twoją bibliotekę \"{ library }\"", + "libraryPendingFollow": "{ username } chciałby obserwować twoją bibliotekę \"{ library }\"" } } }, - "federation": { - "FetchButton": { - "description": { - "failure": "Podczas próby odświeżenia danych wystąpił błąd:", - "success": "Dane zostały pomyślnie odświeżone ze zdalnego serwera.", - "pending": "Serwer nie obsłużył żądania odświeżenia na czas. Zostanie ono przetworzone później.", - "skipped": "Zdalny serwer odpowiedział, ale zwrócił nie wspierane przez Funkwhale dane." + "playlists": { + "Card": { + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "Editor": { + "button": { + "addDuplicate": "Dodaj mimo to", + "clear": "Wyczyść listę odtwarzania", + "copy": "Skopiuj utwory z obecnej kolejki do listy odtwarzania", + "insertFromQueue": "Dodaj z kolejki odtwarzania ({ n } utwór) | Dodaj z kolejki odtwarzania ({ n } utwory)" + }, + "error": { + "sync": "Podczas zapisywania twoich zmian wystąpił błąd" + }, + "header": { + "editor": "Edytor list odtwarzania" + }, + "help": { + "reorder": "Przeciągnij i upuść aby zmienić kolejność utworów w liście odtwarzania" + }, + "loading": { + "sync": "Synchronizowanie zmian z serwerem…" + }, + "message": { + "sync": "Zsynchronizowano zmiany z serwerem" + }, + "modal": { + "clearPlaylist": { + "content": { + "warning": "To bezpowrotnie usunie wszystkie utwory z tej listy odtwarzania i nie zostać być cofnięte." + }, + "header": "Czy chcesz wyczyścić listę odtwarzania „{ playlist }”?" + } + }, + "warning": { + "duplicate": "Jakieś utwory z Twojej kolejki są już na tej liście odtwarzania:" + } + }, + "Form": { + "button": { + "create": "Utwórz listę odtwarzania", + "update": "Zapisz listę odtwarzania" + }, + "header": { + "createFailure": "Nie można było utworzyć listy odtwarzania", + "createPlaylist": "Utwórz nową listę odtwarzania", + "createSuccess": "Utworzono listę odtwarzania", + "updateSuccess": "Zaktualizowano listę odtwarzania" + }, + "label": { + "name": "Nazwa listy odtwarzania", + "visibility": "Widoczność listy odtwarzania" + }, + "placeholder": { + "name": "Moja wspaniała lista odtwarzania" + } + }, + "PlaylistModal": { + "button": { + "addDuplicate": "Dodaj mimo to", + "addToPlaylist": "Dodaj do tej listy odtwarzania", + "addTrack": "Dodaj utwór", + "cancel": "Anuluj", + "edit": "Edytuj" + }, + "empty": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" + }, + "header": { + "addFailure": "Nie udało się dodać tego utworu do listy odtwarzania", + "addToPlaylist": "Dodaj do listy odtwarzania", + "available": "Dostępne listy odtwarzania", + "manage": "Zarządzaj listami odtwarzania", + "noResults": "Nie ma żadnych wyników zgodnych z Twoim filtrem" + }, + "label": { + "filter": "Filtr" + }, + "placeholder": { + "filterPlaylist": "Wprowadź nazwę listy odtwarzania" }, "table": { - "error": { - "value": { - "httpError": "Wystąpił błąd HTTP podczas kontaktowania się ze zdalnym serwerem", - "invalidAttributesError": "Dane zwrócone przez serwer zdalny miały nieprawidłowe lub brakujące atrybuty", - "connectionError": "Nie można połączyć się ze zdalnym serwerem", - "httpStatus": "Zdalny serwer odpowiedział ze statusem HTTP { status }", - "timeoutError": "Zdalny serwer nie odpowiedział wystarczająco szybko", - "invalidJsonError": "Zdalny serwer zwrócił dane nie będące poprawnym JSON lub JSON-LD", - "unknownError": "Nieznany błąd" - }, - "label": { - "detail": "Szczegóły błędu", - "type": "Typ błędu" + "edit": { + "header": { + "edit": "Edytuj", + "lastModification": "Ostatnia modyfikacja", + "name": "Nazwa", + "tracks": "Utwory" } } }, - "button": { - "close": "Zamknij", - "reload": "Zamknij i odśwież stronę" - }, - "header": { - "saveFailure": "Wystąpił błąd podczas zapisywania ustawień", - "failure": "Błąd odswieżania", - "pending": "Odświeżanie w toku", - "success": "Odświeżanie zakończone sukcesem", - "skipped": "Odświeżanie zostało pominięte", - "refresh": "Odświeżanie obiektu z serwera zdalnego…" - }, - "loader": { - "fetchRequest": "Pobieranie…", - "awaitingResult": "Ładowanie zdalnych wyników…" + "warning": { + "duplicate": "{ 0 } jest już w liście odtwarzania { 1 }." } }, - "LibraryWidget": { - "empty": { - "noMatch": "Nie znaleziono pasującej biblioteki." - }, + "TrackPlaylistIcon": { "button": { - "showMore": "Pokaż więcej" - } - } - }, - "ShortcutsModal": { - "shortcut": { - "audio": { - "label": "Skróty odtwarzacza", - "clearQueue": "Wyczyść kolejkę odtwarzania", - "decreaseVolume": "Zmniejsz głośność", - "expandQueue": "Rozwiń kolejkę odtwarzania/widok odtwarzacza", - "increaseVolume": "Zwiększ głośność", - "playPause": "Zatrzymaj/odtwarzaj aktualny utwór", - "playNext": "Następny utwór", - "playPrevious": "Poprzedni utwór", - "seekBack30": "Cofnij o 30 sekund", - "seekBack5": "Cofnij o 5 sekund", - "seekForward30": "Pomiń 30 sekund", - "seekForward5": "Pomiń 5 sekund", - "shuffleQueue": "Wymieszaj kolejkę", - "toggleFavorite": "Dodaj lub usuń z ulubionych", - "toggleMute": "Przełącz wyciszenie", - "toggleLoop": "Włącz zapętlenie kolejki" - }, - "general": { - "focus": "Aktywuj pasek wyszukiwania", - "label": "Skróty ogólne", - "show": "Pokaż dostępne skróty klawiszowe", - "unfocus": "Dezaktywuj pasek wyszukiwania" + "add": "Dodaj do listy odtwarzania…" } }, - "button": { - "close": "Zamknij" - }, - "header": { - "modal": "Skróty klawiszowe" - } - }, - "SetInstanceModal": { - "button": { - "cancel": "Anuluj", - "submit": "Prześlij" - }, - "header": { - "chooseInstance": "Wybierz instancję", - "failure": "Nie można połączyć się z podanym adresem URL", - "suggestions": "Polecane" - }, - "label": { - "url": "Adres URL instancji" - }, - "help": { - "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", - "serverDown": "Serwer może być niedostępny", - "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do której chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji." - }, - "message": { - "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" - } - }, - "Queue": { - "button": { - "clear": "Wyczyść", - "close": "Zamknij", - "stopRadio": "Zatrzymaj radio" - }, - "label": { - "duration": "Czas trwania", - "addArtistContentFilter": "Ukryj zawartość od tego wykonawcy…", - "next": "Następny utwór", - "pause": "Wstrzymaj", - "play": "Odtwarzaj", - "previous": "Poprzedni utwór", - "queue": "Kolejka odtwarzania", - "remove": "Usuń", - "restart": "Odtwórz utwór ponownie" - }, - "message": { - "radio": "Nowe utwory pojawią się tutaj automatycznie.", - "automaticPlay": "Następny utwór zostanie odtworzony automatycznie w ciągu kilku sekund…" - }, - "header": { - "failure": "Ten utwór nie mógł zostać wczytany", - "radio": "Słuchasz stacji radiowej" - }, - "meta": { - "queuePosition": "Utwór { index } z { length }" - }, - "warning": { - "connectivity": "Możesz mieć problemy z łącznością." - } - }, - "forms": { - "PasswordInput": { + "Widget": { "button": { - "copy": "Kopiuj" + "create": "Utwórz listę odtwarzania", + "more": "Pokaż więcej" }, - "title": "Pokaż/ukryj hasło", - "message": { - "copy": "Skopiowano tekst do schowka!" + "placeholder": { + "noPlaylists": "Nie utworzono jeszcze żadnej listy odtwarzania" } } }, "radios": { + "Button": { + "startRadio": "Odtwarzaj stację radiową", + "stopRadio": "Zatrzymaj radio" + }, "Card": { "button": { "edit": "Edytuj" } - }, - "Button": { - "startRadio": "Odtwarzaj stację radiową", - "stopRadio": "Zatrzymaj radio" - } - }, - "RemoteSearchForm": { - "header": { - "fetchFailed": "Wystąpił błąd podczas pobierania obiektu" - }, - "button": { - "fediverse": "Fediverse", - "rss": "Kanał RSS", - "search": "Szukaj" - }, - "label": { - "fediverse": { - "fieldLabel": "Obiekt Fediverse", - "title": "Obserwuj podcast z Fediverse" - }, - "rss": { - "fieldPlaceholder": "https://adres.strony/rss.xml", - "fieldLabel": "Lokalizacja kanału RSS", - "title": "Zasubskrybuj kanał RSS podcastu" - } - }, - "warning": { - "unsupported": "Ten rodzaj obiektu nie jest jeszcze wspierany" - }, - "error": { - "fetchFailed": "Ten obiekt nie mógł zostać pobrany" - }, - "description": { - "fediverse": "Użyj tego formularza, aby obserwować kanał znajdujący się gdzieś indziej we Fediverse.", - "rss": "Użyj tego formularza, aby obserwować kanał RSS znajdujący się pod danym adresem URL." - } - }, - "PageNotFound": { - "link": { - "home": "Przejdź na stronę główną" - }, - "title": "Nie odnaleziono strony", - "header": { - "pageNotFound": "Nie odnaleziono strony!" - }, - "message": { - "pageNotFound": "Przepraszamy, strona której szukasz nie istnieje:" - } - }, - "vui": { - "Pagination": { - "next": "Następna strona", - "label": "Stronicowanie", - "previous": "Poprzednia strona" } }, "tags": { @@ -2869,590 +2847,309 @@ "more": "Pokaż { n } kolejny tag | Pokaż { n } kolejne tagi" } } + }, + "vui": { + "Pagination": { + "label": "Stronicowanie", + "next": "Następna strona", + "previous": "Poprzednia strona" + } + } + }, + "composables": { + "audio": { + "usePlayOptions": { + "addToQueueMessage": "Dodano { n } utwór do kolejki | Dodano { n } utwory do kolejki" + } + }, + "locale": { + "useSharedLabels": { + "fields": { + "contentCategory": { + "choices": { + "music": "Muzyka", + "other": "lnne", + "podcast": "Podcast" + }, + "label": "Kategoria treści" + }, + "importStatus": { + "choices": { + "draft": { + "help": "Ten utwór został przesłany, ale nie został jeszcze wyznaczony do przetwarzania", + "label": "Oczekujący" + }, + "errored": { + "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane", + "label": "Zakończono błędem" + }, + "finished": { + "help": "Zaimportowano", + "label": "Ukończono" + }, + "pending": { + "help": "Ten utwór został przesłany, ale nie został jeszcze przetworzony przez serwer", + "label": "W toku" + }, + "skipped": { + "help": "Ten utwór jest już w jednej z bibliotek", + "label": "Pominięto" + } + }, + "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku" + }, + "privacyLevel": { + "choices": { + "instance": "Każdy na tej instancji", + "private": "Nikt poza mną", + "public": "Każdy na dowolnej instancji" + }, + "help": "Ustal poziom widoczności twojej aktywności", + "label": "Widoczność aktywności", + "shortChoices": { + "instance": "Instancja", + "private": "Prywatne", + "public": "Każdy" + } + }, + "reportType": { + "choices": { + "illegalContent": "Nielegalne treści", + "invalidMetadata": "Nieprawidłowe metadane", + "offensiveContent": "Obraźliwe treści", + "other": "lnna", + "takedownRequest": "Prośba o usunięcie" + }, + "label": "Kategoria" + }, + "summary": { + "label": "O mnie" + } + }, + "filters": { + "accessedDate": "Data dostępu", + "albumTitle": "Nazwa albumu", + "artistName": "Nazwa wykonawcy", + "bitrate": "Szybkość transmisji", + "creationDate": "Data utworzenia", + "dateJoined": "Data rejestracji", + "domain": "Domena", + "duration": "Czas trwania", + "expirationDate": "Data wygaśnięcia", + "firstSeen": "Data widzenia po raz pierwszy", + "followers": "Obserwatorzy", + "itemsCount": "Elementy", + "lastActivity": "Ostatnia aktywność", + "lastSeen": "Data ostatniej aktywności", + "modificationDate": "Data modyfikacji", + "name": "Nazwa", + "receivedMessages": "Otrzymane wiadomości", + "releaseDate": "Data wydania", + "size": "Rozmiar", + "trackTitle": "Tytuł utworu", + "uploads": "Przesłane pliki", + "username": "Nazwa użytkownika", + "users": "Użytkownicy" + }, + "scopes": { + "edits": { + "description": "Dostęp do edycji", + "label": "Edycje" + }, + "favorites": { + "label": "Ulubione" + }, + "filters": { + "description": "Dostęp do filtrów treści", + "label": "Filtry treści" + }, + "follows": { + "description": "Dostęp do obserwowanych", + "label": "Obserwacje" + }, + "libraries": { + "description": "Dostęp do plików audio, bibliotek, wykonawców, albumów i utworów", + "label": "Biblioteki i przesłane pliki" + }, + "listenings": { + "description": "Dostęp do historii odtwarzania", + "label": "Odsłuchania" + }, + "notifications": { + "description": "Dostęp do powiadomień", + "label": "Powiadomienia" + }, + "playlists": { + "description": "Dostęp do list odtwarzania", + "label": "Listy odtwarzania" + }, + "profile": { + "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", + "label": "Profil" + }, + "radios": { + "description": "Dostęp do stacji radiowych", + "label": "Stacje radiowe" + }, + "reports": { + "description": "Dostęp do zgłoszeń moderacyjnych", + "label": "Zgłoszenia" + }, + "security": { + "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", + "label": "Bezpieczeństwo" + } + } + } + }, + "moderation": { + "useEditConfigs": { + "album": { + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "name": "Nazwa" + }, + "cover": { + "label": "Okładka" + }, + "description": { + "label": "Opis" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + } + }, + "useReport": { + "account": { + "typeLabel": "Konto" + }, + "album": { + "label": "Zgłoś ten album…", + "typeLabel": "Album" + }, + "artist": { + "label": "Zgłoś tego wykonawcę…", + "typeLabel": "Wykonawca" + }, + "channel": { + "label": "Zgłoś ten kanał…", + "typeLabel": "Kanał" + }, + "library": { + "label": "Zgłoś tę bibliotekę…", + "typeLabel": "Biblioteka" + }, + "playlist": { + "label": "Zgłoś tę listę odtwarzania…", + "typeLabel": "Lista odtwarzania" + }, + "track": { + "label": "Zgłoś ten utwór…", + "typeLabel": "Utwór" + } + }, + "useReportConfigs": { + "account": { + "label": "Konto", + "summary": "O mnie" + }, + "album": { + "label": "Album", + "releaseDate": "Data wydania", + "title": "Tytuł" + }, + "artist": { + "label": "Wykonawca" + }, + "channel": { + "label": "Kanał" + }, + "creationDate": { + "label": "Data utworzenia" + }, + "library": { + "description": "Opis", + "label": "Biblioteka" + }, + "musicbrainzId": { + "label": "Identyfikator MusicBrainz" + }, + "name": { + "label": "Nazwa" + }, + "playlist": { + "label": "Lista odtwarzania" + }, + "tags": { + "label": "Tagi" + }, + "track": { + "copyright": "Prawa autorskie", + "label": "Utwór", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "visibility": { + "label": "Widoczność" + } + } + }, + "useThemeList": { + "darkTheme": "Ciemny", + "lightTheme": "Jasny" + } + }, + "init": { + "axios": { + "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie za { delay }", + "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie później" + }, + "serviceWorker": { + "actions": { + "later": "Póżniej", + "update": "Aktualizuj" + }, + "newAppVersion": "Dostępna jest nowa wersja aplikacji." } }, "views": { - "channels": { - "DetailBase": { - "meta": { - "episodes": "{ n } epizod | { n } epizody", - "listenings": "{ n } odsłuchanie | { n } odsłuchania", - "subscribers": "{ n } subskrybent | { n } subskrybentów", - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "channelEpisodes": "Wszystkie odcinki", - "mirrored": "Odzwierciedlane z { domain }", - "moderation": "Otwórz w interfejsie moderacyjnym", - "channelOverview": "Przegląd", - "channelTracks": "Utwory", - "domainView": "Zobacz na { domain }" - }, - "header": { - "artistChannel": "Kanał wykonawcy", - "podcastChannel": "Kanał podcastowy" - }, - "button": { - "cancel": "Anuluj", - "confirm": "Usuń", - "delete": "Usuń…", - "edit": "Edytuj…", - "embed": "Osadź", - "play": "Odtwarzaj", - "updateChannel": "Zapisz kanał", - "upload": "Prześlij pliki" - }, - "title": "Kanał", - "modal": { - "subscribe": { - "rss": { - "content": { - "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastów:" - }, - "header": "Zasubskrybuj za pomocą RSS" - }, - "fediverse": { - "content": { - "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" - }, - "header": "Obserwuj na Fediverse" - }, - "funkwhale": { - "header": "Obserwuj na Funkwhale" - }, - "header": "Obserwuj ten kanał" - }, - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" - } - } - }, - "DetailOverview": { - "link": { - "addAlbum": "Dodaj", - "erroredUploads": "Zobacz pliki, których import zakończył się błędem", - "skippedUploads": "Zobacz pominięte pliki" - }, - "header": { - "albums": "Albumy", - "latestEpisodes": "Najnowsze odcinki", - "latestTracks": "Najnowsze utwory", - "series": "Seriale", - "uploadsFailure": "Kilka przesłanych plików nie mogło zostać opublikowane", - "uploadsProcessing": "Przesłane pliki są przetwarzane", - "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" - }, - "meta": { - "progress": "Przetworzone pliki:" - }, - "message": { - "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrótce dostępne." - } - }, - "SubscriptionsList": { - "link": { - "addNew": "Dodaj" - }, - "button": { - "cancel": "Anuluj", - "subscribe": "Obserwuj" - }, - "placeholder": { - "search": "Filtruj po nazwie…" - }, - "title": "Obserwowane kanały", - "modal": { - "subscription": { - "header": "Subskrypcja" - } - } - } - }, - "content": { - "libraries": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "details": "Szczegóły biblioteki" - }, - "label": { - "size": "Łączny rozmiar wszystkich plików w tej bibliotece" - }, - "button": { - "upload": "Prześlij pliki" - } - }, - "Quota": { - "label": { - "currentUsage": "Wykorzystano { current } z przydzielonego { max }", - "errored": "Pliki zakończone błędem", - "pending": "Pliki w trakcie przetwarzania", - "skipped": "Pominięte pliki" - }, - "header": { - "currentUsage": "Obecne użycie" - }, - "loading": { - "currentUsage": "Ładowanie danych o użyciu…" - }, - "button": { - "purge": "Wyczyść" - }, - "modal": { - "purgeErrored": { - "header": "Wyczyścić pliki zakończone błędami?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgePending": { - "header": "Wyczyścić pliki w toku?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - }, - "purgeSkipped": { - "header": "Wyczyścić pominięte pliki?", - "content": { - "description": "Ta opcja usunie utwory które zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." - } - } - }, - "link": { - "viewFiles": "Zobacz pliki" - } - }, - "FilesTable": { - "table": { - "file": { - "header": { - "album": "Album", - "artist": "Wykonawca", - "duration": "Czas trwania", - "importStatus": "Stan importu", - "size": "Rozmiar", - "title": "Tytuł", - "uploadDate": "Data przesłania" - } - } - }, - "option": { - "status": { - "all": "Wszystkie", - "draft": "Oczekujący", - "failed": "Zakończony błędem", - "finished": "Ukończono", - "pending": "W toku", - "skipped": "Pominięto" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "action": { - "delete": "Usuń", - "restartImport": "Uruchom importowanie ponownie" - }, - "label": { - "importStatus": "Stan importu", - "search": "Szukaj" - }, - "notApplicable": "Niedostępne", - "empty": { - "noTracks": "Nie dodano jeszcze żadnych utworów do tej biblioteki" - }, - "placeholder": { - "search": "Szukaj za pomocą tytułu, wykonawcy, albumu…" - }, - "button": { - "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" - }, - "pagination": { - "results": "Wyświetlanie wyników { start }-{ end } z { total }" - } - }, - "Home": { - "link": { - "createLibrary": "Utwórz nową bibliotekę" - }, - "loading": { - "libraries": "Ładowanie bibliotek…" - }, - "empty": { - "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki — może to już czas, żeby jakąś utworzyć?" - }, - "header": { - "libraries": "Moje biblioteki" - } - }, - "Form": { - "button": { - "create": "Utwórz bibliotekę", - "delete": "Usuń", - "confirm": "Usuń bibliotekę", - "update": "Zapisz bibliotekę" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." - } - } - }, - "label": { - "description": "Opis", - "name": "Nazwa", - "visibility": "Widoczność" - }, - "header": { - "failure": "Błąd" - }, - "description": { - "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", - "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." - }, - "message": { - "libraryCreated": "Utworzono bibliotekę", - "libraryDeleted": "Usunięto bibliotekę", - "libraryUpdated": "Zaktualizowano bibliotekę" - }, - "placeholder": { - "name": "Moja wspaniała biblioteka", - "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba." - } - } - }, - "remote": { - "Card": { - "meta": { - "tracks": "{ n } utwór | { n } utwory", - "failedTracks": "Utwory zakończone błędem:", - "lastUpdate": "Ostatnia aktualizacja:" - }, - "modal": { - "unfollow": { - "content": { - "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." - }, - "header": "Czy chcesz przestać obserwować tę bibliotekę?" - } - }, - "button": { - "cancel": "Cofnij prośbę o obserwowanie", - "follow": "Obserwuj", - "pending": "Obserwowanie oczekuje na zatwierdzenie", - "unfollow": "Przestań obserwować" - }, - "link": { - "scanDetails": "Szczegóły", - "scan": "Skanuj teraz" - }, - "label": { - "scanFailure": "Problem podczas skanowania", - "scanPending": "Skanowanie w toku", - "scanSuccess": "Przeskanowano", - "scanPartialSuccess": "Przeskanowano z błędami", - "scanProgress": "Skanowanie… ({ progress }%)", - "sharingLink": "Odnośnik do udostępnienia" - }, - "message": { - "scanLaunched": "Uruchomiono skanowanie", - "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" - } - }, - "ScanForm": { - "header": { - "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" - }, - "placeholder": { - "url": "Wprowadź adres URL biblioteki" - }, - "label": { - "search": "Wyszukaj w zdalnej bibliotece" - }, - "button": { - "submit": "Zatwierdź wyszukiwanie" - } - }, - "Home": { - "header": { - "knownLibraries": "Znane biblioteki", - "remoteLibraries": "Zdalne biblioteki" - }, - "loading": { - "remoteLibraries": "Ładowanie zdalnych bibliotek…" - }, - "button": { - "refresh": "Odśwież" - }, - "description": { - "remoteLibraries": "Zdalne biblioteki należą do użytkowników innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." - } - } - }, - "Home": { - "title": "Dodaj lub zarządzaj zawartością", - "description": { - "follow": "Możesz zaobserwować biblioteki innych użytkowników, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", - "channel": { - "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", - "2": "Udostępnij twoje utwory publicznie i zdobądź obserwatorów na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastów." - }, - "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciółmi i rodziną." - }, - "header": { - "follow": "Obserwuj zdalne biblioteki", - "channel": "Publikuj swoje prace na kanale", - "upload": "Prześlij do biblioteki treści innych wykonawców" - }, - "button": { - "start": "Rozpocznij" - }, - "help": { - "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." - } - }, - "Base": { - "title": "Dodaj zawartość", - "link": { - "libraries": "Biblioteki", - "tracks": "Utwory" - }, - "menu": { - "secondary": "Podmenu" - } - } - }, - "library": { - "LibraryBase": { - "meta": { - "tracks": "{ n } utwór | { n } utwory" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "moderation": "Otwórz w interfejsie moderacyjnym", - "owner": "Należy do { username }", - "tracks": "Utwory", - "domain": "Zobacz na { domain }" - }, - "button": { - "edit": "Edytuj", - "upload": "Prześlij pliki" - }, - "title": "Biblioteka", - "label": { - "private": "Prywatne", - "public": "Publiczne", - "instance": "Ograniczona", - "sharingLink": "Odnośnik do udostępnienia" - }, - "description": { - "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." - }, - "tooltip": { - "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", - "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości", - "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkowników tej instancji" - } - }, - "Edit": { - "button": { - "accept": "Zaakceptuj", - "reject": "Odrzuć" - }, - "table": { - "action": { - "status": { - "accepted": "Zaakceptowano", - "pending": "Oczekuje na przyjęcie", - "rejected": "Odrzucono" - }, - "header": { - "action": "Działanie", - "date": "Data", - "status": "Stan", - "user": "Użytkownik" - } - } - }, - "header": { - "followers": "Obserwatorzy", - "libraryContents": "Zawartość biblioteki" - }, - "loading": { - "followers": "Ładowanie obserwujących…" - }, - "empty": { - "noFollowers": "Nikt nie obserwuje tej biblioteki" - } - }, - "DetailAlbums": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailOverview": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - }, - "DetailTracks": { - "empty": { - "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!", - "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość." - } - } - }, - "auth": { - "ProfileBase": { - "title": "Profil { username }", - "link": { - "activity": "Aktywność", - "moderation": "Otwórz w interfejsie moderacyjnym", - "overview": "Przegląd", - "domainView": "Zobacz na { domain }" - }, - "label": { - "self": "To Ty!" - } - }, - "PasswordReset": { - "label": { - "email": "Adres e-mail" - }, - "button": { - "requestReset": "Poproś o zresetowanie hasła" - }, - "link": { - "back": "Wróć do logowania" - }, - "placeholder": { - "email": "Wprowadź adres e-mail powiązany z twoim kontem" - }, - "header": { - "failure": "Wystąpił błąd podczas próby zresetowania hasła", - "reset": "Zresetuj hasło" - }, - "title": "Zresetuj hasło", - "help": { - "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." - } - }, - "ProfileOverview": { - "link": { - "addNew": "Dodaj" - }, - "modal": { - "createChannel": { - "artist": { - "header": "Kanał wykonawcy" - }, - "header": "Utwórz kanał", - "podcast": { - "header": "Kanał podcastowy" - } - } - }, - "button": { - "cancel": "Anuluj", - "createChannel": "Utwórz kanał", - "next": "Następny krok", - "previous": "Poprzedni krok" - }, - "header": { - "channels": "Kanały", - "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki", - "libraries": "Biblioteki" - } - }, - "PasswordResetConfirm": { - "link": { - "back": "Wróć do logowania", - "login": "Przejdź do logowania" - }, - "title": "Zmień swoje hasło", - "header": { - "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", - "success": "Pomyślnie zaktualizowano hasło" - }, - "message": { - "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", - "success": "Twoje hasło zostało pomyślnie zmienione." - }, - "label": { - "newPassword": "Nowe hasło" - }, - "button": { - "update": "Aktualizuj swoje hasło" - } - }, - "EmailConfirm": { - "title": "Potwierdź swój adres e-mail", - "label": { - "confirmationCode": "Kod potwierdzenia" - }, - "header": { - "failure": "Nie można potwierdzić twojego adresu e-mail", - "success": "Potwierdzono adres e-mail" - }, - "link": { - "login": "Przejdź do logowania", - "back": "Wróć do logowania" - }, - "message": { - "success": "Twój adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." - } - }, - "Signup": { - "header": { - "createAccount": "Utwórz konto Funkwhale" - }, - "title": "Rejestracja" - }, - "Login": { - "title": "Zaloguj się", - "header": { - "login": "Zaloguj się na swoje konto Funkwhale" - } - }, - "Callback": { - "header": { - "loggingIn": "Logowanie…" - } - }, - "Plugins": { - "title": "Zarządzaj rozszerzeniami" - }, - "ProfileActivity": { - "header": { - "playlists": "Listy odtwarzania", - "recentlyFavorited": "Ostatnio polubione", - "recentlyListened": "Ostatnio odsłuchane" - } - } - }, "Notifications": { + "button": { + "read": "Oznacz wszystko jako przeczytane", + "submit": "Zrozumiano!" + }, + "empty": { + "notifications": "Brak powiadomień do pokazania." + }, + "header": { + "funkwhaleSupport": "Czy lubisz Funkwhale?", + "instanceSupport": "Wspieraj tę instancję Funkwhale", + "messages": "Twoje wiadomości", + "notifications": "Twoje powiadomienia" + }, + "label": { + "reminder": "Przypomnij mi za:", + "showRead": "Pokaż odczytane powiadomienia" + }, + "link": { + "donate": "Wesprzyj", + "help": "Poznaj inne sposoby pomocy" + }, + "loading": { + "notifications": "Ładowanie powiadomień…" + }, + "message": { + "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + }, "option": { "delay": { "30": "30 dni", @@ -3461,584 +3158,63 @@ "never": "Nigdy" } }, - "link": { - "help": "Poznaj inne sposoby pomocy", - "donate": "Wesprzyj" + "title": "Powiadomienia" + }, + "Search": { + "button": { + "submit": "Zatwierdź wyszukiwanie" }, "header": { - "funkwhaleSupport": "Czy lubisz Funkwhale?", - "instanceSupport": "Wspieraj tę instancję Funkwhale", - "messages": "Twoje wiadomości", - "notifications": "Twoje powiadomienia" + "remote": "Wyszukaj zdalnego obiektu", + "rss": "Zasubskrybuj kanał RSS podcastu", + "search": "Szukaj" }, - "button": { - "submit": "Zrozumiano!", - "read": "Oznacz wszystko jako przeczytane" - }, - "loading": { - "notifications": "Ładowanie powiadomień…" - }, - "empty": { - "notifications": "Brak powiadomień do pokazania." - }, - "title": "Powiadomienia", "label": { - "reminder": "Przypomnij mi za:", - "showRead": "Pokaż odczytane powiadomienia" - }, - "message": { - "funkwhaleSupport": "Zauważyliśmy, że jesteś tu już przez pewien czas. Jeśli Funkwhale jest dla ciebie użyteczny, moglibyśmy skorzystać z twojej pomocy, aby jeszcze bardziej go ulepszyć!" + "albums": "Albumy", + "artists": "Artyści", + "playlists": "Listy odtwarzania", + "podcasts": "Podcasty", + "radios": "Stacje radiowe", + "series": "Seriale", + "tags": "Tagi", + "tracks": "Utwory" } }, "admin": { - "moderation": { - "AccountsDetail": { - "table": { - "accountData": { - "username": "Nazwa użytkownika", - "loginStatus": { - "disabled": "Wyłączony", - "enabled": "Włączone", - "label": "Możliwość logowania" - }, - "displayName": "Wyświetlana nazwa", - "email": "Adres e-mail", - "lastActivity": "Ostatnia aktywność", - "lastChecked": "Ostatnio sprawdzano", - "permissions": "Uprawnienia", - "signupDate": "Data rejestracji", - "userType": "Rodzaj" - }, - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "megabyte": "MB", - "totalSize": "Całkowity rozmiar", - "uploadQuota": "Limit przestrzeni" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - } - }, - "header": { - "accountData": "Dane konta", - "activity": "Aktywność", - "audioContent": "Zawartość", - "localAccount": "Konto lokalne", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tego konta." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "domain": "Domena", - "libraries": "Biblioteki", - "linkedReports": "Powiązane zgłoszenia", - "openProfile": "Otwórz profil", - "remoteProfile": "Otwórz profil zdalny", - "requests": "Aplikacje o rejestrację", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "tooltip": { - "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." - }, - "option": { - "permission": { - "library": "Biblioteka", - "moderation": "Moderacja", - "settings": "Ustawienia" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "accounts": "Konta", - "domains": "Domeny", - "reports": "Zgłoszenia", - "userRequests": "Aplikacje o rejestrację" - }, - "title": "Moderacja", - "menu": { - "secondary": "Podmenu" - } - }, - "DomainsDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "instanceData": "Dane instancji", - "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", - "noPolicy": "Nie masz żadnych reguł dla tej domeny." - }, - "button": { - "addPolicy": "Dodaj politykę moderacji", - "addToAllowList": "Dodaj do listy zezwoleń", - "refreshNodeInfo": "Odśwież informacje o węźle", - "removeFromAllowList": "Usuń z listy zezwoleń" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "knownAccounts": "Znane konta", - "libraries": "Biblioteki", - "website": "Otwórz stronę internetową", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "activity": { - "emittedFollows": "Wychodzące obserwacje bibliotek", - "emittedMessages": "Wychodzące wiadomości", - "firstSeen": "Widziany po raz pierwszy", - "receivedFollows": "Otrzymane obserwacje biblioteki" - }, - "instanceData": { - "nodeInfoStatus": { - "value": "Wystąpił błąd podczas pobierania informacji o węźle", - "label": "Stan" - }, - "inAllowList": { - "label": "Jest obecny na liście zezwoleń", - "false": "Nie", - "true": "Tak" - }, - "lastChecked": "Ostatnio sprawdzano", - "domainName": "Nazwa", - "software": { - "label": "Oprogramowanie" - }, - "totalUsers": "Wszyscy użytkownicy" - } - }, - "description": { - "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." - }, - "notApplicable": "Niedostępne", - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "DomainsList": { - "button": { - "add": "Dodaj" - }, - "label": { - "addDomain": "Dodaj domenę", - "addToAllowList": "Dodaj do listy zezwoleń" - }, - "title": "Domeny", - "header": { - "domains": "Domeny", - "failure": "Wystąpił błąd podczas tworzenia domeny" - } - }, - "ReportsList": { - "option": { - "status": { - "all": "Wszystkie", - "resolved": "Rozwiązane", - "unresolved": "Nierozstrzygnięte" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "title": "Zgłoszenia", - "header": { - "reports": "Zgłoszenia" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą konta, podsumowania, domeny…" - } - }, - "RequestsList": { - "option": { - "status": { - "all": "Wszystkie", - "approved": "Zatwierdzono", - "pending": "W toku", - "refused": "Odrzucone" - } - }, - "ordering": { - "direction": { - "ascending": "Rosnąco", - "descending": "Malejąco", - "label": "Kolejność" - }, - "label": "Porządkowanie" - }, - "label": { - "search": "Szukaj", - "status": "Stan" - }, - "placeholder": { - "search": "Szukaj za pomocą nazwy użytkownika…" - }, - "title": "Aplikacje o rejestrację", - "header": { - "userRequests": "Aplikacje o rejestrację" - } - } - }, - "library": { - "UploadDetail": { - "table": { - "activity": { - "accessedDate": "Data dostępu", - "firstSeen": "Widziany po raz pierwszy" - }, - "audioContent": { - "bitrate": { - "label": "Szybkość transmisji" - }, - "cachedSize": "Rozmiar w pamięci podręcznej", - "duration": "Czas trwania", - "size": "Rozmiar", - "track": "Utwór" - }, - "upload": { - "name": "Nazwa" - } - }, - "link": { - "account": "Konto", - "domain": "Domena", - "importStatus": "Stan importu", - "library": "Biblioteka", - "remoteProfile": "Otwórz profil zdalny", - "type": "Rodzaj", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "local": "Lokalne", - "uploadData": "Data przesłania" - }, - "button": { - "delete": "Usuń", - "download": "Pobierz" - }, - "modal": { - "delete": { - "header": "Usunąć ten przesłany plik?", - "content": { - "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." - } - } - }, - "notApplicable": "Niedostępne" - }, - "LibraryDetail": { - "link": { - "account": "Konto", - "albums": "Albumy", - "artists": "Artyści", - "domain": "Domena", - "reports": "Powiązane zgłoszenia", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django", - "visibility": "Widoczność" - }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "libraryData": "Dane biblioteki", - "local": "Lokalne" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "library": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "firstSeen": "Widziany po raz pierwszy", - "followers": "Obserwatorzy" - } - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć tę bibliotekę?", - "content": { - "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "AlbumDetail": { - "header": { - "activity": "Aktywność", - "albumData": "Dane albumu", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "album": { - "description": "Opis", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten album?", - "content": { - "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "ArtistDetail": { - "header": { - "activity": "Aktywność", - "artistData": "Dane wykonawcy", - "audioContent": "Zawartość", - "local": "Lokalne" - }, - "link": { - "albums": "Albumy", - "category": "Kategoria", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "tracks": "Utwory", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "audioContent": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "artist": { - "description": "Opis", - "name": "Nazwa" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć tego wykonawcę?", - "content": { - "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "TagDetail": { - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "tagData": "Dane taga" - }, - "link": { - "albums": "Albumy", - "artists": "Artyści", - "localProfile": "Otwórz profil lokalny", - "tracks": "Utwory", - "django": "Zobacz w panelu administracyjnym Django" - }, - "button": { - "delete": "Usuń" - }, - "modal": { - "delete": { - "header": "Usunąć ten tag?", - "content": { - "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." - } - } - }, - "table": { - "activity": { - "firstSeen": "Widziany po raz pierwszy" - }, - "tag": { - "name": "Nazwa" - } - } - }, - "TrackDetail": { - "header": { - "activity": "Aktywność", - "local": "Lokalne", - "trackData": "Dane utworu" - }, - "link": { - "album": "Album", - "albumArtist": "Wykonawca albumu", - "artist": "Wykonawca", - "domain": "Domena", - "edits": "Edycje", - "libraries": "Biblioteki", - "reports": "Powiązane zgłoszenia", - "localProfile": "Otwórz profil lokalny", - "musicbrainz": "Otwórz na MusicBrainz", - "remoteProfile": "Otwórz profil zdalny", - "uploads": "Przesłane pliki", - "django": "Zobacz w panelu administracyjnym Django" - }, - "table": { - "trackData": { - "cachedSize": "Rozmiar w pamięci podręcznej", - "totalSize": "Całkowity rozmiar" - }, - "track": { - "copyright": "Prawa autorskie", - "description": "Opis", - "discNumber": "Numer płyty", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "activity": { - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" - } - }, - "button": { - "delete": "Usuń", - "edit": "Edytuj", - "remoteRefresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten utwór?", - "content": { - "warning": "Utwór zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." - } - } - }, - "warning": { - "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" - } - }, - "Base": { - "link": { - "albums": "Albumy", - "artists": "Artyści", - "channels": "Kanały", - "edits": "Edycje", - "libraries": "Biblioteki", - "tags": "Tagi", - "tracks": "Utwory", - "uploads": "Przesłane pliki" - }, - "title": "Zarządzaj biblioteką", - "menu": { - "secondary": "Podmenu" - } - }, - "EditsList": { - "title": "Edycje", - "header": { - "edits": "Edycje biblioteki" - } - } - }, "ChannelDetail": { + "button": { + "delete": "Usuń", + "openRemote": "Otwórz profil zdalny", + "refresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "channelData": "Dane kanału" + }, + "label": { + "local": "Lokalne" + }, + "link": { + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "Otwórz profil lokalny" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + } + }, "table": { - "channelData": { - "account": "Konto", - "category": "Kategoria", - "description": "Opis", - "domain": "Domena", - "name": "Nazwa", - "rss": "Kanał RSS", - "url": "Adres URL" + "activity": { + "edits": "Edycje", + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "linkedReports": "Powiązane zgłoszenia", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" }, "audioContent": { "albums": "Albumy", @@ -4047,40 +3223,16 @@ "tracks": "Utwory", "uploads": "Przesłane pliki" }, - "activity": { - "edits": "Edycje", - "favorited": "Polubione utwory", - "firstSeen": "Widziany po raz pierwszy", - "linkedReports": "Powiązane zgłoszenia", - "listenings": "Odsłuchania", - "playlists": "Listy odtwarzania" + "channelData": { + "account": "Konto", + "category": "Kategoria", + "description": "Opis", + "domain": "Domena", + "name": "Nazwa", + "rss": "Kanał RSS", + "url": "Adres URL" } }, - "header": { - "activity": "Aktywność", - "audioContent": "Zawartość", - "channelData": "Dane kanału" - }, - "button": { - "delete": "Usuń", - "openRemote": "Otwórz profil zdalny", - "refresh": "Odśwież z serwera zdalnego" - }, - "modal": { - "delete": { - "header": "Usunąć ten kanał?", - "content": { - "warning": "Kanał zostanie usunięty wraz z plikami, utworami i albumami. To działanie jest nieodwracalne." - } - } - }, - "label": { - "local": "Lokalne" - }, - "link": { - "localProfile": "Otwórz profil lokalny", - "django": "Zobacz w panelu administracyjnym Django" - }, "warning": { "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" } @@ -4104,53 +3256,1198 @@ "channels": "Kanały", "federation": "Federacja", "instanceInfo": "Informacje o instancji", - "settings": "Ustawienia instancji", "moderation": "Moderacja", "music": "Muzyka", "playlists": "Listy odtwarzania", "sections": "Sekcje", "security": "Bezpieczeństwo", + "settings": "Ustawienia instancji", "signups": "Rejestracje", "stats": "Statystyki", "subsonic": "Subsonic", "ui": "Interfejs użytkownika" } }, + "library": { + "AlbumDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "albumData": "Dane albumu", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten album będzie usunięty wraz z plikami, utworami, ulubionymi oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten album?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "album": { + "description": "Opis", + "title": "Tytuł" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "ArtistDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "artistData": "Dane wykonawcy", + "audioContent": "Zawartość", + "local": "Lokalne" + }, + "link": { + "albums": "Albumy", + "category": "Kategoria", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Wykonawca zostanie usunięty wraz ze związanymi z nim plikami, utworami, albumami, polubieniami oraz historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć tego wykonawcę?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "artist": { + "description": "Opis", + "name": "Nazwa" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "edits": "Edycje", + "libraries": "Biblioteki", + "tags": "Tagi", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Zarządzaj biblioteką" + }, + "EditsList": { + "header": { + "edits": "Edycje biblioteki" + }, + "title": "Edycje" + }, + "LibraryDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "libraryData": "Dane biblioteki", + "local": "Lokalne" + }, + "link": { + "account": "Konto", + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka zostanie usunięta razem z powiązanymi plikami i obserwacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy", + "followers": "Obserwatorzy" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "library": { + "description": "Opis", + "name": "Nazwa" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "TagDetail": { + "button": { + "delete": "Usuń" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "tagData": "Dane taga" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "django": "Zobacz w panelu administracyjnym Django", + "localProfile": "Otwórz profil lokalny", + "tracks": "Utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Tag zostanie usunięty i odczepiony od istniejących treści, jeśli jakiekolwiek istnieją. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten tag?" + } + }, + "table": { + "activity": { + "firstSeen": "Widziany po raz pierwszy" + }, + "tag": { + "name": "Nazwa" + } + } + }, + "TrackDetail": { + "button": { + "delete": "Usuń", + "edit": "Edytuj", + "remoteRefresh": "Odśwież z serwera zdalnego" + }, + "header": { + "activity": "Aktywność", + "local": "Lokalne", + "trackData": "Dane utworu" + }, + "link": { + "album": "Album", + "albumArtist": "Wykonawca albumu", + "artist": "Wykonawca", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "edits": "Edycje", + "libraries": "Biblioteki", + "localProfile": "Otwórz profil lokalny", + "musicbrainz": "Otwórz na MusicBrainz", + "remoteProfile": "Otwórz profil zdalny", + "reports": "Powiązane zgłoszenia", + "uploads": "Przesłane pliki" + }, + "modal": { + "delete": { + "content": { + "warning": "Utwór zostanie usunięty wraz z powiązanymi plikami, polubieniami i historią odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten utwór?" + } + }, + "table": { + "activity": { + "favorited": "Polubione utwory", + "firstSeen": "Widziany po raz pierwszy", + "listenings": "Odsłuchania", + "playlists": "Listy odtwarzania" + }, + "track": { + "copyright": "Prawa autorskie", + "description": "Opis", + "discNumber": "Numer płyty", + "license": "Licencja", + "position": "Pozycja", + "title": "Tytuł" + }, + "trackData": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "UploadDetail": { + "button": { + "delete": "Usuń", + "download": "Pobierz" + }, + "header": { + "activity": "Aktywność", + "audioContent": "Zawartość", + "local": "Lokalne", + "uploadData": "Data przesłania" + }, + "link": { + "account": "Konto", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "importStatus": "Stan importu", + "library": "Biblioteka", + "remoteProfile": "Otwórz profil zdalny", + "type": "Rodzaj", + "visibility": "Widoczność" + }, + "modal": { + "delete": { + "content": { + "warning": "Ten plik zostanie usunięty. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten przesłany plik?" + } + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "accessedDate": "Data dostępu", + "firstSeen": "Widziany po raz pierwszy" + }, + "audioContent": { + "bitrate": { + "label": "Szybkość transmisji" + }, + "cachedSize": "Rozmiar w pamięci podręcznej", + "duration": "Czas trwania", + "size": "Rozmiar", + "track": "Utwór" + }, + "upload": { + "name": "Nazwa" + } + } + } + }, + "moderation": { + "AccountsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." + }, + "header": { + "accountData": "Dane konta", + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "localAccount": "Konto lokalne", + "noPolicy": "Nie masz żadnych reguł dla tego konta." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "domain": "Domena", + "libraries": "Biblioteki", + "linkedReports": "Powiązane zgłoszenia", + "openProfile": "Otwórz profil", + "remoteProfile": "Otwórz profil zdalny", + "requests": "Aplikacje o rejestrację", + "tracks": "Utwory", + "uploads": "Przesłane pliki" + }, + "notApplicable": "Niedostępne", + "option": { + "permission": { + "library": "Biblioteka", + "moderation": "Moderacja", + "settings": "Ustawienia" + } + }, + "table": { + "accountData": { + "displayName": "Wyświetlana nazwa", + "email": "Adres e-mail", + "lastActivity": "Ostatnia aktywność", + "lastChecked": "Ostatnio sprawdzano", + "loginStatus": { + "disabled": "Wyłączony", + "enabled": "Włączone", + "label": "Możliwość logowania" + }, + "permissions": "Uprawnienia", + "signupDate": "Data rejestracji", + "userType": "Rodzaj", + "username": "Nazwa użytkownika" + }, + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "megabyte": "MB", + "totalSize": "Całkowity rozmiar", + "uploadQuota": "Limit przestrzeni" + } + }, + "tooltip": { + "uploadQuota": "Określ, jak dużo zawartości może przesłać użytkownik. Pozostaw puste, aby użyć domyślnej wartości instancji." + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "Base": { + "link": { + "accounts": "Konta", + "domains": "Domeny", + "reports": "Zgłoszenia", + "userRequests": "Aplikacje o rejestrację" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Moderacja" + }, + "DomainsDetail": { + "button": { + "addPolicy": "Dodaj politykę moderacji", + "addToAllowList": "Dodaj do listy zezwoleń", + "refreshNodeInfo": "Odśwież informacje o węźle", + "removeFromAllowList": "Usuń z listy zezwoleń" + }, + "description": { + "policy": "Polityki moderacji pomagają kontrolować sposób interakcji instancji z daną domeną lub kontem." + }, + "header": { + "activePolicy": "Ta domena podlega pod specyficzne reguły moderacyjne", + "activity": "Aktywność", + "audioContent": "Zawartość", + "instanceData": "Dane instancji", + "noPolicy": "Nie masz żadnych reguł dla tej domeny." + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "channels": "Kanały", + "django": "Zobacz w panelu administracyjnym Django", + "knownAccounts": "Znane konta", + "libraries": "Biblioteki", + "tracks": "Utwory", + "uploads": "Przesłane pliki", + "website": "Otwórz stronę internetową" + }, + "notApplicable": "Niedostępne", + "table": { + "activity": { + "emittedFollows": "Wychodzące obserwacje bibliotek", + "emittedMessages": "Wychodzące wiadomości", + "firstSeen": "Widziany po raz pierwszy", + "receivedFollows": "Otrzymane obserwacje biblioteki" + }, + "audioContent": { + "cachedSize": "Rozmiar w pamięci podręcznej", + "totalSize": "Całkowity rozmiar" + }, + "instanceData": { + "domainName": "Nazwa", + "inAllowList": { + "false": "Nie", + "label": "Jest obecny na liście zezwoleń", + "true": "Tak" + }, + "lastChecked": "Ostatnio sprawdzano", + "nodeInfoStatus": { + "label": "Stan", + "value": "Wystąpił błąd podczas pobierania informacji o węźle" + }, + "software": { + "label": "Oprogramowanie" + }, + "totalUsers": "Wszyscy użytkownicy" + } + }, + "warning": { + "stats": "Statystyki są obliczone na podstawie znanej na tej instancji aktywności i zawartości i nie reprezentują całej aktywności dla tego obiektu" + } + }, + "DomainsList": { + "button": { + "add": "Dodaj" + }, + "header": { + "domains": "Domeny", + "failure": "Wystąpił błąd podczas tworzenia domeny" + }, + "label": { + "addDomain": "Dodaj domenę", + "addToAllowList": "Dodaj do listy zezwoleń" + }, + "title": "Domeny" + }, + "ReportsList": { + "header": { + "reports": "Zgłoszenia" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "resolved": "Rozwiązane", + "unresolved": "Nierozstrzygnięte" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą konta, podsumowania, domeny…" + }, + "title": "Zgłoszenia" + }, + "RequestsList": { + "header": { + "userRequests": "Aplikacje o rejestrację" + }, + "label": { + "search": "Szukaj", + "status": "Stan" + }, + "option": { + "status": { + "all": "Wszystkie", + "approved": "Zatwierdzono", + "pending": "W toku", + "refused": "Odrzucone" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "placeholder": { + "search": "Szukaj za pomocą nazwy użytkownika…" + }, + "title": "Aplikacje o rejestrację" + } + }, "users": { "Base": { "link": { "invitations": "Zaproszenia", "users": "Użytkownicy" }, - "title": "Zarządzaj użytkownikami", "menu": { "secondary": "Podmenu" + }, + "title": "Zarządzaj użytkownikami" + } + } + }, + "auth": { + "Callback": { + "header": { + "loggingIn": "Logowanie…" + } + }, + "EmailConfirm": { + "header": { + "failure": "Nie można potwierdzić twojego adresu e-mail", + "success": "Potwierdzono adres e-mail" + }, + "label": { + "confirmationCode": "Kod potwierdzenia" + }, + "link": { + "back": "Wróć do logowania", + "login": "Przejdź do logowania" + }, + "message": { + "success": "Twój adres e-mail został potwierdzony, możesz teraz korzystać bez ograniczeń." + }, + "title": "Potwierdź swój adres e-mail" + }, + "Login": { + "header": { + "login": "Zaloguj się na swoje konto Funkwhale" + }, + "title": "Zaloguj się" + }, + "PasswordReset": { + "button": { + "requestReset": "Poproś o zresetowanie hasła" + }, + "header": { + "failure": "Wystąpił błąd podczas próby zresetowania hasła", + "reset": "Zresetuj hasło" + }, + "help": { + "form": "Użyj tego formularza, aby poprosić o zresetowanie hasła. Otrzymasz wiadomość z instrukcjami resetowania hasła na podany adres e-mail." + }, + "label": { + "email": "Adres e-mail" + }, + "link": { + "back": "Wróć do logowania" + }, + "placeholder": { + "email": "Wprowadź adres e-mail powiązany z twoim kontem" + }, + "title": "Zresetuj hasło" + }, + "PasswordResetConfirm": { + "button": { + "update": "Aktualizuj swoje hasło" + }, + "header": { + "failure": "Wystąpił błąd podczas zmieniania Twojego hasła", + "success": "Pomyślnie zaktualizowano hasło" + }, + "label": { + "newPassword": "Nowe hasło" + }, + "link": { + "back": "Wróć do logowania", + "login": "Przejdź do logowania" + }, + "message": { + "requestSent": "Jeżeli adres e-mail podany w poprzednim kroku jest prawidłowy i przypisany do konta użytkownika, powinieneś otrzymać wiadomość e-mail z instrukcjami resetowania hasła w przeciągu kilku minut.", + "success": "Twoje hasło zostało pomyślnie zmienione." + }, + "title": "Zmień swoje hasło" + }, + "Plugins": { + "title": "Zarządzaj rozszerzeniami" + }, + "ProfileActivity": { + "header": { + "playlists": "Listy odtwarzania", + "recentlyFavorited": "Ostatnio polubione", + "recentlyListened": "Ostatnio odsłuchane" + } + }, + "ProfileBase": { + "label": { + "self": "To Ty!" + }, + "link": { + "activity": "Aktywność", + "domainView": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "overview": "Przegląd" + }, + "title": "Profil { username }" + }, + "ProfileOverview": { + "button": { + "cancel": "Anuluj", + "createChannel": "Utwórz kanał", + "next": "Następny krok", + "previous": "Poprzedni krok" + }, + "header": { + "channels": "Kanały", + "libraries": "Biblioteki", + "sharedLibraries": "Ten użytkownik udostępnił następujące biblioteki" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "createChannel": { + "artist": { + "header": "Kanał wykonawcy" + }, + "header": "Utwórz kanał", + "podcast": { + "header": "Kanał podcastowy" + } + } + } + }, + "Signup": { + "header": { + "createAccount": "Utwórz konto Funkwhale" + }, + "title": "Rejestracja" + } + }, + "channels": { + "DetailBase": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń", + "delete": "Usuń…", + "edit": "Edytuj…", + "embed": "Osadź", + "play": "Odtwarzaj", + "updateChannel": "Zapisz kanał", + "upload": "Prześlij pliki" + }, + "header": { + "artistChannel": "Kanał wykonawcy", + "podcastChannel": "Kanał podcastowy" + }, + "link": { + "channelEpisodes": "Wszystkie odcinki", + "channelOverview": "Przegląd", + "channelTracks": "Utwory", + "domainView": "Zobacz na { domain }", + "mirrored": "Odzwierciedlane z { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym" + }, + "meta": { + "episodes": "{ n } epizod | { n } epizody", + "listenings": "{ n } odsłuchanie | { n } odsłuchania", + "subscribers": "{ n } subskrybent | { n } subskrybentów", + "tracks": "{ n } utwór | { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Kanał zostanie usunięty wraz ze wszystkimi powiązanymi plikami i informacjami. To działanie jest nieodwracalne." + }, + "header": "Usunąć ten kanał?" + }, + "embed": { + "header": "Osadź prace tego wykonawcy na swojej stronie internetowej" + }, + "subscribe": { + "fediverse": { + "content": { + "help": "Jeśli używasz Mastodona albo innych aplikacji Fediverse, to możesz zasubskrybować to konto:" + }, + "header": "Obserwuj na Fediverse" + }, + "funkwhale": { + "header": "Obserwuj na Funkwhale" + }, + "header": "Obserwuj ten kanał", + "rss": { + "content": { + "help": "Wklej następujący adres URL do swojej ulubionej aplikacji do podcastów:" + }, + "header": "Zasubskrybuj za pomocą RSS" + } + } + }, + "title": "Kanał" + }, + "DetailOverview": { + "header": { + "albums": "Albumy", + "latestEpisodes": "Najnowsze odcinki", + "latestTracks": "Najnowsze utwory", + "series": "Seriale", + "uploadsFailure": "Kilka przesłanych plików nie mogło zostać opublikowane", + "uploadsProcessing": "Przesłane pliki są przetwarzane", + "uploadsSuccess": "Przesłane pliki zostały opublikowane pomyślnie" + }, + "link": { + "addAlbum": "Dodaj", + "erroredUploads": "Zobacz pliki, których import zakończył się błędem", + "skippedUploads": "Zobacz pominięte pliki" + }, + "message": { + "processing": "Twoje przesłane pliki są przetwarzane przez Funkwhale i będą wkrótce dostępne." + }, + "meta": { + "progress": "Przetworzone pliki:" + } + }, + "SubscriptionsList": { + "button": { + "cancel": "Anuluj", + "subscribe": "Obserwuj" + }, + "link": { + "addNew": "Dodaj" + }, + "modal": { + "subscription": { + "header": "Subskrypcja" + } + }, + "placeholder": { + "search": "Filtruj po nazwie…" + }, + "title": "Obserwowane kanały" + } + }, + "content": { + "Base": { + "link": { + "libraries": "Biblioteki", + "tracks": "Utwory" + }, + "menu": { + "secondary": "Podmenu" + }, + "title": "Dodaj zawartość" + }, + "Home": { + "button": { + "start": "Rozpocznij" + }, + "description": { + "channel": { + "1": "Jeżeli jesteś muzykiem lub tworzysz podcasty, kanały są stworzone dla Ciebie!", + "2": "Udostępnij twoje utwory publicznie i zdobądź obserwatorów na Funkwhale, Fediverse albo jakiejkolwiek aplikacji do podcastów." + }, + "follow": "Możesz zaobserwować biblioteki innych użytkowników, aby uzyskać dostęp do nowej muzyki. Publiczne biblioteki mogą być zaobserwowane natychmiast, a do zaobserwowania prywatnej biblioteki będziesz potrzebował zgody jej właściciela.", + "upload": "Prześlij swoją osobistą muzykę do Funkwhale, aby czerpać z niej przyjemność w każdym miejscu oraz dzielić się nią z przyjaciółmi i rodziną." + }, + "header": { + "channel": "Publikuj swoje prace na kanale", + "follow": "Obserwuj zdalne biblioteki", + "upload": "Prześlij do biblioteki treści innych wykonawców" + }, + "help": { + "uploadQuota": "Ta instancja oferuje {quota} przestrzeni dla każdego użytkownika." + }, + "title": "Dodaj lub zarządzaj zawartością" + }, + "libraries": { + "Card": { + "button": { + "upload": "Prześlij pliki" + }, + "label": { + "size": "Łączny rozmiar wszystkich plików w tej bibliotece" + }, + "link": { + "details": "Szczegóły biblioteki" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + } + }, + "FilesTable": { + "action": { + "delete": "Usuń", + "restartImport": "Uruchom importowanie ponownie" + }, + "button": { + "showStatus": "Pokaż więcej informacji dotyczących procesu importowania tego utworu" + }, + "empty": { + "noTracks": "Nie dodano jeszcze żadnych utworów do tej biblioteki" + }, + "label": { + "importStatus": "Stan importu", + "search": "Szukaj" + }, + "notApplicable": "Niedostępne", + "option": { + "status": { + "all": "Wszystkie", + "draft": "Oczekujący", + "failed": "Zakończony błędem", + "finished": "Ukończono", + "pending": "W toku", + "skipped": "Pominięto" + } + }, + "ordering": { + "direction": { + "ascending": "Rosnąco", + "descending": "Malejąco", + "label": "Kolejność" + }, + "label": "Porządkowanie" + }, + "pagination": { + "results": "Wyświetlanie wyników { start }-{ end } z { total }" + }, + "placeholder": { + "search": "Szukaj za pomocą tytułu, wykonawcy, albumu…" + }, + "table": { + "file": { + "header": { + "album": "Album", + "artist": "Wykonawca", + "duration": "Czas trwania", + "importStatus": "Stan importu", + "size": "Rozmiar", + "title": "Tytuł", + "uploadDate": "Data przesłania" + } + } + } + }, + "Form": { + "button": { + "confirm": "Usuń bibliotekę", + "create": "Utwórz bibliotekę", + "delete": "Usuń", + "update": "Zapisz bibliotekę" + }, + "description": { + "library": "Biblioteki pomagają organizować i udostępniać kolekcje muzyki. Możesz przesłać własną kolekcję muzyki na Funkwhale i dzielić się nią z rodziną i znajomymi.", + "visibility": "Możesz udostępniać swoją bibliotekę innym, nie zważając na jej widoczność." + }, + "header": { + "failure": "Błąd" + }, + "label": { + "description": "Opis", + "name": "Nazwa", + "visibility": "Widoczność" + }, + "message": { + "libraryCreated": "Utworzono bibliotekę", + "libraryDeleted": "Usunięto bibliotekę", + "libraryUpdated": "Zaktualizowano bibliotekę" + }, + "modal": { + "delete": { + "content": { + "warning": "Biblioteka i wszystkie znajdujące się w niej utwory zostaną usunięte. To działanie jest nieodwracalne." + }, + "header": "Usunąć tę bibliotekę?" + } + }, + "placeholder": { + "description": "Ta biblioteka zawiera moją osobistą muzykę, mam nadzieję że Ci się spodoba.", + "name": "Moja wspaniała biblioteka" + } + }, + "Home": { + "empty": { + "noLibrary": "Wygląda na to, że nie masz jeszcze żadnej biblioteki — może to już czas, żeby jakąś utworzyć?" + }, + "header": { + "libraries": "Moje biblioteki" + }, + "link": { + "createLibrary": "Utwórz nową bibliotekę" + }, + "loading": { + "libraries": "Ładowanie bibliotek…" + } + }, + "Quota": { + "button": { + "purge": "Wyczyść" + }, + "header": { + "currentUsage": "Obecne użycie" + }, + "label": { + "currentUsage": "Wykorzystano { current } z przydzielonego { max }", + "errored": "Pliki zakończone błędem", + "pending": "Pliki w trakcie przetwarzania", + "skipped": "Pominięte pliki" + }, + "link": { + "viewFiles": "Zobacz pliki" + }, + "loading": { + "currentUsage": "Ładowanie danych o użyciu…" + }, + "modal": { + "purgeErrored": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, ale wystąpił błąd podczas ich importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki zakończone błędami?" + }, + "purgePending": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, ale nie zostały jeszcze przetworzone, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pliki w toku?" + }, + "purgeSkipped": { + "content": { + "description": "Ta opcja usunie utwory które zostały przesłane, lecz pominięte w procesie importowania, jednocześnie przywracając Ci zajmowany przez nie przydział przestrzeni." + }, + "header": "Wyczyścić pominięte pliki?" + } + } + } + }, + "remote": { + "Card": { + "button": { + "cancel": "Cofnij prośbę o obserwowanie", + "follow": "Obserwuj", + "pending": "Obserwowanie oczekuje na zatwierdzenie", + "unfollow": "Przestań obserwować" + }, + "label": { + "scanFailure": "Problem podczas skanowania", + "scanPartialSuccess": "Przeskanowano z błędami", + "scanPending": "Skanowanie w toku", + "scanProgress": "Skanowanie… ({ progress }%)", + "scanSuccess": "Przeskanowano", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "scan": "Skanuj teraz", + "scanDetails": "Szczegóły" + }, + "message": { + "scanLaunched": "Uruchomiono skanowanie", + "scanSkipped": "Skanowanie pominięte (poprzednie skanowanie odbyło się zbyt niedawno)" + }, + "meta": { + "failedTracks": "Utwory zakończone błędem:", + "lastUpdate": "Ostatnia aktualizacja:", + "tracks": "{ n } utwór | { n } utwory" + }, + "modal": { + "unfollow": { + "content": { + "warning": "Gdy przestaniesz obserwować tę bibliotekę, stracisz dostęp do jej zawartości." + }, + "header": "Czy chcesz przestać obserwować tę bibliotekę?" + } + }, + "tooltip": { + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } + }, + "Home": { + "button": { + "refresh": "Odśwież" + }, + "description": { + "remoteLibraries": "Zdalne biblioteki należą do użytkowników innych instancji. Możesz uzyskać do nich dostęp jeżeli został Ci on przyznany lub jeżeli są publiczne." + }, + "header": { + "knownLibraries": "Znane biblioteki", + "remoteLibraries": "Zdalne biblioteki" + }, + "loading": { + "remoteLibraries": "Ładowanie zdalnych bibliotek…" + } + }, + "ScanForm": { + "button": { + "submit": "Zatwierdź wyszukiwanie" + }, + "header": { + "failure": "Wystąpił błąd podczas pobierania zdalnej biblioteki" + }, + "label": { + "search": "Wyszukaj w zdalnej bibliotece" + }, + "placeholder": { + "url": "Wprowadź adres URL biblioteki" } } } }, - "Search": { - "label": { - "albums": "Albumy", - "artists": "Artyści", - "playlists": "Listy odtwarzania", - "podcasts": "Podcasty", - "radios": "Stacje radiowe", - "series": "Seriale", - "tags": "Tagi", - "tracks": "Utwory" + "library": { + "DetailAlbums": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "header": { - "search": "Szukaj", - "remote": "Wyszukaj zdalnego obiektu", - "rss": "Zasubskrybuj kanał RSS podcastu" + "DetailOverview": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } }, - "button": { - "submit": "Zatwierdź wyszukiwanie" + "DetailTracks": { + "empty": { + "follow": "Powinieneś śledzić tę bibliotekę, aby zobaczyć jej zawartość.", + "upload": "Ta biblioteka jest pusta, chyba powinieneś coś wrzucić!" + } + }, + "Edit": { + "button": { + "accept": "Zaakceptuj", + "reject": "Odrzuć" + }, + "empty": { + "noFollowers": "Nikt nie obserwuje tej biblioteki" + }, + "header": { + "followers": "Obserwatorzy", + "libraryContents": "Zawartość biblioteki" + }, + "loading": { + "followers": "Ładowanie obserwujących…" + }, + "table": { + "action": { + "header": { + "action": "Działanie", + "date": "Data", + "status": "Stan", + "user": "Użytkownik" + }, + "status": { + "accepted": "Zaakceptowano", + "pending": "Oczekuje na przyjęcie", + "rejected": "Odrzucono" + } + } + } + }, + "LibraryBase": { + "button": { + "edit": "Edytuj", + "upload": "Prześlij pliki" + }, + "description": { + "sharingLink": "Podziel się tym odnośnikiem z innymi użytkownikami, aby mogli poprosić o dostęp do Twojej biblioteki poprzez wklejenie go w pole wyszukiwania." + }, + "label": { + "instance": "Ograniczona", + "private": "Prywatne", + "public": "Publiczne", + "sharingLink": "Odnośnik do udostępnienia" + }, + "link": { + "albums": "Albumy", + "artists": "Artyści", + "domain": "Zobacz na { domain }", + "moderation": "Otwórz w interfejsie moderacyjnym", + "owner": "Należy do { username }", + "tracks": "Utwory" + }, + "meta": { + "tracks": "{ n } utwór | { n } utwory" + }, + "title": "Biblioteka", + "tooltip": { + "instance": "Dostęp do tej biblioteki jest ograniczony tylko do użytkowników tej instancji", + "private": "Ta biblioteka jest prywatna i pozwolenie od jej właściciela jest niezbędne, aby uzyskać do dostęp do jej zawartości", + "public": "Ta biblioteka jest publiczna i możesz swobodnie uzyskać dostęp do jej zawartości" + } } }, "playlists": { + "Detail": { + "button": { + "cancel": "Anuluj", + "confirm": "Usuń listę odtwarzania", + "delete": "Usuń", + "edit": "Edytuj", + "embed": "Osadź", + "playAll": "Odtwarzaj wszystkie", + "stopEdit": "Przestań edytować" + }, + "empty": { + "noTracks": "Nie ma jeszcze utworów na tej liście odtwarzania" + }, + "header": { + "tracks": "Utwory" + }, + "meta": { + "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwór | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" + }, + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." + }, + "header": "Czy chcesz usunąć listę odtwarzania „{ playlist }”?" + }, + "embed": { + "header": "Osadź tę listę odtwarzania na swojej stronie internetowej" + } + }, + "title": "Lista odtwarzania" + }, "List": { + "button": { + "create": "Utwórz listę odtwarzania", + "manage": "Zarządzaj swoimi listami odtwarzania", + "search": "Szukaj" + }, + "empty": { + "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" + }, + "header": { + "browse": "Przeglądaj listy odtwarzania", + "playlists": "Listy odtwarzania" + }, + "label": { + "search": "Szukaj" + }, "ordering": { "direction": { "ascending": "Rosnąco", @@ -4159,58 +4456,11 @@ }, "label": "Porządkowanie" }, - "header": { - "browse": "Przeglądaj listy odtwarzania", - "playlists": "Listy odtwarzania" - }, - "button": { - "create": "Utwórz listę odtwarzania", - "manage": "Zarządzaj swoimi listami odtwarzania", - "search": "Szukaj" - }, - "placeholder": { - "search": "Wprowadź nazwę listy odtwarzania…" - }, - "empty": { - "noResults": "Nie znaleziono wyników pasujących do Twojego zapytania" - }, "pagination": { "results": "Wyniki na stronie" }, - "label": { - "search": "Szukaj" - } - }, - "Detail": { - "button": { - "cancel": "Anuluj", - "delete": "Usuń", - "confirm": "Usuń listę odtwarzania", - "edit": "Edytuj", - "embed": "Osadź", - "playAll": "Odtwarzaj wszystkie", - "stopEdit": "Przestań edytować" - }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć listę odtwarzania „{ playlist }”?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie listy odtwarzania. To działanie jest nieodwracalne." - } - }, - "embed": { - "header": "Osadź tę listę odtwarzania na swojej stronie internetowej" - } - }, - "title": "Lista odtwarzania", - "meta": { - "tracks": "Lista odtwarzania stworzona przez { username } zawierająca { n } utwór | Lista odtwarzania stworzona przez { username } zawierająca { n } utwory" - }, - "empty": { - "noTracks": "Nie ma jeszcze utworów na tej liście odtwarzania" - }, - "header": { - "tracks": "Utwory" + "placeholder": { + "search": "Wprowadź nazwę listy odtwarzania…" } } }, @@ -4220,287 +4470,43 @@ "confirm": "Usuń stację radiową", "edit": "Edytuj…" }, - "modal": { - "delete": { - "header": "Czy chcesz usunąć stację radiową „{ radio }”?", - "content": { - "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." - } - } - }, "empty": { "noTracks": "Nie dodano jeszcze żadnych utworów do tej stacji radiowej" }, - "title": "Stacja radiowa", "header": { "tracks": "Utwory" - } - } - } - }, - "composables": { - "audio": { - "usePlayOptions": { - "addToQueueMessage": "Dodano { n } utwór do kolejki | Dodano { n } utwory do kolejki" - } - }, - "locale": { - "useSharedLabels": { - "scopes": { - "libraries": { - "description": "Dostęp do plików audio, bibliotek, wykonawców, albumów i utworów", - "label": "Biblioteki i przesłane pliki" - }, - "filters": { - "description": "Dostęp do filtrów treści", - "label": "Filtry treści" - }, - "profile": { - "description": "Dostęp do adresu e-mail, nazwy użytkownika i informacji o profilu", - "label": "Profil" - }, - "edits": { - "description": "Dostęp do edycji", - "label": "Edycje" - }, - "follows": { - "description": "Dostęp do obserwowanych", - "label": "Obserwacje" - }, - "listenings": { - "description": "Dostęp do historii odtwarzania", - "label": "Odsłuchania" - }, - "reports": { - "description": "Dostęp do zgłoszeń moderacyjnych", - "label": "Zgłoszenia" - }, - "notifications": { - "description": "Dostęp do powiadomień", - "label": "Powiadomienia" - }, - "playlists": { - "description": "Dostęp do list odtwarzania", - "label": "Listy odtwarzania" - }, - "radios": { - "description": "Dostęp do stacji radiowych", - "label": "Stacje radiowe" - }, - "security": { - "description": "Dostęp do ustawień związanych z bezpieczeństwem np. haseł i autoryzacji", - "label": "Bezpieczeństwo" - }, - "favorites": { - "label": "Ulubione" - } }, - "filters": { - "accessedDate": "Data dostępu", - "albumTitle": "Nazwa albumu", - "artistName": "Nazwa wykonawcy", - "bitrate": "Szybkość transmisji", - "creationDate": "Data utworzenia", - "domain": "Domena", - "duration": "Czas trwania", - "expirationDate": "Data wygaśnięcia", - "firstSeen": "Data widzenia po raz pierwszy", - "followers": "Obserwatorzy", - "itemsCount": "Elementy", - "lastActivity": "Ostatnia aktywność", - "lastSeen": "Data ostatniej aktywności", - "modificationDate": "Data modyfikacji", - "name": "Nazwa", - "receivedMessages": "Otrzymane wiadomości", - "releaseDate": "Data wydania", - "dateJoined": "Data rejestracji", - "size": "Rozmiar", - "trackTitle": "Tytuł utworu", - "uploads": "Przesłane pliki", - "username": "Nazwa użytkownika", - "users": "Użytkownicy" - }, - "fields": { - "privacyLevel": { - "label": "Widoczność aktywności", - "help": "Ustal poziom widoczności twojej aktywności", - "shortChoices": { - "public": "Każdy", - "instance": "Instancja", - "private": "Prywatne" + "modal": { + "delete": { + "content": { + "warning": "Spowoduje to bezpowrotne usunięcie stacji radiowej. To działanie jest nieodwracalne." }, - "choices": { - "instance": "Każdy na tej instancji", - "public": "Każdy na dowolnej instancji", - "private": "Nikt poza mną" - } - }, - "summary": { - "label": "O mnie" - }, - "reportType": { - "label": "Kategoria", - "choices": { - "illegalContent": "Nielegalne treści", - "invalidMetadata": "Nieprawidłowe metadane", - "offensiveContent": "Obraźliwe treści", - "other": "lnna", - "takedownRequest": "Prośba o usunięcie" - } - }, - "importStatus": { - "label": "Kliknij, aby zobaczyć więcej informacji dotyczących procesu importowania tego pliku", - "choices": { - "draft": { - "label": "Oczekujący", - "help": "Ten utwór został przesłany, ale nie został jeszcze wyznaczony do przetwarzania" - }, - "errored": { - "label": "Zakończono błędem", - "help": "Wystąpił błąd podczas przetwarzania tego utworu, upewnij się że posiada on poprawne metadane" - }, - "finished": { - "label": "Ukończono", - "help": "Zaimportowano" - }, - "pending": { - "label": "W toku", - "help": "Ten utwór został przesłany, ale nie został jeszcze przetworzony przez serwer" - }, - "skipped": { - "label": "Pominięto", - "help": "Ten utwór jest już w jednej z bibliotek" - } - } - }, - "contentCategory": { - "label": "Kategoria treści", - "choices": { - "music": "Muzyka", - "other": "lnne", - "podcast": "Podcast" - } + "header": "Czy chcesz usunąć stację radiową „{ radio }”?" } - } + }, + "title": "Stacja radiowa" } }, - "moderation": { - "useReport": { - "account": { - "typeLabel": "Konto" - }, - "album": { - "typeLabel": "Album", - "label": "Zgłoś ten album…" - }, - "artist": { - "typeLabel": "Wykonawca", - "label": "Zgłoś tego wykonawcę…" - }, - "channel": { - "typeLabel": "Kanał", - "label": "Zgłoś ten kanał…" - }, - "library": { - "typeLabel": "Biblioteka", - "label": "Zgłoś tę bibliotekę…" - }, - "playlist": { - "typeLabel": "Lista odtwarzania", - "label": "Zgłoś tę listę odtwarzania…" - }, - "track": { - "label": "Zgłoś ten utwór…", - "typeLabel": "Utwór" - } + "ChooseInstance": { + "button": { + "submit": "Prześlij" }, - "useReportConfigs": { - "account": { - "label": "Konto", - "summary": "O mnie" - }, - "album": { - "label": "Album", - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "artist": { - "label": "Wykonawca" - }, - "channel": { - "label": "Kanał" - }, - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł", - "label": "Utwór" - }, - "creationDate": { - "label": "Data utworzenia" - }, - "library": { - "description": "Opis", - "label": "Biblioteka" - }, - "musicbrainzId": { - "label": "Identyfikator MusicBrainz" - }, - "name": { - "label": "Nazwa" - }, - "playlist": { - "label": "Lista odtwarzania" - }, - "tags": { - "label": "Tagi" - }, - "visibility": { - "label": "Widoczność" - } + "header": { + "chooseInstance": "Wybierz instancję", + "failure": "Nie można połączyć się z podanym adresem URL", + "suggestions": "Polecane" }, - "useEditConfigs": { - "track": { - "copyright": "Prawa autorskie", - "license": "Licencja", - "position": "Pozycja", - "title": "Tytuł" - }, - "cover": { - "label": "Okładka" - }, - "description": { - "label": "Opis" - }, - "artist": { - "name": "Nazwa" - }, - "album": { - "releaseDate": "Data wydania", - "title": "Tytuł" - }, - "tags": { - "label": "Tagi" - } + "help": { + "notFunkwhaleServer": "Pod podanym adresem nie ma instancji Funkwhale", + "selectPod": "Aby kontynuować proszę wybrać instancję Funkwhale do której chcesz się połączyć. Wpisz bezpośrednio adres albo wybierz jedną z sugerowanych opcji.", + "serverDown": "Serwer może być niedostępny" + }, + "label": { + "url": "Adres URL instancji" + }, + "message": { + "newUrl": "Używasz teraz instancji Funkwhale pod adresem { url }" } - }, - "useThemeList": { - "darkTheme": "Ciemny", - "lightTheme": "Jasny" - } - }, - "init": { - "serviceWorker": { - "newAppVersion": "Dostępna jest nowa wersja aplikacji.", - "actions": { - "later": "Póżniej", - "update": "Aktualizuj" - } - }, - "axios": { - "rateLimitDelay": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie za { delay }", - "rateLimitLater": "Wysłałeś zbyt wiele zapytań i zostałeś tymczasowo zablokowany, spróbuj ponownie później" } } } diff --git a/front/src/locales/pt_BR.json b/front/src/locales/pt_BR.json index f23243903..281d9075c 100644 --- a/front/src/locales/pt_BR.json +++ b/front/src/locales/pt_BR.json @@ -218,28 +218,6 @@ "unsupported": "Tipo de objeto ainda não suportado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Escolha sua instância", - "failure": "Não foi possível entrar neste link", - "suggestions": "Opções sugeridas" - }, - "help": { - "notFunkwhaleServer": "Este link não é de uma instância Funkwhale", - "selectPod": "Para continuar, insira a instância Funkwhale que você deseja entrar. Digite o endereço ou selecione uma das sugeridas.", - "serverDown": "Parece que o servidor caiu" - }, - "label": { - "url": "Link da instância" - }, - "message": { - "newUrl": "Você está usando a instância Funkwhale em { url }" - } - }, "ShortcutsModal": { "button": { "close": "Fechar" @@ -4362,6 +4340,27 @@ }, "title": "Rádio" } + }, + "ChooseInstance": { + "button": { + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Escolha sua instância", + "failure": "Não foi possível entrar neste link", + "suggestions": "Opções sugeridas" + }, + "help": { + "notFunkwhaleServer": "Este link não é de uma instância Funkwhale", + "selectPod": "Para continuar, insira a instância Funkwhale que você deseja entrar. Digite o endereço ou selecione uma das sugeridas.", + "serverDown": "Parece que o servidor caiu" + }, + "label": { + "url": "Link da instância" + }, + "message": { + "newUrl": "Você está usando a instância Funkwhale em { url }" + } } } } diff --git a/front/src/locales/pt_PT.json b/front/src/locales/pt_PT.json index 0d19d4934..4a78ec319 100644 --- a/front/src/locales/pt_PT.json +++ b/front/src/locales/pt_PT.json @@ -2266,19 +2266,6 @@ "modal": "Atalhos do teclado" } }, - "SetInstanceModal": { - "button": { - "cancel": "Cancelar", - "submit": "Enviar" - }, - "header": { - "chooseInstance": "Escolha sua instância", - "suggestions": "Escolhas sugeridas" - }, - "label": { - "url": "Dados da instância" - } - }, "Queue": { "button": { "clear": "Claro", @@ -3603,6 +3590,18 @@ "label": { "showRead": "Mostrar notificações antigas" } + }, + "ChooseInstance": { + "button": { + "submit": "Enviar" + }, + "header": { + "chooseInstance": "Escolha sua instância", + "suggestions": "Escolhas sugeridas" + }, + "label": { + "url": "Dados da instância" + } } }, "composables": { diff --git a/front/src/locales/ru.json b/front/src/locales/ru.json index a81974ad7..ee244a850 100644 --- a/front/src/locales/ru.json +++ b/front/src/locales/ru.json @@ -1,6 +1,6 @@ { "App": { - "loading": "Загрузка..." + "loading": "Загрузка…" }, "components": { "About": { @@ -172,7 +172,7 @@ "next": "Следующий трек", "pause": "Пауза", "play": "Проиграть", - "populatingRadio": "Получение радио трека...", + "populatingRadio": "Получение радио трека…", "previous": "Предыдущий трек", "queue": "Очередь", "remove": "Удалить", @@ -229,29 +229,6 @@ "unsupported": "Этот вид объекта пока не поддерживается" } }, - "SetInstanceModal": { - "button": { - "cancel": "Отмена", - "submit": "Отправить" - }, - "header": { - "chooseInstance": "Выберите свой узел", - "failure": "Невозможно соединиться с указанным URL", - "suggestions": "Предложенные изменения" - }, - "help": { - "notFunkwhaleServer": "Заданный адрес не является сервером Funkwhale", - "selectPod": "Чтобы продолжить, пожалуйста выберите узел Funkwhale, к которому Вы соединяетесь. Введите сам адрес или выберите один из предложенных вариантов.", - "serverDown": "Сервер может быть недоступен" - }, - "label": { - "url": "URL узла" - }, - "message": { - "currentConnection": "Сейчас вы подключены к { 0 }. Если вы продолжите, вы будете отключены от вашего текущего узла и все ваши локальные данные будут удалены.", - "newUrl": "Вы используете узел Funkwhale на { url }" - } - }, "ShortcutsModal": { "button": { "close": "Закрыть" @@ -1958,7 +1935,7 @@ "suggest": "Предложите правку для этого трека" }, "message": { - "remote": " Этот объект управляется другим сервером, Вы не можете редактировать его." + "remote": "Этот объект управляется другим сервером, Вы не можете редактировать его." } }, "radios": { @@ -4392,7 +4369,7 @@ }, "meta": { "failedTracks": "Ошибки в треках: {tracks}", - "lastUpdate": "Последнее обновление: ", + "lastUpdate": "Последнее обновление:", "tracks": "{ n } трек | { n } трека" }, "modal": { @@ -4611,6 +4588,28 @@ }, "title": "Радио" } + }, + "ChooseInstance": { + "button": { + "submit": "Отправить" + }, + "header": { + "chooseInstance": "Выберите свой узел", + "failure": "Невозможно соединиться с указанным URL", + "suggestions": "Предложенные изменения" + }, + "help": { + "notFunkwhaleServer": "Заданный адрес не является сервером Funkwhale", + "selectPod": "Чтобы продолжить, пожалуйста выберите узел Funkwhale, к которому Вы соединяетесь. Введите сам адрес или выберите один из предложенных вариантов.", + "serverDown": "Сервер может быть недоступен" + }, + "label": { + "url": "URL узла" + }, + "message": { + "currentConnection": "Сейчас вы подключены к { 0 }. Если вы продолжите, вы будете отключены от вашего текущего узла и все ваши локальные данные будут удалены.", + "newUrl": "Вы используете узел Funkwhale на { url }" + } } } } diff --git a/front/src/locales/sv.json b/front/src/locales/sv.json index 193cda36d..738eed6cf 100644 --- a/front/src/locales/sv.json +++ b/front/src/locales/sv.json @@ -1998,19 +1998,6 @@ } } }, - "SetInstanceModal": { - "button": { - "cancel": "Ångra", - "submit": "Skicka in" - }, - "header": { - "chooseInstance": "Välj din instans", - "suggestions": "Föreslagna val" - }, - "label": { - "url": "Instansradio" - } - }, "Queue": { "button": { "clear": "Rensa", @@ -3042,6 +3029,18 @@ "tracks": "Låtar" } } + }, + "ChooseInstance": { + "button": { + "submit": "Skicka in" + }, + "header": { + "chooseInstance": "Välj din instans", + "suggestions": "Föreslagna val" + }, + "label": { + "url": "Instansradio" + } } }, "composables": { diff --git a/front/src/locales/tr.json b/front/src/locales/tr.json index 890982ab7..05f1418d2 100644 --- a/front/src/locales/tr.json +++ b/front/src/locales/tr.json @@ -208,20 +208,6 @@ "unsupported": "Bu tür nesne henüz desteklenmiyor" } }, - "SetInstanceModal": { - "button": { - "cancel": "İptal", - "submit": "Gönder" - }, - "header": { - "failure": "Verilen URL'e bağlanılamaz", - "suggestions": "Önerilen seçimler" - }, - "help": { - "notFunkwhaleServer": "Verilen adres bir Funkwhale sunucusu değil", - "serverDown": "Sunucu çökük olabilir" - } - }, "ShortcutsModal": { "button": { "close": "Kapat" @@ -1690,6 +1676,19 @@ "tracks": "{ n } parça | { n } parça" } } + }, + "ChooseInstance": { + "button": { + "submit": "Gönder" + }, + "header": { + "failure": "Verilen URL'e bağlanılamaz", + "suggestions": "Önerilen seçimler" + }, + "help": { + "notFunkwhaleServer": "Verilen adres bir Funkwhale sunucusu değil", + "serverDown": "Sunucu çökük olabilir" + } } } } diff --git a/front/src/locales/zh_Hans.json b/front/src/locales/zh_Hans.json index 05f53ab02..36d9f131d 100644 --- a/front/src/locales/zh_Hans.json +++ b/front/src/locales/zh_Hans.json @@ -1,6 +1,6 @@ { "App": { - "loading": "加载中..." + "loading": "加载中…" }, "components": { "About": { @@ -109,6 +109,9 @@ "statistics": "统计", "welcome": "欢迎来到 { podName }!" }, + "help": { + "registrationsClosed": "本实例已关闭注册。您可以使用以下链接在其他实例注册。" + }, "link": { "findOtherPod": "查看其他实例", "funkwhale": "访问 funkwhale.audio", @@ -157,6 +160,7 @@ }, "header": { "failure": "此歌曲无法加载", + "noSources": "该音轨没有可用音源。", "radio": "您有一个电台正在播放" }, "label": { @@ -168,10 +172,13 @@ "next": "下一首", "pause": "暂停", "play": "播放", + "populatingRadio": "迷人的广播曲目…", "previous": "上一首", "queue": "播放队列", "remove": "删除", - "restart": "从头开始" + "restart": "从头开始", + "selectTrack": "选择轨道", + "showCoverArt": "节目封面设计" }, "message": { "automaticPlay": "下一首歌曲将在几秒钟后自动播放…", @@ -215,28 +222,6 @@ "unsupported": "这种类型的对象还不受支持" } }, - "SetInstanceModal": { - "button": { - "cancel": "取消", - "submit": "提交" - }, - "header": { - "chooseInstance": "选择实例", - "failure": "无法连接至指定 URL", - "suggestions": "建议的选择" - }, - "help": { - "notFunkwhaleServer": "输入的地址不是 Funkwhale 服务器", - "selectPod": "若要继续,请指定您要连接的 Funkwhale 实例。您可以直接输入地址,或从建议的选项中选择一个。", - "serverDown": "服务器可能开小差了" - }, - "label": { - "url": "实例 URL" - }, - "message": { - "newUrl": "您当前正在使用地址为 { url } 的 Funkwhale 实例" - } - }, "ShortcutsModal": { "button": { "close": "关闭" @@ -4510,6 +4495,27 @@ }, "title": "电台" } + }, + "ChooseInstance": { + "button": { + "submit": "提交" + }, + "header": { + "chooseInstance": "选择实例", + "failure": "无法连接至指定 URL", + "suggestions": "建议的选择" + }, + "help": { + "notFunkwhaleServer": "输入的地址不是 Funkwhale 服务器", + "selectPod": "若要继续,请指定您要连接的 Funkwhale 实例。您可以直接输入地址,或从建议的选项中选择一个。", + "serverDown": "服务器可能开小差了" + }, + "label": { + "url": "实例 URL" + }, + "message": { + "newUrl": "您当前正在使用地址为 { url } 的 Funkwhale 实例" + } } } } diff --git a/front/src/router/guards.ts b/front/src/router/guards.ts index 46804b98c..988cb5c51 100644 --- a/front/src/router/guards.ts +++ b/front/src/router/guards.ts @@ -3,6 +3,7 @@ import type { Permission } from '~/store/auth' import useLogger from '~/composables/useLogger' import store from '~/store' +import { TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' const logger = useLogger() @@ -17,7 +18,6 @@ export const hasPermissions = (permission: Permission) => (to: RouteLocationNorm export const requireLoggedIn = (fallbackLocation?: RouteLocationNamedRaw) => (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { if (store.state.auth.authenticated) return next() - logger.debug('!', to) return next(fallbackLocation ?? { name: 'login', query: { next: to.fullPath } }) } @@ -25,3 +25,14 @@ export const requireLoggedOut = (fallbackLocation: RouteLocationNamedRaw) => (to if (!store.state.auth.authenticated) return next() return next(fallbackLocation) } + +export const forceInstanceChooser = (to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { + if (to.path === '/instance-chooser') return next() + + // Force instance chooser if unset by tauri + if (store.getters['instance/url'].href === TAURI_DEFAULT_INSTANCE_URL) { + return next(`/instance-chooser?next=${encodeURIComponent(to.fullPath)}`) + } + + return next() +} diff --git a/front/src/router/index.ts b/front/src/router/index.ts index 67927a799..ce71293fa 100644 --- a/front/src/router/index.ts +++ b/front/src/router/index.ts @@ -1,7 +1,8 @@ import { createRouter, createWebHistory } from 'vue-router' +import { forceInstanceChooser } from './guards' import routes from './routes' -export default createRouter({ +const router = createRouter({ history: createWebHistory(import.meta.env.VUE_APP_ROUTER_BASE_URL as string ?? '/'), linkActiveClass: 'active', routes, @@ -22,3 +23,9 @@ export default createRouter({ }) } }) + +router.beforeEach((to, from, next) => { + return forceInstanceChooser(to, from, next) +}) + +export default router diff --git a/front/src/router/routes/index.ts b/front/src/router/routes/index.ts index 7eead6a53..d125d99d6 100644 --- a/front/src/router/routes/index.ts +++ b/front/src/router/routes/index.ts @@ -19,6 +19,11 @@ export default [ return next() } }, + { + path: '/instance-chooser', + name: 'instance-chooser', + component: () => import('~/views/ChooseInstance.vue') + }, { path: '/index.html', redirect: to => { diff --git a/front/src/shims-vue.d.ts b/front/src/shims-vue.d.ts index 8337a1d5f..77b3aa4fa 100644 --- a/front/src/shims-vue.d.ts +++ b/front/src/shims-vue.d.ts @@ -1,3 +1,11 @@ +// NOTE: This has to be in a file that is loaded before shims-vuex.d.ts as shims-vuex.d.ts imports from 'vuex' +declare module 'vuex' { + export * from 'vuex/types/index.d.ts' + export * from 'vuex/types/helpers.d.ts' + export * from 'vuex/types/logger.d.ts' + export * from 'vuex/types/vue.d.ts' +} + declare module '*.vue' { import type { DefineComponent } from 'vue' // eslint-disable-next-line @typescript-eslint/ban-types diff --git a/front/src/store/auth.ts b/front/src/store/auth.ts index d2a3f1530..34d20073d 100644 --- a/front/src/store/auth.ts +++ b/front/src/store/auth.ts @@ -2,6 +2,7 @@ import type { BackendError, User } from '~/types' import type { Module } from 'vuex' import type { RootState } from '~/store/index' import type { RouteLocationRaw } from 'vue-router' +import type { WebviewWindow } from '@tauri-apps/api/webviewWindow' import axios from 'axios' import useLogger from '~/composables/useLogger' @@ -9,6 +10,7 @@ import useFormData from '~/composables/useFormData' import { clear as clearIDB } from 'idb-keyval' import { useQueue } from '~/composables/audio/queue' +import { isTauri } from '~/composables/tauri' export type Permission = 'settings' | 'library' | 'moderation' export interface State { @@ -21,6 +23,8 @@ export interface State { scopedTokens: ScopedTokens applicationSecret: string | undefined + + oauthWindow: WebviewWindow | undefined } interface ScopedTokens { @@ -55,7 +59,7 @@ function getDefaultOauth (): OAuthTokens { async function createOauthApp () { const payload = { - name: `Funkwhale web client at ${window.location.hostname}`, + name: `Funkwhale web client at ${location.hostname}`, website: location.origin, scopes: NEEDED_SCOPES, redirect_uris: `${location.origin}/auth/callback` @@ -78,7 +82,9 @@ const store: Module<State, RootState> = { oauth: getDefaultOauth(), scopedTokens: getDefaultScopedTokens(), - applicationSecret: undefined + applicationSecret: undefined, + + oauthWindow: undefined }, getters: { header: state => { @@ -243,14 +249,53 @@ const store: Module<State, RootState> = { commit('permission', { key: permission, status: hasPermission }) } }, - async oauthLogin ({ state, rootState, commit }, next: RouteLocationRaw) { + async tryFinishOAuthFlow ({ state }) { + if (isTauri()) { + return state.oauthWindow?.close?.().catch(() => { + // Ignore the error in case of window being already closed + }) + } + }, + async oauthLogin ({ state, rootState, commit, dispatch }, next: RouteLocationRaw) { const app = await createOauthApp() commit('oauthApp', app) - const redirectUri = encodeURIComponent(`${location.origin}/auth/callback`) - const params = `response_type=code&scope=${encodeURIComponent(NEEDED_SCOPES)}&redirect_uri=${redirectUri}&state=${next}&client_id=${state.oauth.clientId}` + const redirectUrl = encodeURIComponent(`${location.origin}/auth/callback`) + const params = `response_type=code&scope=${encodeURIComponent(NEEDED_SCOPES)}&redirect_uri=${redirectUrl}&state=${next}&client_id=${state.oauth.clientId}` const authorizeUrl = `${rootState.instance.instanceUrl}authorize?${params}` - logger.log('Redirecting user...', authorizeUrl) - window.location.href = authorizeUrl + + if (isTauri()) { + const { WebviewWindow, getCurrent } = await import('@tauri-apps/api/webviewWindow') + + state.oauthWindow = new WebviewWindow('oauth', { + title: `Login to ${rootState.instance.settings.instance.name}`, + parent: 'main', + url: authorizeUrl + }) + + const token = await new Promise((resolve, reject) => { + if (!state.oauthWindow) return + + const stop = getCurrent().once<string>('oauthToken', async (event) => { + resolve(event.payload) + }) + + state.oauthWindow.once('tauri://error', async (error) => { + (await stop)() + reject(error) + }) + + state.oauthWindow.once('tauri://destroyed', async () => { + (await stop)() + reject(new Error('Aborted by user')) + }) + }).finally(() => dispatch('tryFinishOAuthFlow')) + + commit('oauthToken', token) + await dispatch('fetchUser') + } else { + logger.log('Redirecting user...', authorizeUrl) + location.href = authorizeUrl + } }, async handleOauthCallback ({ state, commit, dispatch }, authorizationCode) { logger.log('Fetching token...') @@ -266,6 +311,18 @@ const store: Module<State, RootState> = { useFormData(payload), { headers: { 'Content-Type': 'multipart/form-data' } } ) + + if (isTauri()) { + const { getCurrent } = await import('@tauri-apps/api/webviewWindow') + const currentWindow = getCurrent() + + // If the current window is the oauth window, pass the event to the main window + if (currentWindow.label === 'oauth') { + await currentWindow.emitTo('main', 'oauthToken', response.data) + return + } + } + commit('oauthToken', response.data) await dispatch('fetchUser') }, diff --git a/front/src/store/instance.ts b/front/src/store/instance.ts index 540d85e90..5be9e4ad5 100644 --- a/front/src/store/instance.ts +++ b/front/src/store/instance.ts @@ -5,6 +5,7 @@ import axios from 'axios' import { merge } from 'lodash-es' import useLogger from '~/composables/useLogger' import { useQueue } from '~/composables/audio/queue' +import { isTauri } from '~/composables/tauri' export interface State { frontSettings: FrontendSettings @@ -122,17 +123,30 @@ interface Settings { const logger = useLogger() +// Use some arbitrary url that will trigger the instance chooser, this needs to be a valid url +export const TAURI_DEFAULT_INSTANCE_URL = 'http://localhost/force-instance-chooser/' + // We have several way to guess the API server url. By order of precedence: -// 1. use the url provided in settings.json, if any +// 0. use the url provided in settings.json, if any. That's a lazy operation done by already initialized store. +// 1. force instance chooser, if in tauri app // 2. use the url specified when building via VUE_APP_INSTANCE_URL // 3. use the current url -let DEFAULT_INSTANCE_URL = `${location.origin}/` -try { - DEFAULT_INSTANCE_URL = new URL(import.meta.env.VUE_APP_INSTANCE_URL as string).href -} catch (e) { - logger.warn('Invalid VUE_APP_INSTANCE_URL, falling back to current url', e) +export const findDefaultInstanceUrl = () => { + if (isTauri()) { + return TAURI_DEFAULT_INSTANCE_URL + } + + try { + return new URL(import.meta.env.VUE_APP_INSTANCE_URL as string).href + } catch (e) { + logger.warn('Invalid VUE_APP_INSTANCE_URL, falling back to current url', e) + } + + return `${location.origin}/` } +const DEFAULT_INSTANCE_URL = findDefaultInstanceUrl() + const store: Module<State, RootState> = { namespaced: true, state: { diff --git a/front/src/style/_main.scss b/front/src/style/_main.scss index ddae53193..797948cba 100644 --- a/front/src/style/_main.scss +++ b/front/src/style/_main.scss @@ -5,6 +5,8 @@ $desktop-sidebar-width: 275px; $widedesktop-sidebar-width: 275px; $bottom-player-height: 4rem; +@import "@funkwhale/ui/style.css"; + @import "./globals/_fomantic.scss"; @import "./vendor/_media.scss"; diff --git a/front/src/types.ts b/front/src/types.ts index 668536ccc..a919fbe45 100644 --- a/front/src/types.ts +++ b/front/src/types.ts @@ -6,7 +6,7 @@ import type { RootState } from '~/store' // eslint-disable-next-line import type { ComponentPublicInstance } from '@vue/runtime-core' -import type { QueueTrack } from './composables/audio/queue' +import type { QueueTrack } from '~/composables/audio/queue' export type FunctionRef = Element | ComponentPublicInstance | null diff --git a/front/src/views/ChooseInstance.vue b/front/src/views/ChooseInstance.vue new file mode 100644 index 000000000..9214317f4 --- /dev/null +++ b/front/src/views/ChooseInstance.vue @@ -0,0 +1,211 @@ +<script setup lang="ts"> +import { ref, computed, watch, nextTick } from 'vue' +import { useI18n } from 'vue-i18n' +import { useStore } from '~/store' +import { TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' +import { uniq } from 'lodash-es' +import { useRoute, useRouter } from 'vue-router' + +import axios from 'axios' + +const instanceUrl = ref('') + +const store = useStore() +const suggestedInstances = computed(() => { + const serverUrl = store.state.instance.frontSettings.defaultServerUrl + return uniq([ + store.state.instance.instanceUrl, + ...store.state.instance.knownInstances, + serverUrl.endsWith('/') ? serverUrl : serverUrl + '/', + store.getters['instance/defaultInstance'] + ]).filter(url => url !== TAURI_DEFAULT_INSTANCE_URL) +}) + +watch(() => store.state.instance.instanceUrl, () => store.dispatch('instance/fetchSettings')) + +const route = useRoute() +const router = useRouter() + +const { t } = useI18n() +const isError = ref(false) +const isLoading = ref(false) +const checkAndSwitch = async (url: string) => { + isError.value = false + isLoading.value = true + + try { + const instanceUrl = new URL(url.startsWith('https://') || url.startsWith('http://') ? url : `https://${url}`).origin + await axios.get(instanceUrl + '/api/v1/instance/nodeinfo/2.0/') + + store.commit('ui/addMessage', { + content: t('views.ChooseInstance.message.newUrl', { url: instanceUrl }), + date: new Date() + }) + + await nextTick() + await store.dispatch('instance/setUrl', instanceUrl) + router.push(route.query.next as string || '/') + } catch (error) { + isError.value = true + } + + isLoading.value = false +} + +const isTauriInstance = computed(() => store.getters['instance/url'].href === TAURI_DEFAULT_INSTANCE_URL) +</script> + +<template> + <div class="instance-chooser"> + <img + class="light-logo" + src="../assets/logo/logo-full-500.png" + > + <img + class="dark-logo" + src="../assets/logo/logo-full-500-white.png" + > + + <div class="card"> + <h3 class="header"> + {{ t('views.ChooseInstance.header.chooseInstance') }} + </h3> + + <div class="scrolling content"> + <div + v-if="isError" + role="alert" + class="ui negative message" + > + <h4 class="header"> + {{ t('views.ChooseInstance.header.failure') }} + </h4> + <ul class="list"> + <li> + {{ t('views.ChooseInstance.help.serverDown') }} + </li> + <li> + {{ t('views.ChooseInstance.help.notFunkwhaleServer') }} + </li> + </ul> + </div> + + <form + class="ui form" + @submit.prevent="checkAndSwitch(instanceUrl)" + > + <p + v-if="store.state.instance.instanceUrl && !isTauriInstance" + class="description" + > + <i18n-t keypath="views.ChooseInstance.message.currentConnection"> + <a + :href="store.state.instance.instanceUrl" + target="_blank" + > + {{ store.getters['instance/domain'] }} + <i class="external icon" /> + </a> + </i18n-t> + {{ t('', { url: store.state.instance.instanceUrl, hostname: store.getters['instance/domain'] }) }} + </p> + <p + v-else + class="description" + > + {{ t('views.ChooseInstance.help.selectPod') }} + </p> + + <div class="field"> + <label for="instance-picker">{{ t('views.ChooseInstance.label.url') }}</label> + <div class="ui action input"> + <input + id="instance-picker" + v-model="instanceUrl" + type="text" + placeholder="https://funkwhale.server" + > + <button + type="submit" + :class="['ui', 'icon', { loading: isLoading }, 'button']" + > + {{ t('views.ChooseInstance.button.submit') }} + </button> + </div> + </div> + </form> + + <div class="ui hidden divider" /> + + <form + v-if="suggestedInstances.length > 0" + class="ui form" + @submit.prevent="" + > + <div class="field"> + <h4> + {{ t('views.ChooseInstance.header.suggestions') }} + </h4> + <div class="h-scroll"> + <button + v-for="(url, key) in suggestedInstances" + :key="key" + class="ui basic button" + @click="checkAndSwitch(url)" + > + {{ url }} + </button> + </div> + </div> + </form> + </div> + </div> + </div> +</template> + +<style scoped lang="scss"> +.instance-chooser { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 99000; + + background: var(--main-background); + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + >.card { + margin-top: 2rem; + max-width: 30rem; + width: 100%; + background: #fff; + padding: 1rem; + border-radius: 0.5rem; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); + + .h-scroll { + max-width: 100%; + overflow-x: auto; + display: flex; + padding: 0 6px 6px; + } + } +} + +.theme-dark .instance-chooser>.card { + background: var(--sidebar-background); +} + +.theme-dark .instance-chooser>.light-logo { + display: none; +} + +.theme-light .instance-chooser>.dark-logo { + display: none; +} +</style> diff --git a/front/src/views/Notifications.vue b/front/src/views/Notifications.vue index 95e612271..0b5a9694e 100644 --- a/front/src/views/Notifications.vue +++ b/front/src/views/Notifications.vue @@ -163,7 +163,7 @@ const markAllAsRead = async () => { {{ $t('views.Notifications.message.funkwhaleSupport') }} </p> <a - href="https://funkwhale.audio/support-us" + href="https://funkwhale.audio/donate" target="_blank" rel="noopener" class="ui primary inverted button" diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue index 34889c866..d85b0a976 100644 --- a/front/src/views/admin/Settings.vue +++ b/front/src/views/admin/Settings.vue @@ -24,6 +24,7 @@ const groups = computed(() => [ id: 'instance', settings: [ { name: 'instance__name' }, + { name: 'instance__location' }, { name: 'instance__short_description' }, { name: 'instance__long_description', fieldType: 'markdown', fieldParams: { charLimit: null, permissive: true } }, { name: 'instance__contact_email' }, @@ -56,7 +57,9 @@ const groups = computed(() => [ id: 'music', settings: [ { name: 'music__transcoding_enabled' }, - { name: 'music__transcoding_cache_duration' } + { name: 'music__transcoding_cache_duration' }, + { name: 'music__only_allow_musicbrainz_tagged_files' } + ] }, { @@ -78,6 +81,7 @@ const groups = computed(() => [ label: t('views.admin.Settings.header.moderation'), id: 'moderation', settings: [ + { name: 'moderation__languages' }, { name: 'moderation__allow_list_enabled' }, { name: 'moderation__allow_list_public' }, { name: 'moderation__unauthenticated_report_types' } diff --git a/front/tauri/.gitignore b/front/tauri/.gitignore new file mode 100644 index 000000000..aba21e242 --- /dev/null +++ b/front/tauri/.gitignore @@ -0,0 +1,3 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ diff --git a/front/tauri/Cargo.lock b/front/tauri/Cargo.lock new file mode 100644 index 000000000..3132f4f08 --- /dev/null +++ b/front/tauri/Cargo.lock @@ -0,0 +1,4936 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +dependencies = [ + "concurrent-queue", + "event-listener 5.1.0", + "event-listener-strategy 0.5.0", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.3.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite 2.2.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.2.0", + "parking", + "polling 3.5.0", + "rustix 0.38.31", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.31", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.1", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.31", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" + +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "atk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel", + "async-lock 3.3.0", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.2.0", + "piper", + "tracing", +] + +[[package]] +name = "brotli" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c764d619ca78fccbf3069b37bd7af92577f044bb15236036662d79b6559f25b7" + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +dependencies = [ + "serde", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.4.2", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cargo_toml" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" +dependencies = [ + "serde", + "toml 0.8.2", +] + +[[package]] +name = "cc" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9fa1897e4325be0d68d48df6aa1a71ac2ed4d27723887e7754192705350730" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa50868b64a9a6fda9d593ce778849ea8715cd2a3d2cc17ffdb4a2f2f2f1961d" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "cfg_aliases" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color-eyre" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.50", +] + +[[package]] +name = "ctor" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +dependencies = [ + "quote", + "syn 2.0.50", +] + +[[package]] +name = "darling" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c376d08ea6aa96aafe61237c7200d1241cb177b7d3a542d791f2d118e9cbb955" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33043dcd19068b8192064c704b3f83eb464f91f1ff527b44a4e2b08d9cdb8855" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.50", +] + +[[package]] +name = "darling_macro" +version = "0.20.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a91391accf613803c2a9bf9abccdbaa07c54b4244a5b64883f9c3c137c86be" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading 0.8.1", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "drm" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0f8a69e60d75ae7dab4ef26a59ca99f2a89d4c142089b537775ae0c198bdcde" +dependencies = [ + "bitflags 2.4.2", + "bytemuck", + "drm-ffi", + "drm-fourcc", + "rustix 0.38.31", +] + +[[package]] +name = "drm-ffi" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" +dependencies = [ + "drm-sys", + "rustix 0.38.31", +] + +[[package]] +name = "drm-fourcc" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4" + +[[package]] +name = "drm-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d09ff881f92f118b11105ba5e34ff8f4adf27b30dae8f12e28c193af1c83176" +dependencies = [ + "libc", + "linux-raw-sys 0.6.4", +] + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "embed-resource" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bde55e389bea6a966bd467ad1ad7da0ae14546a5bc794d16d1e55e7fca44881" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.2", + "vswhom", + "winreg 0.51.0", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ad6fd685ce13acd6d9541a30f6db6567a7a24c9ffd4ba2955d29e3f22c8b27" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.1.0", + "pin-project-lite", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset 0.9.0", + "rustc_version", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funkwhale" +version = "0.1.0" +dependencies = [ + "color-eyre", + "serde", + "serde_json", + "tauri", + "tauri-build", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" +dependencies = [ + "libc", + "windows-targets 0.48.5", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.4.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "h2" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.2.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.10", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa 1.0.10", + "pin-project-lite", + "socket2 0.5.5", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034bbe799d1909622a74d1193aa50147769440040ff36cb2baa947609b0a4e23" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "infer" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +dependencies = [ + "serde", + "serde_json", + "thiserror", + "treediff", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.4.2", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.2", + "libc", + "redox_syscall", +] + +[[package]] +name = "line-wrap" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" +dependencies = [ + "safemem", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "linux-raw-sys" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "memmap2" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", +] + +[[package]] +name = "muda" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c47e7625990fc1af2226ea4f34fb2412b03c12639fcb91868581eb3a6893453" +dependencies = [ + "cocoa", + "crossbeam-channel", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "raw-window-handle 0.5.2", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +dependencies = [ + "base64", + "indexmap 2.2.3", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.31", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom 0.2.12", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "reqwest" +version = "0.11.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "safemem" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa 1.0.10", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "softbuffer" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071916a85d1db274b4ed57af3a14afb66bd836ae7f82ebb6f1fd3455107830d9" +dependencies = [ + "as-raw-xcb-connection", + "bytemuck", + "cfg_aliases 0.2.0", + "cocoa", + "core-graphics", + "drm", + "fastrand 2.0.1", + "foreign-types", + "js-sys", + "log", + "memmap2", + "objc", + "raw-window-handle 0.6.0", + "redox_syscall", + "rustix 0.38.31", + "tiny-xlib", + "wasm-bindgen", + "wayland-backend", + "wayland-client", + "wayland-sys", + "web-sys", + "windows-sys 0.52.0", + "x11rb", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" +dependencies = [ + "loom", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f1bdc9872430ce9b75da68329d1c1746faf50ffac5f19e02b71e37ff881ffb" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +dependencies = [ + "cfg-expr", + "heck", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tao" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa7ba6ee5b8908ba3a62e6a4f3683490ed732fca614cdd3f4c989bba548f9a9" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle 0.6.0", + "scopeguard", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", + "zbus", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "target-lexicon" +version = "0.12.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" + +[[package]] +name = "tauri" +version = "2.0.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66497d130e3fb9889d738a3cffe1134a42ac1ce2177eca7fa0574a411000afde" +dependencies = [ + "anyhow", + "bytes", + "cocoa", + "dirs-next", + "embed_plist", + "futures-util", + "getrandom 0.2.12", + "glob", + "gtk", + "heck", + "http", + "jni", + "libc", + "log", + "mime", + "muda", + "objc", + "percent-encoding", + "raw-window-handle 0.6.0", + "reqwest", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "state", + "static_assertions", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.52.0", +] + +[[package]] +name = "tauri-build" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2932ca516808980f551fae4eb54009fd743648966ba4ce06a54f231cedefa2a0" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs-next", + "glob", + "heck", + "json-patch", + "schemars", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "toml 0.8.2", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f02a9d089133557849d11dfc30ad4be675ee05a4c191b7321da1e8d8dabd634" +dependencies = [ + "base64", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2", + "syn 2.0.50", + "tauri-utils", + "thiserror", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115afb62760852e70cd25633008c761999527d8e38352f335761dfb9c8f735dc" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.50", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014f1f9253ceaa503f5e07c1ca5d06271241090517b545c00cc6afb96a3d218e" +dependencies = [ + "gtk", + "http", + "jni", + "raw-window-handle 0.6.0", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "windows 0.52.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e117db5f0f3b2f233063805d71459b096711fe803cabd32f19c6f5cf15b6d7ab" +dependencies = [ + "cocoa", + "gtk", + "http", + "jni", + "percent-encoding", + "raw-window-handle 0.6.0", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "webkit2gtk", + "webview2-com", + "windows 0.52.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbd83e66dab28c32a35e44ea71c02da16aca2259731b8b25d4c9476613f1681" +dependencies = [ + "brotli", + "cargo_metadata", + "ctor", + "dunce", + "glob", + "heck", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "schemars", + "semver", + "serde", + "serde_json", + "serde_with", + "swift-rs", + "thiserror", + "toml 0.8.2", + "url", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tempfile" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "rustix 0.38.31", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa 1.0.10", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-xlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4098d49269baa034a8d1eae9bd63e9fa532148d772121dace3bcd6a6c98eb6d" +dependencies = [ + "as-raw-xcb-connection", + "ctor", + "libloading 0.8.1", + "tracing", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "tokio-util" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.3", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.3", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tray-icon" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4d9ddd4a7c0f3b6862af1c4911b529a49db4ee89310d3a258859c2f5053fdd" +dependencies = [ + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs-next", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + +[[package]] +name = "treediff" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d127780145176e2b5d16611cc25a900150e86e9fd79d3bde6ff3a37359c9cb5" +dependencies = [ + "serde_json", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.0", + "tempfile", + "winapi", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +dependencies = [ + "getrandom 0.2.12", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wayland-backend" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" +dependencies = [ + "cc", + "downcast-rs", + "rustix 0.38.31", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" +dependencies = [ + "bitflags 2.4.2", + "rustix 0.38.31", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +dependencies = [ + "dlib", + "log", + "once_cell", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webview2-com" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ae9c7e420783826cf769d2c06ac9ba462f450eca5893bb8c6c6529a4e5dd33" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.52.0", + "windows-core", + "windows-implement", + "windows-interface", +] + +[[package]] +name = "webview2-com-macros" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "webview2-com-sys" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6ad85fceee6c42fa3d61239eba5a11401bf38407a849ed5ea1b407df08cca72" +dependencies = [ + "thiserror", + "windows 0.52.0", + "windows-core", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" +dependencies = [ + "cocoa", + "objc", + "raw-window-handle 0.6.0", + "windows-sys 0.52.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-implement", + "windows-interface", + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-implement" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12168c33176773b86799be25e2a2ba07c7aab9968b37541f1094dbd7a60c8946" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "windows-interface" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d8dc32e0095a7eeccebd0e3f09e9509365ecb3fc6ac4d6f5f14a3f6392942d1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows-version" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "winreg" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wry" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9e7b81968555303086ef882a0c213896a76099de4ed0b86a798775c2d54304" +dependencies = [ + "base64", + "block", + "cfg_aliases 0.1.1", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdkx11", + "gtk", + "html5ever", + "http", + "javascriptcore-rs", + "jni", + "kuchikiki", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "objc_id", + "once_cell", + "raw-window-handle 0.6.0", + "serde", + "serde_json", + "sha2", + "soup3", + "tao-macros", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.52.0", + "windows-implement", + "windows-version", + "x11-dl", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading 0.8.1", + "once_cell", + "rustix 0.38.31", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" + +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "zbus" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c45d06ae3b0f9ba1fb2671268b975557d8f5a84bb5ec6e43964f87e763d8bca8" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a1ba45ed0ad344b85a2bb5a1fe9830aed23d67812ea39a586e7d0136439c7d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/front/tauri/Cargo.toml b/front/tauri/Cargo.toml new file mode 100644 index 000000000..1a73bf99f --- /dev/null +++ b/front/tauri/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "funkwhale" +version = "0.1.0" +description = "A Tauri App" +authors = ["Funkwhale Collective"] +license = "AGPLv3" +repository = "https://dev.funkwhale.audio/funkwhale/funkwhale/" +default-run = "funkwhale" +edition = "2021" +rust-version = "1.60" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +name = "funkwhale_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2.0.0-beta", features = [] } + +[dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = ["derive"] } +tauri = { version = "2.0.0-beta", features = [] } +color-eyre = "0.6.2" + +[features] +# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled. +# If you use cargo directly instead of tauri's cli you can use this feature flag to switch between tauri's `dev` and `build` modes. +# DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/front/tauri/build.rs b/front/tauri/build.rs new file mode 100644 index 000000000..d860e1e6a --- /dev/null +++ b/front/tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/front/tauri/capabilities/migrated.json b/front/tauri/capabilities/migrated.json new file mode 100644 index 000000000..4abe92575 --- /dev/null +++ b/front/tauri/capabilities/migrated.json @@ -0,0 +1,16 @@ +{ + "identifier": "migrated", + "description": "permissions that were migrated from v1", + "context": "local", + "windows": ["main", "oauth"], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default" + ], + "platforms": ["linux", "macOS", "windows", "android", "iOS"] +} diff --git a/front/tauri/capabilities/oauth.json b/front/tauri/capabilities/oauth.json new file mode 100644 index 000000000..ac8ea9e66 --- /dev/null +++ b/front/tauri/capabilities/oauth.json @@ -0,0 +1,8 @@ +{ + "identifier": "oauth2", + "description": "permissions that required for OAuth2 login window", + "context": "local", + "windows": ["main"], + "permissions": ["webview:allow-create-webview-window", "window:allow-close"], + "platforms": ["linux", "macOS", "windows", "android", "iOS"] +} diff --git a/front/tauri/favicon.png b/front/tauri/favicon.png new file mode 100644 index 000000000..5b9648a37 Binary files /dev/null and b/front/tauri/favicon.png differ diff --git a/front/tauri/favicon.svg b/front/tauri/favicon.svg new file mode 100644 index 000000000..85b5aad65 --- /dev/null +++ b/front/tauri/favicon.svg @@ -0,0 +1,3 @@ +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="32" xmlns="http://www.w3.org/2000/svg" height="32" id="screenshot-7b8093c9-7997-11ed-b471-13134daf88e2" viewBox="-0 0 32 32" style="-webkit-print-color-adjust: exact;" fill="none" version="1.1"><g xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" x="0px" id="shape-7b8093c9-7997-11ed-b471-13134daf88e2" style="fill: rgb(0, 0, 0);" ry="0" rx="0" y="0px" version="1.1"><g id="shape-7b80e1e0-7997-11ed-b471-13134daf88e2"><style type="text/css" rx="0" ry="0" style="fill: rgb(0, 0, 0);">.st0{fill:#FFFFFF;} + .st1{fill:#009FE3;} + .st2{fill:#3C3C3B;}</style></g><g id="shape-7b80e1e1-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e1-7997-11ed-b471-13134daf88e2"><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)" style="fill: rgb(0, 159, 227); fill-opacity: 1;"/></g><g id="strokes-7b80e1e1-7997-11ed-b471-13134daf88e2" class="strokes"><g class="inner-stroke-shape" transform="matrix(1.000000, -0.000000, 0.000000, 1.000000, -0.000000, 0.000000)"><defs><clipPath id="inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0"/></clipPath><ellipse class="st0" rx="16" ry="16" cx="15.999999999999886" cy="16" id="stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" style="fill: none; stroke-width: 4; stroke: rgb(0, 0, 0); stroke-opacity: 0;"/></defs><use href="#stroke-shape-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0" clip-path="url('#inner-stroke-rumext-id-3-7b80e1e1-7997-11ed-b471-13134daf88e2-0')"/></g></g></g><g id="shape-7b80e1e2-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e4-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e5-7997-11ed-b471-13134daf88e2" rx="0" ry="0" style="fill: rgb(0, 0, 0);"><g id="shape-7b80e1e7-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e7-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,22.000C19.308,22.000,22.000,19.444,22.000,16.302C22.000,16.142,21.850,16.000,21.682,16.000L19.421,16.000C19.252,16.000,19.103,16.142,19.103,16.302C19.103,17.917,17.720,19.249,16.000,19.249C14.299,19.249,12.897,17.935,12.897,16.302C12.897,16.142,12.748,16.000,12.579,16.000L10.318,16.000C10.150,16.000,10.000,16.142,10.000,16.302C10.000,19.462,12.692,22.000,16.000,22.000ZL16.000,22.000Z" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g><g id="shape-7b80e1e8-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e8-7997-11ed-b471-13134daf88e2"><path class="st1" rx="0" ry="0" d="M16.000,28.000C22.607,28.000,28.000,22.750,28.000,16.319C28.000,16.150,27.846,16.000,27.673,16.000L25.342,16.000C25.169,16.000,25.014,16.150,25.014,16.319C25.014,21.175,20.970,25.112,15.981,25.112C10.992,25.112,6.947,21.175,6.947,16.319C6.947,16.150,6.793,16.000,6.620,16.000L4.327,16.000C4.154,16.000,4.000,16.150,4.000,16.319C3.961,22.750,9.355,28.000,16.000,28.000ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g><g id="shape-7b80e1e6-7997-11ed-b471-13134daf88e2"><g class="fills" id="fills-7b80e1e6-7997-11ed-b471-13134daf88e2"><path class="st2" rx="0" ry="0" d="M10.737,10.262C11.528,10.674,12.382,10.751,13.147,11.201C13.644,11.497,13.963,11.819,14.269,12.308C14.753,13.041,14.728,13.967,14.728,13.967L14.792,14.984C14.792,14.984,15.174,16.000,16.028,16.000C16.934,16.000,17.265,14.984,17.265,14.984L17.329,13.967C17.329,13.967,17.303,13.054,17.788,12.308C18.094,11.819,18.400,11.471,18.910,11.201C19.675,10.751,20.529,10.674,21.319,10.262C22.110,9.850,22.875,9.323,23.397,8.590C23.920,7.856,24.162,6.878,23.882,6.017C22.378,5.939,20.644,6.119,19.318,6.840C17.469,7.831,16.347,7.483,16.016,8.963L15.990,8.963C15.659,7.470,14.549,7.831,12.688,6.840C11.362,6.119,9.628,5.939,8.124,6.017C7.830,6.878,8.085,7.843,8.608,8.590C9.169,9.336,9.947,9.863,10.737,10.262ZZ" style="fill: rgb(253, 253, 255); fill-opacity: 1;"/></g></g></g></g></g></svg> diff --git a/front/tauri/icons/128x128.png b/front/tauri/icons/128x128.png new file mode 100644 index 000000000..94f2f2de5 Binary files /dev/null and b/front/tauri/icons/128x128.png differ diff --git a/front/tauri/icons/128x128@2x.png b/front/tauri/icons/128x128@2x.png new file mode 100644 index 000000000..5822abd8e Binary files /dev/null and b/front/tauri/icons/128x128@2x.png differ diff --git a/front/tauri/icons/32x32.png b/front/tauri/icons/32x32.png new file mode 100644 index 000000000..41fca738c Binary files /dev/null and b/front/tauri/icons/32x32.png differ diff --git a/front/tauri/icons/Square107x107Logo.png b/front/tauri/icons/Square107x107Logo.png new file mode 100644 index 000000000..22f4df685 Binary files /dev/null and b/front/tauri/icons/Square107x107Logo.png differ diff --git a/front/tauri/icons/Square142x142Logo.png b/front/tauri/icons/Square142x142Logo.png new file mode 100644 index 000000000..bb84dd286 Binary files /dev/null and b/front/tauri/icons/Square142x142Logo.png differ diff --git a/front/tauri/icons/Square150x150Logo.png b/front/tauri/icons/Square150x150Logo.png new file mode 100644 index 000000000..af5508ab0 Binary files /dev/null and b/front/tauri/icons/Square150x150Logo.png differ diff --git a/front/tauri/icons/Square284x284Logo.png b/front/tauri/icons/Square284x284Logo.png new file mode 100644 index 000000000..ffcb63842 Binary files /dev/null and b/front/tauri/icons/Square284x284Logo.png differ diff --git a/front/tauri/icons/Square30x30Logo.png b/front/tauri/icons/Square30x30Logo.png new file mode 100644 index 000000000..005d5338f Binary files /dev/null and b/front/tauri/icons/Square30x30Logo.png differ diff --git a/front/tauri/icons/Square310x310Logo.png b/front/tauri/icons/Square310x310Logo.png new file mode 100644 index 000000000..d268c942d Binary files /dev/null and b/front/tauri/icons/Square310x310Logo.png differ diff --git a/front/tauri/icons/Square44x44Logo.png b/front/tauri/icons/Square44x44Logo.png new file mode 100644 index 000000000..6272096bb Binary files /dev/null and b/front/tauri/icons/Square44x44Logo.png differ diff --git a/front/tauri/icons/Square71x71Logo.png b/front/tauri/icons/Square71x71Logo.png new file mode 100644 index 000000000..7e9cf524e Binary files /dev/null and b/front/tauri/icons/Square71x71Logo.png differ diff --git a/front/tauri/icons/Square89x89Logo.png b/front/tauri/icons/Square89x89Logo.png new file mode 100644 index 000000000..297ca25e7 Binary files /dev/null and b/front/tauri/icons/Square89x89Logo.png differ diff --git a/front/tauri/icons/StoreLogo.png b/front/tauri/icons/StoreLogo.png new file mode 100644 index 000000000..b75d0246f Binary files /dev/null and b/front/tauri/icons/StoreLogo.png differ diff --git a/front/tauri/icons/icon.icns b/front/tauri/icons/icon.icns new file mode 100644 index 000000000..e96f35804 Binary files /dev/null and b/front/tauri/icons/icon.icns differ diff --git a/front/tauri/icons/icon.ico b/front/tauri/icons/icon.ico new file mode 100644 index 000000000..210fed12d Binary files /dev/null and b/front/tauri/icons/icon.ico differ diff --git a/front/tauri/icons/icon.png b/front/tauri/icons/icon.png new file mode 100644 index 000000000..bfcd60336 Binary files /dev/null and b/front/tauri/icons/icon.png differ diff --git a/front/tauri/rust-toolchain.toml b/front/tauri/rust-toolchain.toml new file mode 100644 index 000000000..92ebe6655 --- /dev/null +++ b/front/tauri/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +profile = "minimal" +channel = "1.71.0" +components = ["rust-src", "rust-analyzer", "clippy"] diff --git a/front/tauri/src/lib.rs b/front/tauri/src/lib.rs new file mode 100644 index 000000000..3b48e91a2 --- /dev/null +++ b/front/tauri/src/lib.rs @@ -0,0 +1,6 @@ +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/front/tauri/src/main.rs b/front/tauri/src/main.rs new file mode 100644 index 000000000..e32a8da75 --- /dev/null +++ b/front/tauri/src/main.rs @@ -0,0 +1,12 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +use color_eyre::Result; + +fn main() -> Result<()> { + color_eyre::install()?; + + funkwhale_lib::run(); + + Ok(()) +} diff --git a/front/tauri/tauri.conf.json b/front/tauri/tauri.conf.json new file mode 100644 index 000000000..a999007af --- /dev/null +++ b/front/tauri/tauri.conf.json @@ -0,0 +1,65 @@ +{ + "identifier": "audio.funkwhale.desktop", + "productName": "Funkwhale", + "version": "0.1.0", + + "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "app": { + "security": { + "csp": null + }, + "windows": [ + { + "label": "main", + "fullscreen": false, + "height": 600, + "width": 800, + "resizable": true, + "title": "Funkwhale" + } + ] + }, + "build": { + "beforeBuildCommand": "yarn build", + "beforeDevCommand": "yarn dev", + "devUrl": "http://localhost:8080", + "frontendDist": "../dist" + }, + "bundle": { + "active": true, + "category": "Music", + "copyright": "", + "externalBin": [], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "linux": { + "deb": { + "depends": [] + }, + "appimage": { + "bundleMediaFramework": true + } + }, + "longDescription": "", + "macOS": { + "entitlements": null, + "exceptionDomain": "", + "frameworks": [], + "providerShortName": null, + "signingIdentity": null + }, + "resources": [], + "shortDescription": "", + "targets": "all", + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + } +} diff --git a/front/test/msw-server.ts b/front/test/msw-server.ts new file mode 100644 index 000000000..f2bc1b08d --- /dev/null +++ b/front/test/msw-server.ts @@ -0,0 +1,11749 @@ +/** + * This file is AUTO GENERATED by [msw-auto-mock](https://github.com/zoubingwu/msw-auto-mock) + * Feel free to commit/edit it as you need. + */ +/* eslint-disable */ +/* tslint:disable */ +import { HttpResponse, http } from "msw"; +import { faker } from "@faker-js/faker"; +import { setupServer } from "msw/node"; + +faker.seed(1); + +const baseURL = ""; +const MAX_ARRAY_LENGTH = 20; + +let i = 0; +const next = () => { + if (i === Number.MAX_SAFE_INTEGER - 1) { + i = 0; + } + return i++; +}; + +export const handlers = [ + http.get(`${baseURL}/api/v1/activity/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/`, () => { + const resultArray = [[getGetAlbums200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/`, () => { + const resultArray = [[getCreateAlbum201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/`, () => { + const resultArray = [[getGetAlbum200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/albums/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/fetches/`, () => { + const resultArray = [[getGetAlbumFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/:id/fetches/`, () => { + const resultArray = [[getCreateAlbumFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/libraries/`, () => { + const resultArray = [[getGetAlbumLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/albums/:id/mutations/`, () => { + const resultArray = [[getGetAlbumMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/albums/:id/mutations/`, () => { + const resultArray = [ + [getCreateAlbumMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/`, () => { + const resultArray = [[getGetArtists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/`, () => { + const resultArray = [[getGetArtist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/fetches/`, () => { + const resultArray = [[getGetArtistFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/artists/:id/fetches/`, () => { + const resultArray = [[getCreateArtistFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/libraries/`, () => { + const resultArray = [[getGetArtistLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/artists/:id/mutations/`, () => { + const resultArray = [[getGetArtistMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/artists/:id/mutations/`, () => { + const resultArray = [ + [getCreateArtistMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/attachments/`, () => { + const resultArray = [[getCreateAttachment201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/attachments/:uuid/`, () => { + const resultArray = [[getGetAttachment200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/attachments/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/attachments/:uuid/proxy/`, () => { + const resultArray = [[getGetAttachmentProxy200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/change/`, () => { + const resultArray = [[getChangePassword200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/reset/`, () => { + const resultArray = [[getResetPassword200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/password/reset/confirm/`, () => { + const resultArray = [ + [getConfirmPasswordReset200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/`, () => { + const resultArray = [[getRegister201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/change-password/`, () => { + const resultArray = [[getChangePassword2200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/auth/registration/verify-email/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [[getGetAuthUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [[getUpdateAuthUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/auth/user/`, () => { + const resultArray = [ + [getPartialUpdateAuthUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/`, () => { + const resultArray = [[getGetChannels200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/`, () => { + const resultArray = [[getCreateChannel201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[getGetChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[getUpdateChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [ + [getPartialUpdateChannel200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/channels/:composite/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/:composite/rss/`, () => { + const resultArray = [[getGetChannelRss200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/:composite/subscribe/`, () => { + const resultArray = [[getSubscribeChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/:composite/unsubscribe/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/channels/:composite/unsubscribe/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/channels/metadata-choices/`, () => { + const resultArray = [ + [getGetChannelMetadataChoices200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/channels/rss-subscribe/`, () => { + const resultArray = [ + [getSubscribeChannelRss200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/favorites/tracks/`, () => { + const resultArray = [[getGetFavoriteTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/favorites/tracks/`, () => { + const resultArray = [[getFavoriteTrack201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/favorites/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/favorites/tracks/all/`, () => { + const resultArray = [ + [getGetAllFavoriteTracks200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/favorites/tracks/remove/`, () => { + const resultArray = [[getUnfavoriteTrack2200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/favorites/tracks/remove/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/actors/:fullUsername/`, () => { + const resultArray = [[getGetFederationActor200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get( + `${baseURL}/api/v1/federation/actors/:fullUsername/libraries/`, + () => { + const resultArray = [ + [getGetFederationActorLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/federation/domains/`, () => { + const resultArray = [ + [getGetFederationDomains200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/domains/:name/`, () => { + const resultArray = [ + [getGetFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/fetches/`, () => { + const resultArray = [ + [getCreateFederationFetch201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/fetches/:id/`, () => { + const resultArray = [[getGetFederationFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/follows/library/`, () => { + const resultArray = [ + [getGetFederationLibraryFollows200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/follows/library/`, () => { + const resultArray = [ + [getCreateFederationLibraryFollow201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/follows/library/:uuid/`, () => { + const resultArray = [ + [getGetFederationLibraryFollow200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/federation/follows/library/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post( + `${baseURL}/api/v1/federation/follows/library/:uuid/accept/`, + () => { + const resultArray = [ + [null, { status: 204 }], + [null, { status: 404 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.post( + `${baseURL}/api/v1/federation/follows/library/:uuid/reject/`, + () => { + const resultArray = [ + [getRejectFederationLibraryFollow200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/federation/follows/library/all/`, () => { + const resultArray = [ + [getGetAllFederationLibraryFollows200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/inbox/`, () => { + const resultArray = [ + [getGetFederationInboxes200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [[getGetFederationInbox200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [ + [getUpdateFederationInbox200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/federation/inbox/:id/`, () => { + const resultArray = [ + [getPartialUpdateFederationInbox200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/inbox/action/`, () => { + const resultArray = [ + [getCreateFederationInboxAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/federation/libraries/:uuid/`, () => { + const resultArray = [ + [getGetFederationLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/libraries/:uuid/scan/`, () => { + const resultArray = [ + [getCreateFederationLibraryScan200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/federation/libraries/fetch/`, () => { + const resultArray = [ + [getCreateFederationLibraryFetch200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/history/listenings/`, () => { + const resultArray = [ + [getGetHistoryListenings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/history/listenings/`, () => { + const resultArray = [ + [getCreateHistoryListening201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/history/listenings/:id/`, () => { + const resultArray = [ + [getGetHistoryListening200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/admin/settings/`, () => { + const resultArray = [ + [getGetInstanceAdminSettings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getGetInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getUpdateInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/instance/admin/settings/:id/`, () => { + const resultArray = [ + [getPartialUpdateInstanceAdminSetting200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/instance/admin/settings/bulk/`, () => { + const resultArray = [ + [getCreateInstanceAdminSettingBulk200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/nodeinfo/2.0/`, () => { + const resultArray = [[getGetNodeInfo20200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/settings/`, () => { + const resultArray = [ + [getGetInstanceSettings200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/instance/spa-manifest.json`, () => { + const resultArray = [[getGetSpaManifest200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/`, () => { + const resultArray = [[getGetLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/libraries/`, () => { + const resultArray = [[getCreateLibrary201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[getGetLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[getUpdateLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [ + [getPartialUpdateLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/libraries/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/:uuid/follows/`, () => { + const resultArray = [[getGetLibraryFollows200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/libraries/fs-import/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/licenses/`, () => { + const resultArray = [[getGetLicenses200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/licenses/:code/`, () => { + const resultArray = [[getGetLicense200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/listen/:uuid/`, () => { + const resultArray = [[getGetListen200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/`, () => { + const resultArray = [[getAdminGetAccounts200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/:id/`, () => { + const resultArray = [[getAdminGetAccount200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/accounts/:id/stats/`, () => { + const resultArray = [ + [getAdminGetAccountStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/accounts/action/`, () => { + const resultArray = [ + [getAdminCreateAccountAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/`, () => { + const resultArray = [[getAdminGetChannels200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/:composite/`, () => { + const resultArray = [[getAdminGetChannel200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/channels/:composite/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/channels/:composite/stats/`, () => { + const resultArray = [ + [getAdminGetChannelStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/federation/domains/`, () => { + const resultArray = [ + [getAdminGetFederationDomains200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/federation/domains/`, () => { + const resultArray = [ + [getAdminCreateFederationDomain201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminGetFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminUpdateFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/federation/domains/:name/`, () => { + const resultArray = [ + [getAdminPartialUpdateFederationDomain200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get( + `${baseURL}/api/v1/manage/federation/domains/:name/nodeinfo/`, + () => { + const resultArray = [ + [getAdminGetFederationDomainNodeinfo200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/manage/federation/domains/:name/stats/`, () => { + const resultArray = [ + [getAdminGetFederationDomainStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/federation/domains/action/`, () => { + const resultArray = [ + [getAdminCreateFederationDomainAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/`, () => { + const resultArray = [[getAdminGetAlbums200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/:id/`, () => { + const resultArray = [[getAdminGetAlbum200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/albums/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/albums/:id/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryAlbumStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/albums/action/`, () => { + const resultArray = [ + [getAdminCreateAlbumAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/`, () => { + const resultArray = [[getAdminGetArtists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/:id/`, () => { + const resultArray = [[getAdminGetArtist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/artists/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/artists/:id/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryArtistStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/artists/action/`, () => { + const resultArray = [ + [getAdminCreateArtistAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/`, () => { + const resultArray = [[getAdminGetLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[getAdminGetLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[getAdminUpdateLibrary200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [ + [getAdminPartialUpdateLibrary200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/libraries/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/libraries/:uuid/stats/`, () => { + const resultArray = [ + [getAdminGetLibraryStats200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/libraries/action/`, () => { + const resultArray = [ + [getAdminCreateLibraryAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/`, () => { + const resultArray = [[getAdminGetTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/:id/`, () => { + const resultArray = [[getAdminGetTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/tracks/:id/stats/`, () => { + const resultArray = [[getAdminGetTrackStats200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/tracks/action/`, () => { + const resultArray = [ + [getAdminCreateTrackAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/uploads/`, () => { + const resultArray = [[getAdminGetUploads200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/library/uploads/:uuid/`, () => { + const resultArray = [[getAdminGetUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/library/uploads/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/library/uploads/action/`, () => { + const resultArray = [ + [getAdminCreateUploadAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/instance-policies/`, () => { + const resultArray = [ + [getModerationGetInstancePolicies200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/moderation/instance-policies/`, () => { + const resultArray = [ + [getModerationCreateInstancePolicy201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, () => { + const resultArray = [ + [getModerationGetInstancePolicy200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, () => { + const resultArray = [ + [getModerationUpdateInstancePolicy200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch( + `${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, + () => { + const resultArray = [ + [ + getModerationPartialUpdateInstancePolicy200Response(), + { status: 200 }, + ], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.delete( + `${baseURL}/api/v1/manage/moderation/instance-policies/:id/`, + () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }, + ), + http.get(`${baseURL}/api/v1/manage/moderation/notes/`, () => { + const resultArray = [[getModerationGetNotes200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/moderation/notes/`, () => { + const resultArray = [ + [getModerationCreateNote201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/notes/:uuid/`, () => { + const resultArray = [[getModerationGetNote200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/moderation/notes/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/reports/`, () => { + const resultArray = [ + [getModerationGetReports200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationGetReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationUpdateReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/moderation/reports/:uuid/`, () => { + const resultArray = [ + [getModerationPartialUpdateReport200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/requests/`, () => { + const resultArray = [ + [getModerationGetRequests200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationGetRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationUpdateRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/moderation/requests/:uuid/`, () => { + const resultArray = [ + [getModerationPartialUpdateRequest200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/tags/`, () => { + const resultArray = [[getAdminGetTags200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/tags/`, () => { + const resultArray = [[getAdminCreateTag201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/tags/:name/`, () => { + const resultArray = [[getAdminGetTag200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/manage/tags/:name/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/tags/action/`, () => { + const resultArray = [ + [getAdminCreateTagAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/invitations/`, () => { + const resultArray = [ + [getAdminGetInvitations200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/users/invitations/`, () => { + const resultArray = [ + [getAdminCreateInvitation201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [[getAdminGetInvitation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [ + [getAdminUpdateInvitation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/users/invitations/:id/`, () => { + const resultArray = [ + [getAdminPartialUpdateInvitation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/manage/users/invitations/action/`, () => { + const resultArray = [ + [getAdminCreateInvitationAction200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/users/`, () => { + const resultArray = [[getAdminGetUsers200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [[getAdminGetUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [[getAdminUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/manage/users/users/:id/`, () => { + const resultArray = [ + [getAdminPartialUpdateUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/moderation/content-filters/`, () => { + const resultArray = [ + [getGetModerationContentFilters200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/moderation/content-filters/`, () => { + const resultArray = [ + [getCreateModerationContentFilter201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/moderation/content-filters/:uuid/`, () => { + const resultArray = [ + [getGetModerationContentFilter200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/moderation/content-filters/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/moderation/reports/`, () => { + const resultArray = [ + [getCreateModerationReport201Response(), { status: 201 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/mutations/`, () => { + const resultArray = [[getGetMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/mutations/:uuid/`, () => { + const resultArray = [[getGetMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/mutations/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/mutations/:uuid/approve/`, () => { + const resultArray = [[getApproveMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/mutations/:uuid/reject/`, () => { + const resultArray = [[getRejectMutation200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/apps/`, () => { + const resultArray = [[getGetOauthApps200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/oauth/apps/`, () => { + const resultArray = [[getCreateOauthApp201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[getGetOauthApp200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[getUpdateOauthApp200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [ + [getPartialUpdateOauthApp200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/oauth/apps/:clientId/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/oauth/apps/:clientId/refresh-token/`, () => { + const resultArray = [[getRefreshOauthToken200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/grants/`, () => { + const resultArray = [[getGetOauthGrants200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oauth/grants/:clientId/`, () => { + const resultArray = [[getGetOauthGrant200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/oauth/grants/:clientId/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/oembed/`, () => { + const resultArray = [[getGetOembed200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/`, () => { + const resultArray = [[getGetPlaylists200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/`, () => { + const resultArray = [[getCreatePlaylist201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[getGetPlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[getUpdatePlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [ + [getPartialUpdatePlaylist200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/add/`, () => { + const resultArray = [[getAddToPlaylist200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/clear/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/move/`, () => { + const resultArray = [ + [getReorderTrackInPlaylist200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/playlists/:id/remove/`, () => { + const resultArray = [ + [getRemoveFromPlaylist2200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/playlists/:id/remove/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/playlists/:id/tracks/`, () => { + const resultArray = [[getGetPlaylistTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/plugins/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/`, () => { + const resultArray = [[null, { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/plugins/:id/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/disable/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/enable/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/plugins/:id/scan/`, () => { + const resultArray = [[null, { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/`, () => { + const resultArray = [[getGetRadios200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/radios/`, () => { + const resultArray = [[getCreateRadio201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getGetRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getUpdateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[getPartialUpdateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/radios/radios/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/:id/tracks/`, () => { + const resultArray = [[getGetRadioTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/radios/filters/`, () => { + const resultArray = [[getGetRadioFilter200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/radios/validate/`, () => { + const resultArray = [[getValidateRadio200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/sessions/`, () => { + const resultArray = [[getCreateRadioSession201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/radios/sessions/:id/`, () => { + const resultArray = [[getGetRadioSession200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/radios/tracks/`, () => { + const resultArray = [[getGetNextRadioTrack201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/rate-limit/`, () => { + const resultArray = [[getGetRateLimit200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/search`, () => { + const resultArray = [[getGetSearchResults200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/stream/:uuid/`, () => { + const resultArray = [[getGetTrackStream200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/`, () => { + const resultArray = [[getGetSubscriptions200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/:uuid/`, () => { + const resultArray = [[getGetSubscription200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/subscriptions/all/`, () => { + const resultArray = [ + [getGetAllSubscriptions200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tags/`, () => { + const resultArray = [[getGetTags200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tags/:name/`, () => { + const resultArray = [[getGetTag200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/text-preview/`, () => { + const resultArray = [ + [getPreviewText200Response(), { status: 200 }], + [getPreviewText400Response(), { status: 400 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/`, () => { + const resultArray = [[getGetTracks200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/`, () => { + const resultArray = [[getGetTrack200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/tracks/:id/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/fetches/`, () => { + const resultArray = [[getGetTrackFetches200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/tracks/:id/fetches/`, () => { + const resultArray = [[getCreateTrackFetch200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/libraries/`, () => { + const resultArray = [[getGetTrackLibraries200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/tracks/:id/mutations/`, () => { + const resultArray = [[getGetTrackMutations200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/tracks/:id/mutations/`, () => { + const resultArray = [ + [getCreateTrackMutation200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/`, () => { + const resultArray = [[getGetUploads200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/uploads/`, () => { + const resultArray = [[getCreateUpload201Response(), { status: 201 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[getGetUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[getUpdateUpload200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [ + [getPartialUpdateUpload200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/uploads/:uuid/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/uploads/:uuid/audio-file-metadata/`, () => { + const resultArray = [[getGetUploadMetadata200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/uploads/action/`, () => { + const resultArray = [[getCreateUploadAction200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.put(`${baseURL}/api/v1/users/:username/`, () => { + const resultArray = [[getUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.patch(`${baseURL}/api/v1/users/:username/`, () => { + const resultArray = [[getPartialUpdateUser200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [ + [getGetUserSubsonicToken200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [ + [getCreateUserSubsonicToken200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/users/:username/subsonic-token/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/change-email/`, () => { + const resultArray = [ + [null, { status: 200 }], + [null, { status: 403 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.get(`${baseURL}/api/v1/users/me/`, () => { + const resultArray = [ + [getGetAuthenticatedUser200Response(), { status: 200 }], + ]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.delete(`${baseURL}/api/v1/users/me/`, () => { + const resultArray = [[null, { status: 204 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), + http.post(`${baseURL}/api/v1/users/settings/`, () => { + const resultArray = [[getUpdateSettings200Response(), { status: 200 }]]; + + return HttpResponse.json(...resultArray[next() % resultArray.length]); + }), +]; + +export function getGetAlbums200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getCreateAlbum201Response() { + return { + title: faker.lorem.slug(1), + release_date: faker.date.past(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + artist: faker.lorem.slug(1), + }; +} + +export function getGetAlbum200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetAlbumFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateAlbumFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetAlbumLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetAlbumMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateAlbumMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetArtists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + albums: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + }; +} + +export function getGetArtist200Response() { + return { + albums: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getGetArtistFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateArtistFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetArtistLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetArtistMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateArtistMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getCreateAttachment201Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetAttachment200Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetAttachmentProxy200Response() { + return { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getChangePassword200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + }; +} + +export function getResetPassword200Response() { + return { + email: faker.internet.email(), + }; +} + +export function getConfirmPasswordReset200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + uid: faker.lorem.slug(1), + token: faker.lorem.slug(1), + }; +} + +export function getRegister201Response() { + return { + username: faker.person.fullName(), + email: faker.internet.email(), + invitation: faker.lorem.slug(1), + }; +} + +export function getChangePassword2200Response() { + return { + new_password1: faker.lorem.slug(1), + new_password2: faker.lorem.slug(1), + }; +} + +export function getGetAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getUpdateAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getPartialUpdateAuthUser200Response() { + return { + pk: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + first_name: faker.person.fullName(), + last_name: faker.person.fullName(), + }; +} + +export function getGetChannels200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getCreateChannel201Response() { + return { + name: faker.person.fullName(), + username: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetChannel200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getUpdateChannel200Response() { + return { + name: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getPartialUpdateChannel200Response() { + return { + name: faker.person.fullName(), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetChannelRss200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getSubscribeChannel200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetChannelMetadataChoices200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getSubscribeChannelRss200Response() { + return { + uuid: faker.datatype.uuid(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.lorem.slug(1), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.lorem.slug(1), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + rss_url: faker.internet.url(), + url: faker.internet.url(), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetFavoriteTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getFavoriteTrack201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetAllFavoriteTracks200Response() { + return { + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + })), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getUnfavoriteTrack2200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetFederationActor200Response() { + return { + fid: faker.internet.url(), + url: faker.internet.url(), + domain: faker.lorem.slug(1), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + name: faker.person.fullName(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + type: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + is_channel: faker.datatype.boolean(), + manually_approves_followers: faker.datatype.boolean(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + icon: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getGetFederationActorLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetFederationDomains200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + })), + }; +} + +export function getGetFederationDomain200Response() { + return { + name: faker.person.fullName(), + }; +} + +export function getCreateFederationFetch201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetFederationFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetFederationLibraryFollows200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + })), + }; +} + +export function getCreateFederationLibraryFollow201Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetFederationLibraryFollow200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getRejectFederationLibraryFollow200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetAllFederationLibraryFollows200Response() { + return { + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + }; +} + +export function getGetFederationInboxes200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + })), + }; +} + +export function getGetFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getUpdateFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getPartialUpdateFederationInbox200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getCreateFederationInboxAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + type: faker.helpers.arrayElement(["to", "cc"]), + activity: { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + related_object: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + type: faker.lorem.slug(1), + }, + is_read: faker.datatype.boolean(), + }; +} + +export function getGetFederationLibrary200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getCreateFederationLibraryScan200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getCreateFederationLibraryFetch200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + }; +} + +export function getGetHistoryListenings200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreateHistoryListening201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + user: faker.number.int({ min: undefined, max: undefined }), + track: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + }; +} + +export function getGetHistoryListening200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetInstanceAdminSettings200Response() { + return [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + })); +} + +export function getGetInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getUpdateInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateInstanceAdminSetting200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getCreateInstanceAdminSettingBulk200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getGetNodeInfo20200Response() { + return { + version: faker.lorem.slug(1), + software: { + name: faker.person.fullName(), + version: faker.lorem.slug(1), + }, + protocols: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => null), + services: { + inbound: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + outbound: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + openRegistrations: faker.datatype.boolean(), + usage: { + users: { + total: faker.number.int({ min: undefined, max: undefined }), + activeHalfyear: faker.number.int({ min: undefined, max: undefined }), + activeMonth: faker.number.int({ min: undefined, max: undefined }), + }, + localPosts: faker.number.int({ min: undefined, max: undefined }), + localComments: faker.number.int({ min: undefined, max: undefined }), + }, + metadata: { + actorId: faker.lorem.slug(1), + private: faker.datatype.boolean(), + shortDescription: faker.lorem.slug(1), + longDescription: faker.lorem.slug(1), + contactEmail: faker.internet.email(), + nodeName: faker.person.fullName(), + banner: faker.lorem.slug(1), + defaultUploadQuota: faker.number.int({ min: undefined, max: undefined }), + supportedUploadExtensions: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + allowList: { + enabled: faker.datatype.boolean(), + domains: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + }, + funkwhaleSupportMessageEnabled: faker.datatype.boolean(), + instanceSupportMessage: faker.lorem.slug(1), + usage: { + favorites: { + tracks: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + }, + listenings: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + downloads: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + }, + library: { + federationEnabled: faker.datatype.boolean(), + anonymousCanListen: faker.datatype.boolean(), + tracks: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + artists: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + albums: { + total: faker.number.int({ min: undefined, max: undefined }), + }, + music: { + hours: faker.number.int({ min: undefined, max: undefined }), + }, + }, + reportTypes: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + type: faker.lorem.slug(1), + label: faker.lorem.slug(1), + anonymous: faker.datatype.boolean(), + })), + endpoints: { + knownNodes: faker.internet.url(), + channels: faker.internet.url(), + libraries: faker.internet.url(), + }, + rules: faker.lorem.slug(1), + terms: faker.lorem.slug(1), + }, + }; +} + +export function getGetInstanceSettings200Response() { + return { + section: faker.lorem.slug(1), + name: faker.person.fullName(), + identifier: faker.lorem.slug(1), + default: faker.lorem.slug(1), + value: faker.lorem.slug(1), + verbose_name: faker.person.fullName(), + help_text: faker.lorem.slug(1), + additional_data: faker.lorem.slug(1), + field: faker.lorem.slug(1), + }; +} + +export function getGetSpaManifest200Response() { + return null; +} + +export function getGetLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreateLibrary201Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getUpdateLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getPartialUpdateLibrary200Response() { + return { + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetLibraryFollows200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + creation_date: faker.date.past(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + uuid: faker.datatype.uuid(), + target: faker.lorem.slug(1), + approved: faker.datatype.boolean(), + })), + }; +} + +export function getGetLicenses200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.lorem.slug(1), + url: faker.internet.url(), + code: faker.lorem.slug(1), + name: faker.person.fullName(), + redistribute: faker.datatype.boolean(), + derivative: faker.datatype.boolean(), + commercial: faker.datatype.boolean(), + attribution: faker.datatype.boolean(), + copyleft: faker.datatype.boolean(), + })), + }; +} + +export function getGetLicense200Response() { + return { + id: faker.lorem.slug(1), + url: faker.internet.url(), + code: faker.lorem.slug(1), + name: faker.person.fullName(), + redistribute: faker.datatype.boolean(), + derivative: faker.datatype.boolean(), + commercial: faker.datatype.boolean(), + attribution: faker.datatype.boolean(), + copyleft: faker.datatype.boolean(), + }; +} + +export function getGetListen200Response() { + return null; +} + +export function getAdminGetAccounts200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getAdminGetAccount200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetAccountStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminCreateAccountAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }, + instance_policy: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetChannels200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getAdminGetChannel200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getAdminGetChannelStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + rss_url: faker.internet.url(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getAdminGetFederationDomains200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + })), + }; +} + +export function getAdminCreateFederationDomain201Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomain200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminUpdateFederationDomain200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminPartialUpdateFederationDomain200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomainNodeinfo200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetFederationDomainStats200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminCreateFederationDomainAction200Response() { + return { + name: faker.internet.url(), + creation_date: faker.date.past(), + actors_count: faker.number.int({ min: undefined, max: undefined }), + outbox_activities_count: faker.number.int({ + min: undefined, + max: undefined, + }), + nodeinfo: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + nodeinfo_fetch_date: faker.date.past(), + instance_policy: faker.number.int({ min: undefined, max: undefined }), + allowed: faker.datatype.boolean(), + }; +} + +export function getAdminGetAlbums200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + })), + }; +} + +export function getAdminGetAlbum200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminGetLibraryAlbumStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminCreateAlbumAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + }; +} + +export function getAdminGetArtists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + })), + }; +} + +export function getAdminGetArtist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminGetLibraryArtistStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminCreateArtistAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.lorem.slug(1), + content_category: faker.helpers.arrayElement(["music", "podcast", "other"]), + }; +} + +export function getAdminGetLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getAdminGetLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminUpdateLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminPartialUpdateLibrary200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminGetLibraryStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminCreateLibraryAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + followers_count: faker.number.int({ min: undefined, max: undefined }), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAdminGetTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + }; +} + +export function getAdminGetTrack200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminGetTrackStats200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminCreateTrackAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + }, + }, + attributed_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + uploads_count: faker.number.int({ min: undefined, max: undefined }), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }; +} + +export function getAdminGetUploads200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "instance", + "everyone", + ]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + })), + }; +} + +export function getAdminGetUpload200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + }; +} + +export function getAdminCreateUploadAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + audio_file: faker.internet.url(), + listen_url: faker.internet.url(), + source: faker.lorem.slug(1), + filename: faker.person.fullName(), + mimetype: faker.lorem.slug(1), + duration: faker.number.int({ min: -2147483648, max: 2147483647 }), + bitrate: faker.number.int({ min: -2147483648, max: 2147483647 }), + size: faker.number.int({ min: -2147483648, max: 2147483647 }), + creation_date: faker.date.past(), + accessed_date: faker.date.past(), + modification_date: faker.date.past(), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_date: faker.date.past(), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + track: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + position: faker.number.int({ min: 0, max: 2147483647 }), + disc_number: faker.number.int({ min: 0, max: 2147483647 }), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + }, + library: { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + url: faker.internet.url(), + name: faker.person.fullName(), + description: faker.lorem.slug(1), + domain: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + followers_url: faker.internet.url(), + actor: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + }, + }; +} + +export function getModerationGetInstancePolicies200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + })), + }; +} + +export function getModerationCreateInstancePolicy201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationGetInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationUpdateInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationPartialUpdateInstancePolicy200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["domain", "actor"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + actor: faker.internet.email(), + summary: faker.lorem.slug(1), + is_active: faker.datatype.boolean(), + block_all: faker.datatype.boolean(), + silence_activity: faker.datatype.boolean(), + silence_notifications: faker.datatype.boolean(), + reject_media: faker.datatype.boolean(), + }; +} + +export function getModerationGetNotes200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getModerationCreateNote201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getModerationGetNote200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getModerationGetReports200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + })), + }; +} + +export function getModerationGetReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationUpdateReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationPartialUpdateReport200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + is_handled: faker.datatype.boolean(), + assigned_to: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + target_owner: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + submitter_email: faker.internet.email(), + notes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + author: { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + fid: faker.internet.url(), + preferred_username: faker.person.fullName(), + full_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + name: faker.person.fullName(), + summary: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + creation_date: faker.date.past(), + last_fetch_date: faker.date.past(), + inbox_url: faker.internet.url(), + outbox_url: faker.internet.url(), + shared_inbox_url: faker.internet.url(), + manually_approves_followers: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getModerationGetRequests200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getModerationGetRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getModerationUpdateRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getModerationPartialUpdateRequest200Response() { + return { + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetTags200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getAdminCreateTag201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetTag200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminCreateTagAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + creation_date: faker.date.past(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + albums_count: faker.number.int({ min: undefined, max: undefined }), + artists_count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getAdminGetInvitations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + })), + }; +} + +export function getAdminCreateInvitation201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminGetInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminUpdateInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminPartialUpdateInvitation200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminCreateInvitationAction200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + owner: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + invited_user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + }, + code: faker.lorem.slug(1), + expiration_date: faker.date.past(), + creation_date: faker.date.past(), + users: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: 0, max: 2147483647 }), + })), + }; +} + +export function getAdminGetUsers200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + })), + }; +} + +export function getAdminGetUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getAdminUpdateUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getAdminPartialUpdateUser200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + actor: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + email: faker.internet.email(), + name: faker.person.fullName(), + is_active: faker.datatype.boolean(), + is_staff: faker.datatype.boolean(), + is_superuser: faker.datatype.boolean(), + date_joined: faker.date.past(), + last_activity: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + upload_quota: faker.number.int({ min: undefined, max: undefined }), + full_username: faker.person.fullName(), + }; +} + +export function getGetModerationContentFilters200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + })), + }; +} + +export function getCreateModerationContentFilter201Response() { + return { + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + }; +} + +export function getGetModerationContentFilter200Response() { + return { + uuid: faker.datatype.uuid(), + target: { + type: faker.helpers.arrayElement(["artist"]), + id: faker.lorem.slug(1), + }, + creation_date: faker.date.past(), + }; +} + +export function getCreateModerationReport201Response() { + return { + uuid: faker.datatype.uuid(), + summary: faker.lorem.slug(1), + creation_date: faker.date.past(), + handled_date: faker.date.past(), + is_handled: faker.datatype.boolean(), + submitter_email: faker.internet.email(), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + type: faker.helpers.arrayElement([ + "takedown_request", + "invalid_metadata", + "illegal_content", + "offensive_content", + "other", + ]), + }; +} + +export function getGetMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getGetMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getApproveMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getRejectMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetOauthApps200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + })), + }; +} + +export function getCreateOauthApp201Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + client_secret: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + redirect_uris: faker.lorem.slug(1), + }; +} + +export function getGetOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getUpdateOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getPartialUpdateOauthApp200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getRefreshOauthToken200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + client_secret: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + redirect_uris: faker.lorem.slug(1), + }; +} + +export function getGetOauthGrants200Response() { + return [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + })); +} + +export function getGetOauthGrant200Response() { + return { + client_id: faker.lorem.slug(1), + name: faker.person.fullName(), + scopes: faker.lorem.slug(1), + created: faker.date.past(), + updated: faker.date.past(), + }; +} + +export function getGetOembed200Response() { + return { + format: faker.helpers.arrayElement(["json"]), + url: faker.internet.url(), + maxheight: faker.number.int({ min: undefined, max: undefined }), + maxwidth: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetPlaylists200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + })), + }; +} + +export function getCreatePlaylist201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getUpdatePlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getPartialUpdatePlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getAddToPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getReorderTrackInPlaylist200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getRemoveFromPlaylist2200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + name: faker.person.fullName(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + modification_date: faker.date.past(), + creation_date: faker.date.past(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + album_covers: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + duration: faker.number.int({ min: undefined, max: undefined }), + is_playable: faker.datatype.boolean(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + }; +} + +export function getGetPlaylistTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + track: faker.lorem.slug(1), + index: faker.number.int({ min: 0, max: 2147483647 }), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetRadios200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + })), + }; +} + +export function getCreateRadio201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getGetRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getUpdateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getGetRadioTrack200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }; +} + +export function getGetRadioFilter200Response() { + return { + type: faker.lorem.slug(1), + label: faker.lorem.slug(1), + help_text: faker.lorem.slug(1), + fields: faker.lorem.slug(1), + }; +} + +export function getValidateRadio200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + is_public: faker.datatype.boolean(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + user: { + id: faker.number.int({ min: undefined, max: undefined }), + username: faker.person.fullName(), + name: faker.person.fullName(), + date_joined: faker.date.past(), + avatar: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + }, + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + description: faker.lorem.slug(1), + }; +} + +export function getCreateRadioSession201Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + radio_type: faker.lorem.slug(1), + related_object_id: faker.lorem.slug(1), + user: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + custom_radio: faker.number.int({ min: undefined, max: undefined }), + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetRadioSession200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + radio_type: faker.lorem.slug(1), + related_object_id: faker.lorem.slug(1), + user: faker.number.int({ min: undefined, max: undefined }), + creation_date: faker.date.past(), + custom_radio: faker.number.int({ min: undefined, max: undefined }), + config: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetNextRadioTrack201Response() { + return { + session: faker.number.int({ min: undefined, max: undefined }), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetRateLimit200Response() { + return { + enabled: faker.datatype.boolean(), + ident: { + type: faker.lorem.slug(1), + id: faker.lorem.slug(1), + }, + scopes: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.lorem.slug(1), + rate: faker.lorem.slug(1), + description: faker.lorem.slug(1), + limit: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + remaining: faker.number.int({ min: undefined, max: undefined }), + available: faker.number.int({ min: undefined, max: undefined }), + available_seconds: faker.number.int({ min: undefined, max: undefined }), + reset: faker.number.int({ min: undefined, max: undefined }), + reset_seconds: faker.number.int({ min: undefined, max: undefined }), + })), + }; +} + +export function getGetSearchResults200Response() { + return { + artists: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + albums: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + tracks_count: faker.number.int({ min: undefined, max: undefined }), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + is_local: faker.datatype.boolean(), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: faker.number.int({ min: undefined, max: undefined }), + release_date: faker.date.past(), + creation_date: faker.date.past(), + })), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + channel: { + uuid: faker.lorem.slug(1), + actor: { + full_username: faker.person.fullName(), + preferred_username: faker.person.fullName(), + domain: faker.lorem.slug(1), + }, + }, + tracks_count: faker.number.int({ min: undefined, max: undefined }), + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + content_category: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + })), + tracks: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + })), + albums: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + release_date: faker.date.past(), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + duration: faker.number.int({ min: undefined, max: undefined }), + })), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetTrackStream200Response() { + return null; +} + +export function getGetSubscriptions200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + approved: faker.datatype.boolean(), + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetSubscription200Response() { + return { + approved: faker.datatype.boolean(), + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + creation_date: faker.date.past(), + }; +} + +export function getGetAllSubscriptions200Response() { + return { + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + channel: faker.datatype.uuid(), + })), + count: faker.number.int({ min: undefined, max: undefined }), + }; +} + +export function getGetTags200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + name: faker.person.fullName(), + creation_date: faker.date.past(), + })), + }; +} + +export function getGetTag200Response() { + return { + name: faker.person.fullName(), + creation_date: faker.date.past(), + }; +} + +export function getPreviewText200Response() { + return { + rendered: faker.lorem.slug(1), + }; +} + +export function getPreviewText400Response() { + return { + detail: faker.lorem.slug(1), + }; +} + +export function getGetTracks200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + })), + }; +} + +export function getGetTrack200Response() { + return { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }; +} + +export function getGetTrackFetches200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + })), + }; +} + +export function getCreateTrackFetch200Response() { + return { + id: faker.number.int({ min: undefined, max: undefined }), + url: faker.internet.url(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + status: faker.helpers.arrayElement([ + "pending", + "errored", + "finished", + "skipped", + ]), + detail: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + creation_date: faker.date.past(), + fetch_date: faker.date.past(), + }; +} + +export function getGetTrackLibraries200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + actor: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + name: faker.person.fullName(), + description: faker.lorem.slug(1), + creation_date: faker.date.past(), + uploads_count: faker.number.int({ min: undefined, max: undefined }), + privacy_level: faker.helpers.arrayElement(["me", "instance", "everyone"]), + follow: { + creation_date: faker.date.past(), + uuid: faker.datatype.uuid(), + fid: faker.internet.url(), + approved: faker.datatype.boolean(), + modification_date: faker.date.past(), + }, + latest_scan: { + total_files: faker.number.int({ min: 0, max: 2147483647 }), + processed_files: faker.number.int({ min: 0, max: 2147483647 }), + errored_files: faker.number.int({ min: 0, max: 2147483647 }), + status: faker.lorem.slug(1), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + }, + })), + }; +} + +export function getGetTrackMutations200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + })), + }; +} + +export function getCreateTrackMutation200Response() { + return { + fid: faker.internet.url(), + uuid: faker.datatype.uuid(), + type: faker.lorem.slug(1), + creation_date: faker.date.past(), + applied_date: faker.date.past(), + is_approved: faker.datatype.boolean(), + is_applied: faker.datatype.boolean(), + created_by: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + approved_by: faker.number.int({ min: undefined, max: undefined }), + summary: faker.lorem.slug(1), + payload: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + previous_state: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + target: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }; +} + +export function getGetUploads200Response() { + return { + count: 123, + next: "http://api.example.org/accounts/?page=4", + previous: "http://api.example.org/accounts/?page=2", + results: [ + ...new Array(faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH })).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + })), + }; +} + +export function getCreateUpload201Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getGetUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getUpdateUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getPartialUpdateUpload200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getGetUploadMetadata200Response() { + return { + title: faker.lorem.slug(1), + position: faker.lorem.slug(1), + disc_number: faker.lorem.slug(1), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + mbid: faker.datatype.uuid(), + tags: faker.lorem.slug(1), + description: faker.lorem.slug(1), + album: faker.lorem.slug(1), + artists: faker.lorem.slug(1), + cover_data: faker.lorem.slug(1), + }; +} + +export function getCreateUploadAction200Response() { + return { + uuid: faker.datatype.uuid(), + filename: faker.person.fullName(), + creation_date: faker.date.past(), + mimetype: faker.lorem.slug(1), + track: { + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + album: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + artist: { + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + name: faker.person.fullName(), + creation_date: faker.date.past(), + modification_date: faker.date.past(), + is_local: faker.datatype.boolean(), + content_category: faker.helpers.arrayElement([ + "music", + "podcast", + "other", + ]), + description: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + attachment_cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + channel: faker.datatype.uuid(), + }, + release_date: faker.date.past(), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + tracks_count: faker.number.int({ min: undefined, max: undefined }), + }, + uploads: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => ({ + uuid: faker.datatype.uuid(), + listen_url: faker.internet.url(), + size: faker.number.int({ min: undefined, max: undefined }), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + extension: faker.lorem.slug(1), + is_local: faker.datatype.boolean(), + })), + listen_url: faker.internet.url(), + tags: [ + ...new Array( + faker.number.int({ min: 1, max: MAX_ARRAY_LENGTH }), + ).keys(), + ].map((_) => faker.lorem.slug(1)), + attributed_to: { + fid: faker.internet.url(), + url: faker.internet.url(), + creation_date: faker.date.past(), + summary: faker.lorem.slug(1), + preferred_username: faker.person.fullName(), + name: faker.person.fullName(), + last_fetch_date: faker.date.past(), + domain: faker.lorem.slug(1), + type: faker.helpers.arrayElement([ + "Person", + "Tombstone", + "Application", + "Group", + "Organization", + "Service", + ]), + manually_approves_followers: faker.datatype.boolean(), + full_username: faker.person.fullName(), + is_local: faker.datatype.boolean(), + }, + id: faker.number.int({ min: undefined, max: undefined }), + fid: faker.internet.url(), + mbid: faker.datatype.uuid(), + title: faker.lorem.slug(1), + creation_date: faker.date.past(), + is_local: faker.datatype.boolean(), + position: faker.number.int({ min: undefined, max: undefined }), + disc_number: faker.number.int({ min: undefined, max: undefined }), + downloads_count: faker.number.int({ min: undefined, max: undefined }), + copyright: faker.lorem.slug(1), + license: faker.lorem.slug(1), + cover: { + uuid: faker.datatype.uuid(), + size: faker.number.int({ min: undefined, max: undefined }), + mimetype: faker.lorem.slug(1), + creation_date: faker.date.past(), + urls: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + }, + is_playable: faker.datatype.boolean(), + }, + library: faker.lorem.slug(1), + channel: faker.lorem.slug(1), + duration: faker.number.int({ min: undefined, max: undefined }), + bitrate: faker.number.int({ min: undefined, max: undefined }), + size: faker.number.int({ min: undefined, max: undefined }), + import_date: faker.date.past(), + import_status: faker.helpers.arrayElement([ + "draft", + "pending", + "finished", + "errored", + "skipped", + ]), + import_details: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + import_reference: faker.lorem.slug(1), + metadata: [...new Array(5).keys()] + .map((_) => ({ [faker.lorem.word()]: null })) + .reduce((acc, next) => Object.assign(acc, next), {}), + source: faker.lorem.slug(1), + }; +} + +export function getUpdateUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getPartialUpdateUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getGetUserSubsonicToken200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getCreateUserSubsonicToken200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getGetAuthenticatedUser200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +export function getUpdateSettings200Response() { + return { + name: faker.person.fullName(), + privacy_level: faker.helpers.arrayElement([ + "me", + "followers", + "instance", + "everyone", + ]), + instance_support_message_display_date: faker.date.past(), + funkwhale_support_message_display_date: faker.date.past(), + summary: { + text: faker.lorem.slug(1), + content_type: faker.helpers.arrayElement([ + "text/html", + "text/markdown", + "text/plain", + ]), + html: faker.lorem.slug(1), + }, + }; +} + +// This configures a Service Worker with the given request handlers. +export const startWorker = () => { + const server = setupServer(...handlers); + server.listen(); +}; diff --git a/front/test/setup/mock-lru-cache.ts b/front/test/setup/mock-lru-cache.ts new file mode 100644 index 000000000..b267bcd1d --- /dev/null +++ b/front/test/setup/mock-lru-cache.ts @@ -0,0 +1,20 @@ +import { vi } from 'vitest' + +vi.doMock('lru-cache', async (importOriginal) => { + const mod = await importOriginal<typeof import('lru-cache')>() + + class LRUCacheMock<K extends NonNullable<unknown>, V extends NonNullable<unknown>, FC> { + static caches: typeof mod.LRUCache[] = [] + + constructor (...args: ConstructorParameters<typeof mod.LRUCache<K, V, FC>>) { + const cache = new mod.LRUCache<K, V, FC>(...args) + LRUCacheMock.caches.push(cache as any) + return cache + } + } + + return { + ...mod, + LRUCache: LRUCacheMock + } +}) diff --git a/front/test/setup/mock-server.ts b/front/test/setup/mock-server.ts new file mode 100644 index 000000000..5b9806780 --- /dev/null +++ b/front/test/setup/mock-server.ts @@ -0,0 +1,19 @@ +import { handlers } from '../msw-server' +import { setupServer } from 'msw/node' + +import.meta.env.VUE_APP_INSTANCE_URL = 'http://localhost:3000/' + +const server = setupServer( + ...handlers.map((handler) => { + if (typeof handler.info.path === 'string') { + handler.info.path = handler.info.path.replace('/api/v1', '') + } + + handler.info.header = handler.info.header.replace('/api/v1', '') + return handler + }) +) + +beforeAll(() => server.listen()) +afterEach(() => server.resetHandlers()) +afterAll(() => server.close()) diff --git a/front/test/specs/composables/audio/tracks.test.ts b/front/test/specs/composables/audio/tracks.test.ts new file mode 100644 index 000000000..7ae65a06b --- /dev/null +++ b/front/test/specs/composables/audio/tracks.test.ts @@ -0,0 +1,139 @@ +import { LRUCache } from 'lru-cache' +import { currentIndex, useQueue } from '~/composables/audio/queue' +import { useTracks } from '~/composables/audio/tracks' +import { isEqual } from 'lodash-es' +import type { Sound } from '~/api/player' +import type { Track } from '~/types' + +const { enqueue, enqueueAt, clear } = useQueue() + +// @ts-expect-error We've added caches array in the mock file +const cache: LRUCache<number, Sound> = LRUCache.caches[0] + +type CreateTrackFn = { + (): Track + id?: number +} + +const createTrack = <CreateTrackFn>(() => { + createTrack.id = createTrack.id ?? 0 + return { id: createTrack.id++, uploads: [] } as any as Track +}) + +const waitUntilCacheUpdated = async () => { + const keys = [...cache.rkeys()] + return vi.waitUntil(() => !isEqual(keys, [...cache.rkeys()]), { interval: 5 }) +} + +beforeAll(() => { + const { initialize } = useTracks() + initialize() +}) + +describe('cache', () => { + beforeEach(async () => { + createTrack.id = 0 + + await clear() + await enqueue( + createTrack(), + createTrack(), + createTrack(), + createTrack(), + createTrack() + ) + }) + + it('useQueue().clear() clears track cache', async () => { + expect(cache.size).toBe(1) + await clear() + expect(cache.size).toBe(0) + }) + + it('caches next track after 100ms', async () => { + expect(cache.size).toBe(1) + + await waitUntilCacheUpdated() + expect(cache.size).toBe(2) + }) + + it('preserves previous track in cache, when next track is playing', async () => { + expect(cache.size).toBe(1) + + await waitUntilCacheUpdated() + expect(cache.size).toBe(2) + currentIndex.value += 1 + + await waitUntilCacheUpdated() + expect(cache.size).toBe(3) + }) + + it('maxes at 3 cache elements', async () => { + expect(cache.size).toBe(1) + const [[firstCachedId]] = cache.dump() + + await waitUntilCacheUpdated() + expect(cache.size).toBe(2) + currentIndex.value += 1 + + await waitUntilCacheUpdated() + expect(cache.size).toBe(3) + currentIndex.value += 1 + + await waitUntilCacheUpdated() + expect(cache.size).toBe(3) + expect(cache.dump().map(([id]) => id)).not.toContain(firstCachedId) + }) + + it('jumping around behaves correctly', async () => { + currentIndex.value = 2 + // NOTE: waitUntilCacheUpdated() returns when first cache update is found + // That's why we need to call it twice after skipping the track + await waitUntilCacheUpdated() + await waitUntilCacheUpdated() + expect([...cache.rkeys()]).toEqual([0, 2, 3]) + + currentIndex.value = 3 + await waitUntilCacheUpdated() + expect([...cache.rkeys()]).toEqual([2, 3, 4]) + + // We change to the first song + currentIndex.value = 0 + await waitUntilCacheUpdated() + expect([...cache.rkeys()]).toEqual([3, 4, 0]) + + // Now the next song should be enqueued + await waitUntilCacheUpdated() + expect([...cache.rkeys()]).toEqual([4, 0, 1]) + }) + + describe('track enqueueing', () => { + // NOTE: We always want to have tracks 0, 1, 2 in the cache + beforeEach(async () => { + currentIndex.value += 1 + // NOTE: waitUntilCacheUpdated() returns when first cache update is found + // That's why we need to call it twice after skipping the track + await waitUntilCacheUpdated() + await waitUntilCacheUpdated() + expect(cache.size).toBe(3) + }) + + it('enqueueing track as next adds it to the cache', async () => { + enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 + await waitUntilCacheUpdated() + const newIds = [...cache.rkeys()] + expect(newIds).toEqual([2, 1, 5]) + }) + + it('edge case: enqueueing track as next multiple times does not remove dispose current track', async () => { + enqueueAt(currentIndex.value + 1, createTrack()) // id: 5 + await waitUntilCacheUpdated() + enqueueAt(currentIndex.value + 1, createTrack()) // id: 6 + await waitUntilCacheUpdated() + enqueueAt(currentIndex.value + 1, createTrack()) // id: 7 + await waitUntilCacheUpdated() + const newIds = [...cache.rkeys()] + expect(newIds).toEqual([6, 1, 7]) + }) + }) +}) diff --git a/front/test/specs/composables/tauri.spec.ts b/front/test/specs/composables/tauri.spec.ts new file mode 100644 index 000000000..a6accede1 --- /dev/null +++ b/front/test/specs/composables/tauri.spec.ts @@ -0,0 +1,17 @@ +import { vi } from 'vitest' +import { isTauri } from '~/composables/tauri' + +afterEach(() => { + vi.unstubAllEnvs() +}) + +test('Correctly detects Tauri environment', () => { + // Stub the Tauri environment variable + vi.stubEnv('TAURI_ENV_PLATFORM', 'tauri') + + expect(isTauri()).toBe(true) +}) + +test('Correctly detects browser environment', () => { + expect(isTauri()).toBe(false) +}) diff --git a/front/test/specs/store/instance.spec.ts b/front/test/specs/store/instance.spec.ts new file mode 100644 index 000000000..cd1dbae48 --- /dev/null +++ b/front/test/specs/store/instance.spec.ts @@ -0,0 +1,26 @@ +import { vi } from 'vitest' + +// HACK: First we import the global store (and instance store indirectly) so that we don't fall into error pitfall +import _store from '~/store' + +import { findDefaultInstanceUrl, TAURI_DEFAULT_INSTANCE_URL } from '~/store/instance' + +afterEach(() => { + vi.unstubAllEnvs() +}) + +describe('findDefaultInstanceUrl', () => { + test('tauri', () => { + vi.stubEnv('TAURI_ENV_PLATFORM', 'tauri') + expect(findDefaultInstanceUrl()).toBe(TAURI_DEFAULT_INSTANCE_URL) + }) + + test('environment variable', () => { + vi.stubEnv('VUE_APP_INSTANCE_URL', 'https://example.com') + expect(findDefaultInstanceUrl()).toBe('https://example.com/') + }) + + test('location origin', () => { + expect(findDefaultInstanceUrl()).toBe('http://localhost:3000/') + }) +}) diff --git a/front/test/specs/views/admin/library.test.ts b/front/test/specs/views/admin/library.test.ts index 8e8583afa..dca3aaa2f 100644 --- a/front/test/specs/views/admin/library.test.ts +++ b/front/test/specs/views/admin/library.test.ts @@ -3,25 +3,15 @@ import AlbumDetail from '~/views/admin/library/AlbumDetail.vue' import SanitizedHtml from '~/components/SanitizedHtml.vue' import HumanDate from '~/components/common/HumanDate.vue' -import MockAdapter from 'axios-mock-adapter' -import axios from 'axios' - import { shallowMount } from '@vue/test-utils' -import { sleep } from '?/utils' +import { vi } from 'vitest' import router from '~/router' import store from '~/store' -const axiosMock = new MockAdapter(axios) - describe('views/admin/library', () => { describe('Album details', () => { it('displays default cover', async () => { - const album = { cover: null, artist: { id: 1 }, title: 'dummy', id: 1, creation_date: '2020-01-01' } - - axiosMock.onGet('manage/library/albums/1/').reply(200, album) - axiosMock.onGet('manage/library/albums/1/stats/').reply(200, {}) - const wrapper = shallowMount(AlbumDetail, { props: { id: 1 }, directives: { @@ -35,7 +25,7 @@ describe('views/admin/library', () => { } }) - await sleep() + await vi.waitUntil(() => wrapper.find('img').exists()) expect(wrapper.find('img').attributes('src')).to.include('default-cover') }) }) diff --git a/front/test/utils.ts b/front/test/utils.ts deleted file mode 100644 index febf34fdf..000000000 --- a/front/test/utils.ts +++ /dev/null @@ -1 +0,0 @@ -export const sleep = (ms = 0) => new Promise<void>(resolve => setTimeout(resolve, ms)) diff --git a/front/tsconfig.json b/front/tsconfig.json index bd858b045..a1c979687 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -1,11 +1,11 @@ { - "extends": "@vue/tsconfig/tsconfig.web.json", + "extends": "@vue/tsconfig/tsconfig.dom.json", "compilerOptions": { "baseUrl": ".", "sourceMap": true, "noUnusedLocals": true, "experimentalDecorators": true, - "typeRoots": ["node_modules/@types"], + "typeRoots": ["node_modules", "node_modules/@types"], "types": [ "vitest/globals", "vite/client", @@ -19,13 +19,7 @@ "~/*": ["src/*"] } }, - "include": [ - "src/**/*.d.ts", - "src/**/*.ts", - "src/**/*.vue", - "vite.config.ts", - "test/**/*.ts" - ], + "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts", "test/**/*.ts"], "vueCompilerOptions": { "plugins": [ "@vue-macros/volar/define-options", diff --git a/front/vite.config.ts b/front/vite.config.ts index f46eb8807..715ff32c8 100644 --- a/front/vite.config.ts +++ b/front/vite.config.ts @@ -13,13 +13,13 @@ const port = +(process.env.VUE_PORT ?? 8080) // https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ - envPrefix: ['VUE_', 'FUNKWHALE_SENTRY_'], + envPrefix: ['VUE_', 'TAURI_', 'FUNKWHALE_SENTRY_'], plugins: [ // https://vue-macros.sxzz.moe/ VueMacros({ plugins: { // https://github.com/vitejs/vite/tree/main/packages/plugin-vue - vue: Vue(), + vue: Vue() } }), @@ -61,14 +61,14 @@ export default defineConfig(({ mode }) => ({ rollupOptions: { output: { manualChunks: { - 'axios': ['axios', 'axios-auth-refresh'], - 'dompurify': ['dompurify'], - 'jquery': ['jquery'], - 'lodash': ['lodash-es'], - 'moment': ['moment'], - 'sentry': ['@sentry/vue', '@sentry/tracing'], + axios: ['axios', 'axios-auth-refresh'], + dompurify: ['dompurify'], + jquery: ['jquery'], + lodash: ['lodash-es'], + moment: ['moment'], + sentry: ['@sentry/vue', '@sentry/tracing'], 'standardized-audio-context': ['standardized-audio-context'], - 'vue-router': ['vue-router'], + 'vue-router': ['vue-router'] } } } @@ -77,15 +77,17 @@ export default defineConfig(({ mode }) => ({ environment: 'jsdom', globals: true, reporters: ['default', 'junit'], - outputFile: "./test_results.xml", + outputFile: './test_results.xml', coverage: { src: './src', all: true, reporter: ['text', 'cobertura'] }, setupFiles: [ + './test/setup/mock-server.ts', './test/setup/mock-audio-context.ts', - './test/setup/mock-vue-i18n.ts' + './test/setup/mock-vue-i18n.ts', + './test/setup/mock-lru-cache.ts' ] } })) diff --git a/front/yarn.lock b/front/yarn.lock index bcf42c163..7d76dda91 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.2.0": +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== @@ -16,9 +16,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@antfu/utils@^0.7.5": - version "0.7.6" - resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.6.tgz#30a046419b9e1ecd276e53d41ab68fb6c558c04d" - integrity sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w== + version "0.7.7" + resolved "https://registry.yarnpkg.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb" + integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -29,51 +29,83 @@ jsonpointer "^5.0.0" leven "^3.1.0" +"@apidevtools/json-schema-ref-parser@9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c" + integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg== + dependencies: + "@jsdevtools/ono" "^7.1.3" + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + +"@apidevtools/openapi-schemas@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17" + integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== + +"@apidevtools/swagger-methods@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" + integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== + +"@apidevtools/swagger-parser@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6" + integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.6" + "@apidevtools/openapi-schemas" "^2.1.0" + "@apidevtools/swagger-methods" "^3.0.2" + "@jsdevtools/ono" "^7.1.3" + ajv "^8.6.3" + ajv-draft-04 "^1.0.0" + call-me-maybe "^1.0.1" + "@assemblyscript/loader@^0.17.11": version "0.17.14" resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.17.14.tgz#43bfe793c787180c5eb0a57ada8318fb62171b4e" integrity sha512-+PVTOfla/0XMLRTQLJFPg4u40XcdTfon6GGea70hBGi8Pd7ZymIXyVUR+vK8wt5Jb4MVKTKPIz43Myyebw5mZA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== dependencies: - "@babel/highlight" "^7.22.13" + "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.11.1": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" - integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.22.20" - "@babel/helpers" "^7.22.15" - "@babel/parser" "^7.22.16" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.20" - "@babel/types" "^7.22.19" - 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" semver "^6.3.1" -"@babel/generator@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" - integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -85,40 +117,40 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - 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" -"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.23.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" + integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -127,10 +159,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -138,18 +170,18 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -158,24 +190,24 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" - integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" - integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -195,7 +227,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -204,7 +236,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -234,20 +266,20 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== -"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": +"@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" @@ -258,44 +290,52 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" - integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.22.14", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.22.7": - version "7.22.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" - integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== +"@babel/parser@^7.22.10", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -337,17 +377,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -429,211 +469,211 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" - integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" - integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" - integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" - integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" - integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -644,198 +684,199 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" + integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" - integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.11.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" + integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -847,59 +888,58 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.23.4" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" core-js-compat "^3.31.0" semver "^6.3.1" @@ -917,45 +957,45 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.10", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" - integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.23.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.23.9", "@babel/runtime@^7.8.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== 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" -"@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" - integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.22.5" + "@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.22.16" - "@babel/types" "^7.22.19" - debug "^4.1.0" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" - integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== +"@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.17", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" + integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.19" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -963,15 +1003,29 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bundled-es-modules/cookie@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164" + integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== + dependencies: + cookie "^0.5.0" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cypress/request@^2.88.10": - version "2.88.12" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.12.tgz#ba4911431738494a85e93fb04498cb38bc55d590" - integrity sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA== +"@cypress/request@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" + integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -986,7 +1040,7 @@ json-stringify-safe "~5.0.1" mime-types "~2.1.19" performance-now "^2.1.0" - qs "~6.10.3" + qs "6.10.4" safe-buffer "^5.1.2" tough-cookie "^4.1.3" tunnel-agent "^0.6.0" @@ -1000,239 +1054,134 @@ debug "^3.1.0" lodash.once "^4.1.1" -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== - -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" - integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^1.2.0", "@eslint/eslintrc@^1.4.0": +"@eslint/eslintrc@^1.2.0": version "1.4.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== @@ -1247,13 +1196,52 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.11.8": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@exodus/schemasafe@^1.0.0-rc.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.3.0.tgz#731656abe21e8e769a7f70a4d833e6312fe59b7f" + integrity sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw== + +"@faker-js/faker@8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" + integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== + +"@funkwhale/ui@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@funkwhale/ui/-/ui-0.2.2.tgz#09a5f8e6b30d7a898b50f5fdcfce9b09b3071c5b" + integrity sha512-+rmChC/06XVSEwzSN7ldVjtdKJknqk2FUBTBuhN41+BrinRpySjM5PQoUfVN5IiQkL8Nff5sIjt2k8gluHZ85g== + dependencies: + dompurify "^2.4.3 || ^3.0.0" + showdown "^2.1.0" + transliteration "^2.3.5" + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1261,46 +1249,67 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== -"@intlify/bundle-utils@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-4.0.0.tgz#29c1d602c7e4e33b516581496a7c6740ed7e2585" - integrity sha512-klXrYT9VXyKEXsD6UY3pShg0O5MPC07n0TZ5RrSs5ry6T1eZVolIFGJi9c3qcDrh1qjJxgikRnPBmD7qGDqbjw== +"@inquirer/confirm@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.0.0.tgz#6e1e35d18675fe659752d11021f9fddf547950b7" + integrity sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg== dependencies: - "@intlify/message-compiler" next - "@intlify/shared" next - jsonc-eslint-parser "^1.0.1" - source-map "0.6.1" - yaml-eslint-parser "^0.3.2" + "@inquirer/core" "^7.0.0" + "@inquirer/type" "^1.2.0" -"@intlify/core-base@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.19.tgz#f89de10d183f4352500beb9c844632c96c5308b0" - integrity sha512-mlpVZ1w6ZwnP9QZAs+RzGuFMCuYjZPboX3hX7JzhV49vUcsLj0R4667cmcLpPZzXJguIy/zaqbIyoUvLV8HONQ== +"@inquirer/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-7.0.0.tgz#18d2d2bb5cc6858765b4dcf3dce544ad15898e81" + integrity sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA== dependencies: - "@intlify/devtools-if" "9.3.0-beta.19" - "@intlify/message-compiler" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - "@intlify/vue-devtools" "9.3.0-beta.19" + "@inquirer/type" "^1.2.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.11.16" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + figures "^3.2.0" + mute-stream "^1.0.0" + run-async "^3.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" -"@intlify/core-base@^9.1.9": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.4.1.tgz#5ab9b624a34af2299a9b45aa331b6516c169b8b5" - integrity sha512-WIwx+elsZbxSMxRG5+LC+utRohFvmZMoDevfKOfnYMLbpCjCSavqTfHJAtfsY6ruowzqXeKkeLhRHbYbjoJx5g== - dependencies: - "@intlify/message-compiler" "9.4.1" - "@intlify/shared" "9.4.1" +"@inquirer/type@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.0.tgz#a569613628a881c2104289ca868a7def54e5c49d" + integrity sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA== -"@intlify/devtools-if@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0-beta.19.tgz#d50265591089456d923e0edfb575985b4b9c0b90" - integrity sha512-L4NyqMcuQURejKy9XX0m/2kb37f56NAUvbiXKRx96pahSBclY6T+E0TrKXup0Hx6T0qY55QYGRwyVLeHXIHAMA== +"@intlify/bundle-utils@^7.4.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-7.5.0.tgz#fb50947c4e9997228a8abd5775e57a1202f71b09" + integrity sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q== dependencies: - "@intlify/shared" "9.3.0-beta.19" + "@intlify/message-compiler" "^9.4.0" + "@intlify/shared" "^9.4.0" + acorn "^8.8.2" + escodegen "^2.0.0" + estree-walker "^2.0.2" + jsonc-eslint-parser "^2.3.0" + magic-string "^0.30.0" + mlly "^1.2.0" + source-map-js "^1.0.1" + yaml-eslint-parser "^1.2.2" + +"@intlify/core-base@9.9.1", "@intlify/core-base@^9.1.9": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.9.1.tgz#97ff0a98bf416c3f895e2a4fbcb0da353326b71a" + integrity sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA== + dependencies: + "@intlify/message-compiler" "9.9.1" + "@intlify/shared" "9.9.1" "@intlify/eslint-plugin-vue-i18n@2.0.0": version "2.0.0" @@ -1323,63 +1332,49 @@ vue-eslint-parser "^9.0.0" yaml-eslint-parser "^1.0.0" -"@intlify/message-compiler@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.19.tgz#1b66bf87d15843c9354a0d07d26e417f44b65182" - integrity sha512-5RBn5tMOsWh5FqM65IfEJvfpRS8R0lHEUVNDa2rNc9Y7oGEI7swezlbFqU9Kc5FyHy5Kx2jHtdgFIipDwnIYFQ== +"@intlify/message-compiler@9.9.1", "@intlify/message-compiler@^9.1.9", "@intlify/message-compiler@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz#4cd9c5a408be27784928e4cd57a77ea6ddb17e56" + integrity sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA== dependencies: - "@intlify/shared" "9.3.0-beta.19" - source-map "0.6.1" - -"@intlify/message-compiler@9.4.1", "@intlify/message-compiler@^9.1.9", "@intlify/message-compiler@next": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.4.1.tgz#aa00629a455e23cece3464293834a02994b4fb04" - integrity sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw== - dependencies: - "@intlify/shared" "9.4.1" + "@intlify/shared" "9.9.1" source-map-js "^1.0.2" -"@intlify/shared@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.19.tgz#090bdd5d6ed1eabbb92ee2f2ead2668edc576596" - integrity sha512-+lhQggrLvlQ/O5OmIYAc9gadcYXMoaDi0Doef+X/f6TLZFr9PTMjOpBWmpwNNHi026e54jckntUn6GzqDtIN4w== +"@intlify/shared@9.9.1", "@intlify/shared@^9.4.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.9.1.tgz#b602d012b35f6c336b29a8098296dfac96a005f5" + integrity sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA== -"@intlify/shared@9.4.1", "@intlify/shared@next": - version "9.4.1" - resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.4.1.tgz#bd0d221aaac476b6778a10ddcd0472f812c64e27" - integrity sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng== - -"@intlify/unplugin-vue-i18n@0.8.2": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.8.2.tgz#4196cb5bee4243bb3a33af76ce9663f3e106809a" - integrity sha512-cRnzPqSEZQOmTD+p4pwc3RTS9HxreLqfID0keoqZDZweCy/CGRMLLTNd15S4TUf1vSBhPF03DItEFDr1F+8MDA== +"@intlify/unplugin-vue-i18n@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-2.0.0.tgz#5b087e17b4eb4381d0a111cd89df4037880e932f" + integrity sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg== dependencies: - "@intlify/bundle-utils" "^4.0.0" - "@intlify/shared" next - "@rollup/pluginutils" "^4.2.0" - "@vue/compiler-sfc" "^3.2.45" - debug "^4.3.1" - fast-glob "^3.2.5" + "@intlify/bundle-utils" "^7.4.0" + "@intlify/shared" "^9.4.0" + "@rollup/pluginutils" "^5.0.2" + "@vue/compiler-sfc" "^3.2.47" + debug "^4.3.3" + fast-glob "^3.2.12" js-yaml "^4.1.0" - json5 "^2.2.0" + json5 "^2.2.3" pathe "^1.0.0" picocolors "^1.0.0" - source-map "0.6.1" - unplugin "^1.0.0" + source-map-js "^1.0.2" + unplugin "^1.1.0" -"@intlify/vue-devtools@9.3.0-beta.19": - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.19.tgz#e3053ec984d28028a3ce15cffd74ce1af40c37f7" - integrity sha512-7yz8sUbovPUIf8sCX3+sMdw/xEyeHKBCc7Agxcxv54PiQz3zwsVl0hC1X+JXUy46FiPsMEoFfY8O27xOFLupaw== - dependencies: - "@intlify/core-base" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": +"@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1390,9 +1385,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -1407,19 +1402,41 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@mswjs/cookies@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b" + integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw== + +"@mswjs/interceptors@^0.25.16": + version "0.25.16" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.25.16.tgz#7955fbb8da479bc691df117dd4c8d889e507ecc2" + integrity sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.2.1" + strict-event-emitter "^0.5.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1441,10 +1458,28 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.24" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" + integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== "@rollup/plugin-babel@^5.2.0": version "5.3.1" @@ -1475,12 +1510,12 @@ magic-string "^0.25.7" "@rollup/plugin-replace@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz#45f53501b16311feded2485e98419acb8448c61d" - integrity sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA== + version "5.0.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz#33d5653dce6d03cb24ef98bef7f6d25b57faefdf" + integrity sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ== dependencies: "@rollup/pluginutils" "^5.0.1" - magic-string "^0.27.0" + magic-string "^0.30.3" "@rollup/pluginutils@^3.1.0": version "3.1.0" @@ -1491,23 +1526,80 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" - integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" - integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.0.3", "@rollup/pluginutils@^5.0.4", "@rollup/pluginutils@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^2.3.1" +"@rollup/rollup-android-arm-eabi@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" + integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== + +"@rollup/rollup-android-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" + integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== + +"@rollup/rollup-darwin-arm64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" + integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== + +"@rollup/rollup-darwin-x64@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" + integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== + +"@rollup/rollup-linux-arm-gnueabihf@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" + integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== + +"@rollup/rollup-linux-arm64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" + integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== + +"@rollup/rollup-linux-arm64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" + integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== + +"@rollup/rollup-linux-riscv64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" + integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== + +"@rollup/rollup-linux-x64-gnu@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" + integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== + +"@rollup/rollup-linux-x64-musl@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" + integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== + +"@rollup/rollup-win32-arm64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" + integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== + +"@rollup/rollup-win32-ia32-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" + integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== + +"@rollup/rollup-win32-x64-msvc@4.12.0": + version "4.12.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" + integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== + "@sentry-internal/tracing@7.47.0": version "7.47.0" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.47.0.tgz#45e92eb4c8d049d93bd4fab961eaa38a4fb680f3" @@ -1579,6 +1671,11 @@ "@sentry/utils" "7.47.0" tslib "^1.9.3" +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -1587,9 +1684,9 @@ type-detect "4.0.8" "@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" @@ -1600,6 +1697,13 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@sinonjs/fake-timers@^11.2.2": + version "11.2.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz#50063cc3574f4a27bd8453180a04171c85cc9699" + integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/samsam@^7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" @@ -1618,7 +1722,7 @@ lodash.get "^4.4.2" type-detect "^4.0.8" -"@sinonjs/text-encoding@^0.7.1": +"@sinonjs/text-encoding@^0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== @@ -1633,37 +1737,96 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tauri-apps/api@2.0.0-beta.1": + version "2.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@tauri-apps/api/-/api-2.0.0-beta.1.tgz#8f033495632c5d8b2abeab820d4a2efe4e4a9b32" + integrity sha512-Zok1HA5s38E951CD2Osg7qi1/NlT7K1zOK6/nf5t/SKkoRT8KPrPZlJ4zBOImLQpHdaLtEANjcjBfYcbM2noxQ== -"@types/chai-subset@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" - integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== - dependencies: - "@types/chai" "*" +"@tauri-apps/cli-darwin-arm64@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.2.tgz#1a1b289ffda7b0c7fdfe703283f0de0284a3d239" + integrity sha512-bAchrSNhFlj1U1rBZ3WJYQU5urN9bpaHlSW8UnTEkkDK0bwcLQyf+AYtRFCy8mWHq6n1RhXxVa6nbTg4DZl7RA== -"@types/chai@*", "@types/chai@^4.3.4": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== +"@tauri-apps/cli-darwin-x64@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.2.tgz#031690c6c85015753ff379f93305444c1586fccc" + integrity sha512-29Zn0GXIID1fQ8PjVBjQ/X1Ho3HcVF7a6BPYRBe1zEUfTKyrKFtHP/RD0tROw+iMh17dl3Li23aV9CCQuhfW5Q== + +"@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.2.tgz#38bc667bf964ff34bba655fc239d52194fa7e8eb" + integrity sha512-o5esvaBOn7Wr/tQz9HY9CrjeIT7/3bGO3reJk9MUOU6VpwOElGlM7bl7U2I2z1EmZn7GUa7yG2E+p7CMDV9a3w== + +"@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.2.tgz#cada29cb2053e364de67bbefa6c1ca24e247d24f" + integrity sha512-YIA9OZ9+Mf3LW1iQZveUeMySvM3jgf5b0a1MUawYCcuhUJ/FFGaDiia4Z6hOO+p1d8DsswEelzzKyvlBiBJYGA== + +"@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.2.tgz#84595a256c3de1f33ad603f4740ee3449839e811" + integrity sha512-UNminCTRybPkb9BNyAPo8v4bJ45q9anaIisw7PfGXeuDeHMc2W/fjLlQXipsijMvQ7lakUAjO3ttEM6ctOYJiQ== + +"@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.2.tgz#7e8edf156088600916806f0441a79028557e2477" + integrity sha512-o0eStDWpKkPdEsbbn98kiA/lOo4vBXnjFrov16lq88h2OThJS7idhSUqBRgqYpsIENMrvjtPJLutBkF9fuTOsw== + +"@tauri-apps/cli-linux-x64-musl@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.2.tgz#125f8366cdcf9c992bd35026926730586d9d3a23" + integrity sha512-zUhyeIBqIQJ9oy04kNffz7QxxXw32/0l+EEPCwFfhhCQq7y6k34G/br/yjHXXYdNytNn4kYcjwjzXnohUYTu3w== + +"@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.2.tgz#a1fecd90cbb6c8877537db5ad2ead34677074cfc" + integrity sha512-YIq7LsgSeUgSbwVDbwZBHzM9/gxWlcIxwMTgmwfSCszZmrzFfxP7JgzVG0VnK1N8UYymunWd9WIX9uUT3XhetQ== + +"@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.2.tgz#1115a1b531b18f306f94f763da3fa17baa532073" + integrity sha512-i2p7OS4R9Tq0EQbjU8VldWNLPXuzbWCsDJe78/pCU0nV1OTjjxXv0tzR8d5R2VElC8eOMGnfZr7mRMrKGcZoHQ== + +"@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.2.tgz#20435b171c08f0af87318173422e0040a222fe3b" + integrity sha512-5FYOA/u4xyj1Q/NKvFEEywPsUwBeLEarN/08+5JIjk7xmEIPylaxYxFnfSH0QZiLBDZAFbGIAWt0MRi97eNN5A== + +"@tauri-apps/cli@2.0.0-beta.2": + version "2.0.0-beta.2" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-2.0.0-beta.2.tgz#f949aad7f47691ff1db4fc83a3ab96003bf552ee" + integrity sha512-sc5fz1MEqncn8trOaUGn9DeZy7ND3QnGEb3lCPgghjifzceN/UZe69fDUN1N24iJxOhKs5Y2UI1uYK5em8GOGQ== + optionalDependencies: + "@tauri-apps/cli-darwin-arm64" "2.0.0-beta.2" + "@tauri-apps/cli-darwin-x64" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm-gnueabihf" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm64-gnu" "2.0.0-beta.2" + "@tauri-apps/cli-linux-arm64-musl" "2.0.0-beta.2" + "@tauri-apps/cli-linux-x64-gnu" "2.0.0-beta.2" + "@tauri-apps/cli-linux-x64-musl" "2.0.0-beta.2" + "@tauri-apps/cli-win32-arm64-msvc" "2.0.0-beta.2" + "@tauri-apps/cli-win32-ia32-msvc" "2.0.0-beta.2" + "@tauri-apps/cli-win32-x64-msvc" "2.0.0-beta.2" "@types/cookie@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" integrity sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow== -"@types/diff@5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.3.tgz#1f89e49ff83b5d200d78964fb896c68498ce1828" - integrity sha512-amrLbRqTU9bXMCc6uX0sWpxsQzRIo9z6MJPkH1pkez/qOxuqSZVuryJAWoBRq94CeG8JxY+VK4Le9HtjQR5T9A== +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== -"@types/dompurify@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.4.0.tgz#fd9706392a88e0e0e6d367f3588482d817df0ab9" - integrity sha512-IDBwO5IZhrKvHFUl+clZxgf3hn2b/lU6H1KaBShPkQyGJUQ0xwebezIPSuiyGwfz1UzJWQl4M7BDxtHtCCPlTg== +"@types/diff@5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6" + integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ== + +"@types/dompurify@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.0.5.tgz#02069a2fcb89a163bacf1a788f73cb415dd75cb7" + integrity sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg== dependencies: "@types/trusted-types" "*" @@ -1672,10 +1835,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== +"@types/estree@1.0.5", "@types/estree@^1.0.0": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/glob@5 - 7": version "7.2.0" @@ -1685,88 +1848,80 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/howler@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/howler/-/howler-2.2.7.tgz#5acfbed57f9e1d99b8dabe1b824729e1c1ea1fae" - integrity sha512-PEZldwZqJJw1PWRTpupyC7ajVTZA8aHd8nB/Y0n6zRZi5u8ktYDntsHj13ltEiBRqWwF06pASxBEvCTxniG8eA== - "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== -"@types/jquery@*": - version "3.5.19" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.19.tgz#f9b6cb7ed82cd92584ce33238ee8425798358365" - integrity sha512-KFbmk+dXfphHGuVCmlopgcNRCegN/21mkeoD4BzuJhVH0SJW3Uo2mLuAwb6oqTNV79EsRp6J7yC1BbKymjpx/g== +"@types/jquery@*", "@types/jquery@3.5.29": + version "3.5.29" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.29.tgz#3c06a1f519cd5fc3a7a108971436c00685b5dcea" + integrity sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg== dependencies: "@types/sizzle" "*" -"@types/jquery@3.5.16": - version "3.5.16" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.16.tgz#632131baf30951915b0317d48c98e9890bdf051d" - integrity sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw== - dependencies: - "@types/sizzle" "*" - -"@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash-es@4.17.7": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.7.tgz#22edcae9f44aff08546e71db8925f05b33c7cc40" - integrity sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ== +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== dependencies: "@types/lodash" "*" "@types/lodash@*": - version "4.14.198" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" - integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== + version "4.14.202" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== -"@types/moxios@0.4.15": - version "0.4.15" - resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.15.tgz#d8b774f360ba652801b5807e0833f6ff30a17770" - integrity sha512-eHD7i0/Uu7pFGzS4uIed2InJLj5H6xOOsqPjGtRyvyC/jnzRt6q6Xtnm2PQlkcqKHjRybEqjw71dcPnzfDouhw== +"@types/moxios@0.4.17": + version "0.4.17" + resolved "https://registry.yarnpkg.com/@types/moxios/-/moxios-0.4.17.tgz#3a2084b9b11713dde0da8c681db642936d3edf40" + integrity sha512-Ef7VE+vfISBbxWMOl40doJpHGpy5lTYJQwWHAy9ah1lrRnsVd+eNt6NjJ2QTAotHpQ7krVrZ3lp8hnxUxvdGuw== dependencies: axios ">=0.13.0" -"@types/node@*": - version "20.6.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.3.tgz#5b763b321cd3b80f6b8dde7a37e1a77ff9358dd9" - integrity sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" -"@types/node@^14.14.31": - version "14.18.62" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.62.tgz#cc691367ad9a09994a36be41cbc9f44e414cf77c" - integrity sha512-53Fhb08qfKwSNCIUtysIqw0ye+v1d5QCdL2kl8liKQFlOZTAo+nEYr/FztzMaHBFwB5H0ugF0PF0gmtojaNNiQ== +"@types/node@*", "@types/node@^20.11.16": + version "20.11.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195" + integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ== + dependencies: + undici-types "~5.26.4" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/parse5@^5": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/qs@6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/qs@6.9.10": + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== "@types/resolve@1.17.1": version "1.17.1" @@ -1776,153 +1931,153 @@ "@types/node" "*" "@types/semantic-ui-accordion@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.2.tgz#2f3b9d60a981d9eddc3705619079defaacc3aee0" - integrity sha512-XClXI/20W7iFLQ7eyslZswbdv3A4qWEnFz8JvOylGatCW7biTLVhMBPcN0b17TZ1GeV4V/l3ctmvTEBCHvg8CA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-accordion/-/semantic-ui-accordion-2.2.5.tgz#09591490950492705853410f00bf7d8af66e11f9" + integrity sha512-wDm0lvxFIW3TPolsj3gxoHwi6cQpQvaQJq2Tp7aIt5e2USE10ARrDMPWpNTF2WVkBKd6WoUoNb/Nyj8eblOnsA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api@*": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.4.tgz#ea9cad381b38b77f95fa3bf679d7c5273c7b20dd" - integrity sha512-6IvCjZDJ0TVb1EtnNFQPNyVmOZnLGPEKyEAs9G0FF3XuAyyOdtfD4NGHJ0kknnX1FD+++ye0EuSVFDutbwEFWw== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-api/-/semantic-ui-api-2.2.7.tgz#fc6e1ceac911f76682bdbfd659bfb6cbaf5f264d" + integrity sha512-QO11dj4pWs3Wph1z8cL80t1u9qpZB45geUKsCsMTovdJRFV3yosOjsHqHhsEzLFVdt6rt3ZmGhXsZRDIECi0SA== dependencies: "@types/jquery" "*" "@types/semantic-ui-checkbox@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.2.tgz#bb19b20d503103a724c9dc79f71132edb092a362" - integrity sha512-ZTAy3yNwOAaoznxsFoR33XopJnyyzAGrLeDpn7hVTkUYm7wgGsgOpRfG2psdM3fIOCkZkkE9IEAp1pLGBifL1g== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-checkbox/-/semantic-ui-checkbox-2.2.6.tgz#b971561563a4bc264b039a0b4e7b5358a006986a" + integrity sha512-N6lHQfr3wsSXATiKW0dx6sQkd8i7BZDkehbMva9wo6XxBPBN13PoeUKzwBjrFNXjVjy8sMTbXgsWvM30cAf+Dg== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.2.tgz#667185161c31d046a51a6d71097d2909829e1423" - integrity sha512-wK7da/70UJ9AU7Ju2MeOO9sjRPrhU6jf+VvHiTwlaCGm7+ALiJThd88D1iB6ODDQpm+ebjIbQkvAmDSkMpmKlg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dimmer/-/semantic-ui-dimmer-2.2.5.tgz#3be07a65857398a0ec8e4dd127c8b3bac393be06" + integrity sha512-0p0EMwJ1G/Vi7Vti9U+HdMk6aXhInQ6K84KHj7gSM1YI4qvFwed0nsm4CGR8IXUa6SkS8Da0mSVcCLlPduv/lg== dependencies: "@types/jquery" "*" "@types/semantic-ui-dropdown@*": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.5.tgz#09c1f57f6651580f043d5d77158479d25199cb59" - integrity sha512-WHzxdP2/nSs3G8vtF0UPllQ7VCuVOmOgyM0QRONSbJd/sTdcZaLbw9U+oMbp5QVkICPz+hpCDuZYhp8/YJmsdg== + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-dropdown/-/semantic-ui-dropdown-2.2.9.tgz#146b97d8bf690ddc0633ab67ad12e17e1952bc04" + integrity sha512-xexijVzkwUNPNfuTLuQETcKqGwKjJFb9ymvpVu/UFy+PNHJRz08rV3SZFdb73Gh+pEJC+8aN9op5ZWiHrB/6NA== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-embed@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.2.tgz#5b851bc966c06812550410348da7f8ea866e0c02" - integrity sha512-5sW99BtK2SIBs9/sSM/0vMr6tphPyPXHyClhFX1tJi0L5ZH0wEmf6XcBRZgROe3ueHYVaJ0Pt/zwPQ5SMW0xDg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-embed/-/semantic-ui-embed-2.2.5.tgz#ff7d9ede0cb5d182de555212051e4519a7f62a6b" + integrity sha512-4Cb+191etZwFqG9aV91v7zFQ32P7hzwwmFRP5DchQV+j4b6MJRFSzm3QQuuAez0YtuTKhThjvS/rEnh6DJa1wg== dependencies: "@types/jquery" "*" "@types/semantic-ui-form@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.6.tgz#767c364c92fb3977f221b8c72e094e0928d4a024" - integrity sha512-khj3o6w2TWN9Bh7yZhsosUfAPMBRP/rD3DiApZrPUaioCHf0VrDtYuiqJXTd/Qt7cZW2w+NgZ1riV/3leXx8iA== + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-form/-/semantic-ui-form-2.2.9.tgz#22ac6bae981300a11e8c65a273953f7e7d89068d" + integrity sha512-EcURdJbpd/f1zcIVoeH+lI+W3fDKChksF7KE7jirGlg77uiMDbOFSlxJaXwIEYxU+vwZRXlSib8Hqegkxk/mCg== dependencies: "@types/jquery" "*" "@types/semantic-ui-modal@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.3.tgz#482e8ca3323b22e7247ff92249a52a8bc2fccc6d" - integrity sha512-Th48BFk1pd4kluFjCUDKn7Aml3xoLdFFK8wFQRz6UsOMdvsXx2OrNkubhjqc79tcBzONC7NszSW2ImslPPHNCg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-modal/-/semantic-ui-modal-2.2.7.tgz#12a7a502876109daa0a2638d9f2923a16da30772" + integrity sha512-vkazvqzPrutKH1jFt+xtpEmcdkLTZojb0RmW/zpS4MsLl7lgvFywfAjewdQgsFW5AEOku4KwrWoBTl7brh35/g== dependencies: "@types/jquery" "*" "@types/semantic-ui-dimmer" "*" "@types/semantic-ui-nag@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.2.tgz#93e9cc410aa17b273ef73a705666815a7c2a09a6" - integrity sha512-gqjSFmMLw8vtPa6/Rv/mFBK1mdqaUbLkhUA4CsTDhkibUqnNqpvI/d1XFFLdC/ULu9v7UloMTCndSGKao+q5oA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-nag/-/semantic-ui-nag-2.2.5.tgz#aacd88ee78eb51477e2818490eccfd5fe4a025c4" + integrity sha512-ScjA2OrsPyxssg+1UpYpBoYQf1ruk5gExU08DEjJcrbEWYCOYa4+NbA/cUpsNogf6l0lgePdlBH3nJVezIY89Q== dependencies: "@types/jquery" "*" "@types/semantic-ui-popup@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.3.tgz#cdf391d0e16ffbfdc34c7fee85e85d20a9323c5a" - integrity sha512-tw7FXUTAs+GEU939RBpOCVq9H8vYpsr8uYvJC0RUxXCYXCUHsgYzgIIklKoD+xPvUCf34MHnMBwrrTCMJosxGg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-popup/-/semantic-ui-popup-2.2.7.tgz#3b28849e09b815283f0fd765dc6480a31f4c3857" + integrity sha512-QeiyPFa5bHYHBGIVI4dDombm/dgLL2uJSBru8tq6DXasohxlBeZxUe08a9viAOWCyi91+FGi3KR6elPbd0u2Ag== dependencies: "@types/jquery" "*" "@types/semantic-ui-progress@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.3.tgz#2ad3e2b69c5c5927aa4c11634cdf0a04ab53b36f" - integrity sha512-gv0i4+/uVbUJnuTzNv2oEqJ8CMQPeAR6K+s2zm1r4waH+8ZQ0SKM1DZ4t3w4gEMxhXqZVlLlyIhfY1SmUI0GuQ== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-progress/-/semantic-ui-progress-2.2.6.tgz#bbb573577f27a0ecbf8457eb5bdd20134f7bdd88" + integrity sha512-HfWyQM6B4CmQFj4Oabh+Sah4HbePM71pKZ0eplXyv/0a8pQlQaX+gW3RSz8lG32IXEl0Lz0G4IUn97qzOPjJxQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-rating@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.2.tgz#d35807b61ebc6b4f2a977b430fbd862fa5f5b5a7" - integrity sha512-9497T8bEnkadWtQDl5Hno9lviZ2bJjx5rKd/Gfq6PWZ1/4/71LrYdH1DSr+sHYJ5HkaSA0b7GFVCTxi9pEdd6Q== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-rating/-/semantic-ui-rating-2.2.5.tgz#d1c1de73bebf3ba829e82f77f2dd68409a236912" + integrity sha512-Oy1Wt6qKxq1WczW37NymYtne2gWRhxbRKKDrCl+va7fG6HAR+0hjzv7EddfSCOWwn/o7srQxjLKFj7FZxdi1JQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-search@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.3.tgz#7da1a62ed116a1aa0baee2a9c66196b16f643e13" - integrity sha512-JVrrW9uakXTudNm1MGrkRpirL2vm8NCVtrPyH6zIbBNqi08UPeHY8yxjnFpTPv5sMKBGGhkSn9cYrGz6Cweg2Q== + version "2.2.7" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-search/-/semantic-ui-search-2.2.7.tgz#87388e5e6a33845f6983a9f4315449bd1be3eafa" + integrity sha512-Qay8/dFM5Z+7TM1nZzDnpkv1ZvxtY+vpdrqG5kjnX3XtZ69jm9y44kHDUr+reDEZAMrOCR7gxWuDuhxwRDuA0g== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-shape@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.2.tgz#ce3bd95e4ec1127380343910c4766a4f070c1336" - integrity sha512-bXaeheuuDY3rAmA5QQRAA0fzMiEkhRgZts5i7w/d1XlMHCVNeHIIAbhTurl3bPwTlbr0NI7T3ZmxH0EKRVdIEg== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-shape/-/semantic-ui-shape-2.2.5.tgz#3749a32c1e958dc32cd8f9ea712e5ae332a3ad34" + integrity sha512-4FWI3qjh2X3uDwST2NCww7w0P7dtjnak33G9ENdIepAa7JXqrmephg6BVB5MBGYzw11DUCtEL7x7ka9iToZ2WA== dependencies: "@types/jquery" "*" "@types/semantic-ui-sidebar@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.2.tgz#792464d6e381354c8c1e935635c9010b1366f4a9" - integrity sha512-fm/whmNiyTzQwduc4maV9XjdwVc4pVlkhX5vippW9ukCCkVGY8qBgQKHFYhAHPhe7sCsGIuS+Vpr83t8X7Fg8w== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sidebar/-/semantic-ui-sidebar-2.2.5.tgz#e0d8092fdbc7a6d8fa8caa50a18db1ea70c9e475" + integrity sha512-9oniXmN/rLTc2b2RO/2unsc0nHwvj6P9m6bEjxFgveMS8NnuiljF7skypJW0fSN37zHkb9yGxcP3jJyqsRNunQ== dependencies: "@types/jquery" "*" "@types/semantic-ui-site@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.2.tgz#25a358ca572aa0e811f2f912ab6872ef897c8bbe" - integrity sha512-XxwUxqpBLAlPpO7OqAYIdBRsZTmKLXvSzBLczms3JshnoChEZbxtKRYxSxgK93Y4XYCfKnpXQXEF6RIw5FF/mA== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-site/-/semantic-ui-site-2.2.5.tgz#1973945cf5f9f891e5e42dd0a401dc30dfde15f6" + integrity sha512-hyL79qPrZM6bL7etQUE8SZYhgpXdlZth87yFYEhMHDENhGx5LiR5vRH+C78YDmf3ZemIUUKvY1US52VlfYaDhg== dependencies: "@types/jquery" "*" "@types/semantic-ui-sticky@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.3.tgz#1317d2eac9b42d8088f8f0f3228684efa0ce6a84" - integrity sha512-HOhd+W75u9Hk0owQXUGdDKpvVhKl/207hueZqTTREZPTmxALAHbl6bHKxnvcJqRerhOFdObQcCFZGL5DEXRtcA== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-sticky/-/semantic-ui-sticky-2.2.6.tgz#97f71371688c24bbc3f9b0057537c5252fb580b6" + integrity sha512-k/In4CD6xhVK/VeZCaIdKBR35BaB5VKSl9Vw7fRGTnr5VK9gjRDs0pBJyH2IDzbUcJ2DitzMpMcIwX4Varyp2g== dependencies: "@types/jquery" "*" "@types/semantic-ui-tab@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.2.tgz#4bae0c8ac1e970cd93fc31cf99f546e29ac9a069" - integrity sha512-o7a2TJAxjh7pVqRzpQmJd7hTcaDv/tAYJh2Aez5mYiRrFylhzwIrJAcXhSwVRVInPZkc8MDlBPg8Xm+QJ98rLw== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-tab/-/semantic-ui-tab-2.2.5.tgz#a9d518e76f0557a10af81661a2cce677a0ca6793" + integrity sha512-r8NHOqSrny5fTE6MsSrTcZp1eN2lpxYgWMfZXczH1FDsSaFfO1MF7FNJbB6XHlJO6hnYCfx58KxhxerPyPkDqg== dependencies: "@types/jquery" "*" "@types/semantic-ui-api" "*" "@types/semantic-ui-transition@*": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.2.tgz#e03d9eec32c962a5c862112f75a53879c3628406" - integrity sha512-wZJICf3qCr+68zPvzTKC9nQJ3mneW+K/K9Y2KphxujWgMCkOQEetDNb5Dbt9YZe92L0SnaPaDgp1KVaKAortdw== + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-transition/-/semantic-ui-transition-2.2.5.tgz#86cf536ed06754b4cd04544672d92154edef7ca7" + integrity sha512-MId2N23h6Jki2hkVw1m/JHHQFHoYrOJlsLsfQW5ZE0Pdcq0RETzcM7UWwaBjHX79EtjohGsewDKAvlVP92DbAg== dependencies: "@types/jquery" "*" "@types/semantic-ui-visibility@*": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.3.tgz#254a126b502159e194fcbc9b8561e14c4ba215a1" - integrity sha512-4vfXjZHJhif8Rw4WQ691Zx2Y0vqdNF2D0AYT7ltQH1/mL/fCqEwTLndl3qvgCbxpniGbTnYRajqx1dk8+Ji/HQ== + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/semantic-ui-visibility/-/semantic-ui-visibility-2.2.6.tgz#a216881692d75d72f158a88163bf4a8b0490c8e9" + integrity sha512-b4dxITsys3mMwXyPzI6b21XwS7gHeTnB2ztdBvtbSBIO1SRxhHy0qW0sh+U4pK8xsXcqzFbTLr3/gO9A/kDdDA== dependencies: "@types/jquery" "*" -"@types/semantic-ui@2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.7.tgz#4ae4242004aac11a21133d4f338e868b92605270" - integrity sha512-Uj6rby2GnuVyO7pj8vgUFsv5eaxb0ktpfasYcB/vXnSAeJ4cRjIOvxka+EoPjw3tPCY4/WlxRss8hsh7kRWzQg== +"@types/semantic-ui@2.2.9": + version "2.2.9" + resolved "https://registry.yarnpkg.com/@types/semantic-ui/-/semantic-ui-2.2.9.tgz#9616e7a4e05c1eac421d7bbe464467b2611047b9" + integrity sha512-VS7BTgdQEzv1D+E/b9Y795b/i0AZ4bSgzZhSASVtvzudxU8sufXdFHazPGtBgVH8IoLkPoYNoNkgQ1Q3aFEi6g== dependencies: "@types/jquery" "*" "@types/semantic-ui-accordion" "*" @@ -1946,15 +2101,15 @@ "@types/semantic-ui-transition" "*" "@types/semantic-ui-visibility" "*" -"@types/semver@^7.3.12": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" - integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== +"@types/semver@^7.5.0": + version "7.5.7" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e" + integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg== -"@types/showdown@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.0.tgz#3e800eca8573848cac4e5555f4377ba3a0e7b1f2" - integrity sha512-70xBJoLv+oXjB5PhtA8vo7erjLDp9/qqI63SRHm4REKrwuPOLs8HhXwlZJBJaB4kC18cCZ1UUZ6Fb/PLFW4TCA== +"@types/showdown@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/showdown/-/showdown-2.0.6.tgz#3d7affd5f971b4a17783ec2b23b4ad3b97477b7e" + integrity sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ== "@types/sinonjs__fake-timers@8.1.1": version "8.1.1" @@ -1962,14 +2117,19 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@*", "@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== + +"@types/statuses@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315" + integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw== "@types/trusted-types@*", "@types/trusted-types@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65" - integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/vue-virtual-scroller@npm:@earltp/vue-virtual-scroller": version "1.0.1" @@ -1981,182 +2141,251 @@ resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz#5c9f3c617f64a9735d7b72a7cc671e166d900c40" integrity sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA== +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" - integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== +"@typescript-eslint/eslint-plugin@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz#22bb999a8d59893c0ea07923e8a21f9d985ad740" + integrity sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w== dependencies: - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/type-utils" "5.48.2" - "@typescript-eslint/utils" "5.48.2" - debug "^4.3.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/eslint-plugin@^5.0.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/type-utils" "7.1.0" + "@typescript-eslint/utils" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" debug "^4.3.4" graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.0.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== +"@typescript-eslint/eslint-plugin@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.7.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== + dependencies: + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" - integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== +"@typescript-eslint/scope-manager@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" + integrity sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" -"@typescript-eslint/type-utils@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" - integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "5.48.2" - "@typescript-eslint/utils" "5.48.2" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== +"@typescript-eslint/type-utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" + integrity sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew== dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" + "@typescript-eslint/typescript-estree" "7.1.0" + "@typescript-eslint/utils" "7.1.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" - integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/types@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" + integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== -"@typescript-eslint/typescript-estree@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" - integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/visitor-keys" "5.48.2" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== +"@typescript-eslint/typescript-estree@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" + integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/visitor-keys" "7.1.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/utils@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" - integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== +"@typescript-eslint/utils@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.2" - "@typescript-eslint/types" "5.48.2" - "@typescript-eslint/typescript-estree" "5.48.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + semver "^7.5.4" -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/utils@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.0.tgz#710ecda62aff4a3c8140edabf3c5292d31111ddd" + integrity sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.1.0" + "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/typescript-estree" "7.1.0" + semver "^7.5.4" -"@typescript-eslint/visitor-keys@5.48.2": - version "5.48.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" - integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "5.48.2" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== +"@typescript-eslint/visitor-keys@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" + integrity sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA== dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "7.1.0" + eslint-visitor-keys "^3.4.1" -"@vitejs/plugin-vue@4.2.3": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz#ee0b6dfcc62fe65364e6395bf38fa2ba10bb44b6" - integrity sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw== +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@vitest/coverage-c8@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@vitest/coverage-c8/-/coverage-c8-0.25.8.tgz#a46d171b1b2291089dd5518642bbbec9890617e5" - integrity sha512-fWgzQoK2KNzTTNnDcLCyibfO9/pbcpPOMtZ9Yvq/Eggpi2X8lewx/OcKZkO5ba5q9dl6+BBn6d5hTcS1709rZw== +"@vitejs/plugin-vue@5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.0.3.tgz#164b36653910d27c130cf6c945b4bd9bde5bcbee" + integrity sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA== + +"@vitest/coverage-v8@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/coverage-v8/-/coverage-v8-1.3.1.tgz#cf5ed8eb5bff6658cea126d0f8fcd2872de0b59f" + integrity sha512-UuBnkSJUNE9rdHjDCPyJ4fYuMkoMtnghes1XohYa4At0MS3OQSAo97FrbwSLRshYsXThMZy1+ybD/byK5llyIg== dependencies: - c8 "^7.12.0" - vitest "0.25.8" + "@ampproject/remapping" "^2.2.1" + "@bcoe/v8-coverage" "^0.2.3" + debug "^4.3.4" + istanbul-lib-coverage "^3.2.2" + istanbul-lib-report "^3.0.1" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.1.6" + magic-string "^0.30.5" + magicast "^0.3.3" + picocolors "^1.0.0" + std-env "^3.5.0" + test-exclude "^6.0.0" + v8-to-istanbul "^9.2.0" + +"@vitest/expect@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.3.1.tgz#d4c14b89c43a25fd400a6b941f51ba27fe0cb918" + integrity sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw== + dependencies: + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" + chai "^4.3.10" + +"@vitest/runner@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.3.1.tgz#e7f96cdf74842934782bfd310eef4b8695bbfa30" + integrity sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg== + dependencies: + "@vitest/utils" "1.3.1" + p-limit "^5.0.0" + pathe "^1.1.1" + +"@vitest/snapshot@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.3.1.tgz#193a5d7febf6ec5d22b3f8c5a093f9e4322e7a88" + integrity sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ== + dependencies: + magic-string "^0.30.5" + pathe "^1.1.1" + pretty-format "^29.7.0" + +"@vitest/spy@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.3.1.tgz#814245d46d011b99edd1c7528f5725c64e85a88b" + integrity sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig== + dependencies: + tinyspy "^2.2.0" + +"@vitest/utils@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.3.1.tgz#7b05838654557544f694a372de767fcc9594d61a" + integrity sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ== + dependencies: + diff-sequences "^29.6.3" + estree-walker "^3.0.3" + loupe "^2.3.7" + pretty-format "^29.7.0" "@volar/language-core@1.10.0": version "1.10.0" @@ -2165,19 +2394,19 @@ dependencies: "@volar/source-map" "1.10.0" -"@volar/language-core@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.4.1.tgz#66b5758252e35c4e5e71197ca7fa0344d306442c" - integrity sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ== +"@volar/language-core@1.11.1", "@volar/language-core@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.11.1.tgz#ecdf12ea8dc35fb8549e517991abcbf449a5ad4f" + integrity sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw== dependencies: - "@volar/source-map" "1.4.1" + "@volar/source-map" "1.11.1" "@volar/language-core@~1.10.0": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.1.tgz#76789c5b0c214eeff8add29cbff0333d89b6fc4a" - integrity sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA== + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-1.10.10.tgz#9c240a36dd4007b9c4f00739f6cecb81da54a49e" + integrity sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw== dependencies: - "@volar/source-map" "1.10.1" + "@volar/source-map" "1.10.10" "@volar/source-map@1.10.0": version "1.10.0" @@ -2186,49 +2415,27 @@ dependencies: muggle-string "^0.3.1" -"@volar/source-map@1.10.1", "@volar/source-map@~1.10.0": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.1.tgz#b806845782cc615f2beba94624ff34a700f302f5" - integrity sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA== +"@volar/source-map@1.10.10", "@volar/source-map@~1.10.0": + version "1.10.10" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.10.10.tgz#ec807fe60b8afe29e19bf6d1c90d2e76502df541" + integrity sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg== dependencies: muggle-string "^0.3.1" -"@volar/source-map@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.4.1.tgz#e3b561775c742508e5e1f28609a4787c98056715" - integrity sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA== +"@volar/source-map@1.11.1", "@volar/source-map@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-1.11.1.tgz#535b0328d9e2b7a91dff846cab4058e191f4452f" + integrity sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg== dependencies: - muggle-string "^0.2.2" + muggle-string "^0.3.1" -"@volar/typescript@1.4.1-patch.2": - version "1.4.1-patch.2" - resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.4.1-patch.2.tgz#89f4bd199ca81a832d86d1449b01f49f2b72137c" - integrity sha512-lPFYaGt8OdMEzNGJJChF40uYqMO4Z/7Q9fHPQC/NRVtht43KotSXLrkPandVVMf9aPbiJ059eAT+fwHGX16k4w== +"@volar/typescript@~1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-1.11.1.tgz#ba86c6f326d88e249c7f5cfe4b765be3946fd627" + integrity sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ== dependencies: - "@volar/language-core" "1.4.1" - -"@volar/vue-language-core@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-1.6.5.tgz#db42520f1a29737c7e40fbb3e6aead8def85ba75" - integrity sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg== - dependencies: - "@volar/language-core" "1.4.1" - "@volar/source-map" "1.4.1" - "@vue/compiler-dom" "^3.3.0" - "@vue/compiler-sfc" "^3.3.0" - "@vue/reactivity" "^3.3.0" - "@vue/shared" "^3.3.0" - minimatch "^9.0.0" - muggle-string "^0.2.2" - vue-template-compiler "^2.7.14" - -"@volar/vue-typescript@1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-1.6.5.tgz#6ca9bfefa5dc64ff97fcdbc74249e5e7da44e533" - integrity sha512-er9rVClS4PHztMUmtPMDTl+7c7JyrxweKSAEe/o/Noeq2bQx6v3/jZHVHBe8ZNUti5ubJL/+Tg8L3bzmlalV8A== - dependencies: - "@volar/typescript" "1.4.1-patch.2" - "@volar/vue-language-core" "1.6.5" + "@volar/language-core" "1.11.1" + path-browserify "^1.0.1" "@vue-macros/api@0.8.3": version "0.8.3" @@ -2363,12 +2570,12 @@ unplugin "^1.4.0" "@vue-macros/devtools@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.3.tgz#05108904369160d8446628d4d7f35d8d412c6e2b" - integrity sha512-aQRC9/TfmQajTMbZZ1BJn61rrraQztJqf64JdXRIpotbGR+xufLY/KIyTTB4SgL1pE1eW/ar5FaZTSjMqyVGIg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@vue-macros/devtools/-/devtools-0.1.4.tgz#c27432a090a524fecd13e0a38e2b9c0f27b74061" + integrity sha512-md5WzjC4qgOOjnYKaqEfZknSeiEeGX13k/Hqi+aqvb+kIF0F6/5oxroqaPQemuNN/gUNMn8ZfA/JmcOYxGVFcQ== dependencies: sirv "^2.0.3" - vue "^3.3.4" + vue "^3.3.7" "@vue-macros/export-expose@0.0.10": version "0.0.10" @@ -2477,94 +2684,94 @@ "@vue-macros/short-vmodel" "1.2.15" "@vue/language-core" "1.8.8" -"@vue/compiler-core@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.2.tgz#39567bd15c7f97add97bfc4d44e814df36eb797b" - integrity sha512-CKZWo1dzsQYTNTft7whzjL0HsrEpMfiK7pjZ2WFE3bC1NA7caUjWioHSK+49y/LK7Bsm4poJZzAMnvZMQ7OTeg== +"@vue/compiler-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.11.tgz#9fa26f8c81b9b34365f94ce1ed4d0e6e6f94a2ac" + integrity sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w== dependencies: - "@babel/parser" "^7.21.3" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" source-map-js "^1.0.2" -"@vue/compiler-core@3.3.4", "@vue/compiler-core@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128" - integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g== +"@vue/compiler-core@3.4.19", "@vue/compiler-core@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e" + integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w== 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" -"@vue/compiler-dom@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz#2012ef4879375a4ca4ee68012a9256398b848af2" - integrity sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw== +"@vue/compiler-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz#36a76ea3a296d41bad133a6912cb0a847d969e4f" + integrity sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw== dependencies: - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" -"@vue/compiler-dom@3.3.4", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151" - integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w== +"@vue/compiler-dom@3.4.19", "@vue/compiler-dom@^3.3.0", "@vue/compiler-dom@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a" + integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA== dependencies: - "@vue/compiler-core" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-core" "3.4.19" + "@vue/shared" "3.4.19" -"@vue/compiler-sfc@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz#d6467acba8446655bcee7e751441232e5ddebcbf" - integrity sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ== +"@vue/compiler-sfc@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz#acfae240c875d067e0e2c9a4e2d910074408c73b" + integrity sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-ssr" "3.3.2" - "@vue/reactivity-transform" "3.3.2" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-ssr" "3.3.11" + "@vue/reactivity-transform" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.30.0" - postcss "^8.1.10" + magic-string "^0.30.5" + postcss "^8.4.32" source-map-js "^1.0.2" -"@vue/compiler-sfc@3.3.4", "@vue/compiler-sfc@^3.2.45", "@vue/compiler-sfc@^3.3.0", "@vue/compiler-sfc@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df" - integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ== +"@vue/compiler-sfc@3.4.19", "@vue/compiler-sfc@^3.2.47", "@vue/compiler-sfc@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129" + integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg== 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" -"@vue/compiler-ssr@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz#75ac4ccafa2d78c91d2e257ad243c86409493cc4" - integrity sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w== +"@vue/compiler-ssr@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz#598942a73b64f2bd3f95908b104a7fbb55fc41a2" + integrity sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg== dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-dom" "3.3.11" + "@vue/shared" "3.3.11" -"@vue/compiler-ssr@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777" - integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ== +"@vue/compiler-ssr@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2" + integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw== dependencies: - "@vue/compiler-dom" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/compiler-dom" "3.4.19" + "@vue/shared" "3.4.19" "@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" - integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + version "6.6.1" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83" + integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA== "@vue/eslint-config-standard@8.0.1": version "8.0.1" @@ -2578,14 +2785,29 @@ eslint-plugin-n "^15.2.4" eslint-plugin-promise "^6.0.0" -"@vue/eslint-config-typescript@11.0.2": - version "11.0.2" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz#03353f404d4472900794e653450bb6623de3c642" - integrity sha512-EiKud1NqlWmSapBFkeSrE994qpKx7/27uCGnhdqzllYDpQZroyX/O6bwjEpeuyKamvLbsGdO6PMR2faIf+zFnw== +"@vue/eslint-config-typescript@12.0.0": + version "12.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz#0ce22d97af5e4155f3f2e7b21a48cfde8a6f3365" + integrity sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg== dependencies: - "@typescript-eslint/eslint-plugin" "^5.0.0" - "@typescript-eslint/parser" "^5.0.0" - vue-eslint-parser "^9.0.0" + "@typescript-eslint/eslint-plugin" "^6.7.0" + "@typescript-eslint/parser" "^6.7.0" + vue-eslint-parser "^9.3.1" + +"@vue/language-core@1.8.27": + version "1.8.27" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-1.8.27.tgz#2ca6892cb524e024a44e554e4c55d7a23e72263f" + integrity sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA== + dependencies: + "@volar/language-core" "~1.11.1" + "@volar/source-map" "~1.11.1" + "@vue/compiler-dom" "^3.3.0" + "@vue/shared" "^3.3.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.3.1" + path-browserify "^1.0.1" + vue-template-compiler "^2.7.14" "@vue/language-core@1.8.8": version "1.8.8" @@ -2601,111 +2823,100 @@ muggle-string "^0.3.1" vue-template-compiler "^2.7.14" -"@vue/reactivity-transform@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz#e1991d52d7ecefb65b214d8a3385a9dbe2cca74c" - integrity sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg== +"@vue/reactivity-transform@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz#2bd486f4eff60c8724309925618891e722fcfadc" + integrity sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg== dependencies: - "@babel/parser" "^7.20.15" - "@vue/compiler-core" "3.3.2" - "@vue/shared" "3.3.2" + "@babel/parser" "^7.23.5" + "@vue/compiler-core" "3.3.11" + "@vue/shared" "3.3.11" estree-walker "^2.0.2" - magic-string "^0.30.0" + magic-string "^0.30.5" -"@vue/reactivity-transform@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" - integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw== +"@vue/reactivity@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.11.tgz#91f8e6c9ac60a595a5278c836b197628fd947a0d" + integrity sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g== 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.3.11" -"@vue/reactivity@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.2.tgz#c4ddc5087039070c0c11810f6bc1aa59c99f0cb5" - integrity sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g== +"@vue/reactivity@3.4.19", "@vue/reactivity@^3.3.0": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.19.tgz#8cf335d97d07881d8184cb23289289dc18b03f60" + integrity sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA== dependencies: - "@vue/shared" "3.3.2" + "@vue/shared" "3.4.19" -"@vue/reactivity@3.3.4", "@vue/reactivity@^3.3.0": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253" - integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ== +"@vue/runtime-core@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.11.tgz#63defba57bc54c1dac68a95b56c2633b1419193d" + integrity sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw== dependencies: - "@vue/shared" "3.3.4" + "@vue/reactivity" "3.3.11" + "@vue/shared" "3.3.11" -"@vue/runtime-core@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.2.tgz#7c89b30c44ad42a3256806a1e37c3cd18500d6d5" - integrity sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A== +"@vue/runtime-core@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.19.tgz#ef10357fdf3afdf68523b55424541000105e2aeb" + integrity sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw== dependencies: - "@vue/reactivity" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/reactivity" "3.4.19" + "@vue/shared" "3.4.19" -"@vue/runtime-core@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1" - integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA== +"@vue/runtime-dom@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz#1146d8d280b0fec4d2e18c4a4c8f8121d0cecc09" + integrity sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ== dependencies: - "@vue/reactivity" "3.3.4" - "@vue/shared" "3.3.4" + "@vue/runtime-core" "3.3.11" + "@vue/shared" "3.3.11" + csstype "^3.1.2" -"@vue/runtime-dom@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz#b0bf7ce3fa9c181049ce783a0e13480a4f350c4b" - integrity sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng== +"@vue/runtime-dom@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz#079141e31d9f47515b9595f29843d51011f88739" + integrity sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g== dependencies: - "@vue/runtime-core" "3.3.2" - "@vue/shared" "3.3.2" - csstype "^3.1.1" + "@vue/runtime-core" "3.4.19" + "@vue/shared" "3.4.19" + csstype "^3.1.3" -"@vue/runtime-dom@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566" - integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ== +"@vue/server-renderer@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.11.tgz#409aed8031a125791e2143552975ecd1958ad601" + integrity sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A== dependencies: - "@vue/runtime-core" "3.3.4" - "@vue/shared" "3.3.4" - csstype "^3.1.1" + "@vue/compiler-ssr" "3.3.11" + "@vue/shared" "3.3.11" -"@vue/server-renderer@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.2.tgz#31dce9f76380762fc42df77f6f974c4098f179e6" - integrity sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg== +"@vue/server-renderer@3.4.19": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.19.tgz#e6f8ff5268d0758766ca9835375218924d5f0eb6" + integrity sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw== dependencies: - "@vue/compiler-ssr" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-ssr" "3.4.19" + "@vue/shared" "3.4.19" -"@vue/server-renderer@3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c" - integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ== - dependencies: - "@vue/compiler-ssr" "3.3.4" - "@vue/shared" "3.3.4" +"@vue/shared@3.3.11": + version "3.3.11" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.11.tgz#f6a038e15237edefcc90dbfe7edb806dd355c7bd" + integrity sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw== -"@vue/shared@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.2.tgz#774cd9b4635ce801b70a3fc3713779a5ef5d77c3" - integrity sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ== - -"@vue/shared@3.3.4", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780" - integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== +"@vue/shared@3.4.19", "@vue/shared@^3.3.0", "@vue/shared@^3.3.4": + version "3.4.19" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c" + integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw== "@vue/test-utils@2.2.7": version "2.2.7" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.2.7.tgz#0d93d635031a4cca2de70b825aef3fe20a41e702" integrity sha512-BMuoruUFTEqhLoOgsMcgNVMiByYbfHCKGr2C4CPdGtz/affUtDVX5zr1RnPuq0tYSiaqq+Enw5voUpG6JY8Q7g== -"@vue/tsconfig@0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz#4a61dbd29783d01ddab504276dcf0c2b6988654f" - integrity sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg== +"@vue/tsconfig@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@vue/tsconfig/-/tsconfig-0.5.1.tgz#3124ec16cc0c7e04165b88dc091e6b97782fffa9" + integrity sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ== "@vueuse/core@10.3.0": version "10.3.0" @@ -2754,45 +2965,32 @@ dependencies: vue-demi ">=0.14.5" -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.2, acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +acorn-walk@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^7.1.1, acorn@^7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.11.3, acorn@^8.5.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -acorn@^8.1.0, acorn@^8.10.0, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== dependencies: - debug "4" + debug "^4.3.4" aggregate-error@^3.0.0: version "3.1.0" @@ -2802,7 +3000,12 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv-draft-04@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8" + integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== + +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2812,7 +3015,7 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.0: +ajv@^8.6.0, ajv@^8.6.3: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2827,7 +3030,7 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== -ansi-escapes@^4.3.0: +ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2853,6 +3056,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2866,6 +3074,13 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -2876,15 +3091,15 @@ array-back@^3.0.1, array-back@^3.1.0: resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" -array-includes@^3.1.4, array-includes@^3.1.6: +array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -2900,18 +3115,29 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" -array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: +array.prototype.findlastindex@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== @@ -2921,7 +3147,7 @@ array.prototype.flat@^1.2.5, array.prototype.flat@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -2931,17 +3157,18 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" asn1@~0.2.3: @@ -2971,12 +3198,12 @@ ast-kit@^0.10.0: pathe "^1.1.1" ast-kit@^0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.11.2.tgz#5951329c7fd311304cd30729619639323974893f" - integrity sha512-Q0DjXK4ApbVoIf9GLyCo252tUH44iTnD/hiJ2TQaJeydYWSpKk0sI34+WMel8S9Wt5pbLgG02oJ+gkgX5DV3sQ== + version "0.11.3" + resolved "https://registry.yarnpkg.com/ast-kit/-/ast-kit-0.11.3.tgz#47d420dbdd23b4900531e05285e89f0301d2c41f" + integrity sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA== dependencies: - "@babel/parser" "^7.22.14" - "@rollup/pluginutils" "^5.0.4" + "@babel/parser" "^7.23.5" + "@rollup/pluginutils" "^5.1.0" pathe "^1.1.1" ast-kit@^0.9.4, ast-kit@^0.9.5: @@ -3002,9 +3229,9 @@ astral-regex@^2.0.0: integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async@^3.2.0, async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -3016,18 +3243,28 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -automation-events@^6.0.1, automation-events@^6.0.8: - version "6.0.9" - resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.9.tgz#2fb5fba8a46c1a8f77c424540692f4f1b8d70b93" - integrity sha512-JEJzZRfRb26FMWR8zE2D/H/n5n+NNFZh1BtmDcpZVJOhLYKLGFCImBuxChRBhpZaOyIxqobPtM839amAeu2H9g== +automation-events@^6.0.13: + version "6.0.14" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-6.0.14.tgz#2e0a68760833a508ec2bab1df61986764a720668" + integrity sha512-CoxZlKaVDGfjdfOULxd6ws8gQ/WLCw7JXub4qb0LM55otKQL9j2BnlN07lT/0V75SGzLMOElfXpTvWqzzIHx0w== dependencies: - "@babel/runtime" "^7.22.6" - tslib "^2.6.1" + "@babel/runtime" "^7.23.8" + tslib "^2.6.2" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +automation-events@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/automation-events/-/automation-events-7.0.0.tgz#241ecfb2eac48a8e2ca1421bd60912665565213c" + integrity sha512-z2aGVy+pPbg3E619qRucLx5ZZqVFbcHCIF1vjx/0B3uQih5mUtuCtWEET+aYbG8Au12ikA5LTAhgoQJvGi3aWg== + dependencies: + "@babel/runtime" "^7.23.9" + tslib "^2.6.2" + +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" aws-sign2@~0.7.0: version "0.7.0" @@ -3044,14 +3281,6 @@ axios-auth-refresh@3.3.6: resolved "https://registry.yarnpkg.com/axios-auth-refresh/-/axios-auth-refresh-3.3.6.tgz#a879f6296a889d6616e51069c2a8135b697966e7" integrity sha512-2CeBUce/SxIfFxow5/n8vApJ97yYF6qoV4gh1UrswT7aEOnlOdBLxxyhOI4IaxGs6BY0l8YujU2jlc4aCmK17Q== -axios-mock-adapter@1.21.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/axios-mock-adapter/-/axios-mock-adapter-1.21.4.tgz#ced09b54b245b338422e3af425ae529bfa26e051" - integrity sha512-ztnENm28ONAKeRXC/6SUW6pcsaXbThKq93MRDRAA47LYTzrGSDoO/DCr1NHz7jApEl95DrBoGPvZ0r9xtSbjqw== - dependencies: - fast-deep-equal "^3.1.3" - is-buffer "^2.0.5" - axios@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.3.tgz#31a3d824c0ebf754a004b585e5f04a5f87e6c4ff" @@ -3062,37 +3291,37 @@ axios@1.2.3: proxy-from-env "^1.1.0" axios@>=0.13.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.5.0" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" - integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.31.0" + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.5.0" balanced-match@^1.0.0: version "1.0.2" @@ -3153,15 +3382,15 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.10, browserslist@^4.21.9: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== +browserslist@^4.22.2, browserslist@^4.22.3: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - 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" buffer-crc32@~0.2.3: version "0.2.13" @@ -3181,7 +3410,7 @@ buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.1.0: +builtin-modules@^3.1.0, builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== @@ -3210,64 +3439,59 @@ butterchurn@3.0.0-beta.4: ecma-proposal-math-extensions "0.0.2" eel-wasm "^0.0.15" -c8@^7.12.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" - integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.3" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.0" - istanbul-reports "^3.1.4" - rimraf "^3.0.2" - test-exclude "^6.0.0" - v8-to-istanbul "^9.0.0" - yargs "^16.2.0" - yargs-parser "^20.2.9" +cac@^6.7.12, cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== cachedir@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001517: - version "1.0.30001538" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz#9dbc6b9af1ff06b5eb12350c2012b3af56744f3f" - integrity sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw== +caniuse-lite@^1.0.30001587: + version "1.0.30001588" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz#07f16b65a7f95dba82377096923947fb25bce6e3" + integrity sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chai@^4.3.7: - version "4.3.8" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.8.tgz#40c59718ad6928da6629c70496fe990b2bb5b17c" - integrity sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ== +chai@^4.3.10: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== 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" chalk@^2.4.2: version "2.4.2" @@ -3286,10 +3510,12 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" check-more-types@^2.24.0: version "2.24.0" @@ -3297,9 +3523,9 @@ check-more-types@^2.24.0: integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -3311,10 +3537,10 @@ check-more-types@^2.24.0: optionalDependencies: fsevents "~2.3.2" -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== +ci-info@^3.2.0, ci-info@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-stack@^2.0.0: version "2.2.0" @@ -3328,6 +3554,11 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@~0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -3345,14 +3576,10 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== cliui@^8.0.1: version "8.0.1" @@ -3429,27 +3656,37 @@ common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== -core-js-compat@^3.31.0: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.3" core-util-is@1.0.2: version "1.0.2" @@ -3467,7 +3704,7 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3491,36 +3728,25 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== +cssstyle@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.0.1.tgz#ef29c598a1e90125c870525490ea4f354db0660a" + integrity sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ== dependencies: - cssom "~0.3.6" + rrweb-cssom "^0.6.0" -csstype@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@^3.1.2, csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -cypress@12.14.0: - version "12.14.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.14.0.tgz#37a19b85f5e9d881995e9fee1ddf41b3d3a623dd" - integrity sha512-HiLIXKXZaIT1RT7sw1sVPt+qKtis3uYNm6KwC4qoYjabwLKaqZlyS/P+uVvvlBNcHIwL/BC6nQZajpbUd7hOgQ== +cypress@13.6.4: + version "13.6.4" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.6.4.tgz#42c88d3ee0342f1681abfacabf9c1f082676bc53" + integrity sha512-pYJjCfDYB+hoOoZuhysbbYhEmNW7DEDsqn+ToCLwuVowxUXppIWRr7qk4TVRIU471ksfzyZcH+mkoF0CQUKnpw== dependencies: - "@cypress/request" "^2.88.10" + "@cypress/request" "^3.0.0" "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" arch "^2.2.0" @@ -3553,9 +3779,10 @@ cypress@12.14.0: minimist "^1.2.8" ospath "^1.2.2" pretty-bytes "^5.6.0" + process "^0.11.10" proxy-from-env "1.0.0" request-progress "^3.0.0" - semver "^7.3.2" + semver "^7.5.3" supports-color "^8.1.1" tmp "~0.2.1" untildify "^4.0.0" @@ -3568,14 +3795,13 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" dayjs@^1.10.4: version "1.11.10" @@ -3587,20 +3813,13 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.1.0, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3608,12 +3827,12 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -decimal.js@^10.4.2, decimal.js@^10.4.3: +decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -deep-eql@^4.1.2: +deep-eql@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== @@ -3630,21 +3849,21 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -3658,11 +3877,21 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff@5.1.0, diff@^5.1.0: +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3698,13 +3927,6 @@ domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" @@ -3712,12 +3934,17 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@2.4.7: - version "2.4.7" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" - integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== +dompurify@3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" + integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== -domutils@^3.0.1: +"dompurify@^2.4.3 || ^3.0.0": + version "3.0.9" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.9.tgz#b3f362f24b99f53498c75d43ecbd784b0b3ad65e" + integrity sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ== + +domutils@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== @@ -3751,10 +3978,10 @@ ejs@^3.1.6: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.477: - version "1.4.526" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.526.tgz#1bcda5f2b8238e497c20fcdb41af5da907a770e2" - integrity sha512-tjjTMjmZAx1g6COrintLTa2/jcafYKxKoiEkdQOrVdbLaHh2wCt2nsAF8ZHweezkrP+dl/VG9T5nabcYoo0U5Q== +electron-to-chromium@^1.4.668: + version "1.4.677" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.677.tgz#49ee77713516740bdde32ac2d1443c444f0dafe7" + integrity sha512-erDa3CaDzwJOpyvfKhOiJjBVNnMM0qxHq47RheVVwsSQrgBA9ZSGV9kdaOfZDPXcHzhG7lBxhj6A7KvfLJBd6Q== emoji-regex@^8.0.0: version "8.0.0" @@ -3776,7 +4003,7 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -3795,66 +4022,85 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" + typed-array-buffer "^1.0.1" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: +es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: - has "^1.0.3" + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-set-tostringtag@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -3865,66 +4111,44 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.17.5: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" +es6-promise@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== -esbuild@^0.18.10: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== +esbuild@^0.19.3: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== 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" + "@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" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@^1.0.5: version "1.0.5" @@ -3947,12 +4171,12 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-standard@17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" - integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== +eslint-compat-utils@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" + integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== -eslint-config-standard@^17.0.0: +eslint-config-standard@17.1.0, eslint-config-standard@^17.0.0: version "17.1.0" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== @@ -3965,7 +4189,7 @@ eslint-import-resolver-custom-alias@^1.3.0: glob-parent "^6.0.2" resolve "^1.22.2" -eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -3974,13 +4198,22 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.7: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.7.3, eslint-module-utils@^2.8.0: +eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" +eslint-plugin-es-x@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" + integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== + dependencies: + "@eslint-community/eslint-utils" "^4.1.2" + "@eslint-community/regexpp" "^4.6.0" + eslint-compat-utils "^0.1.2" + eslint-plugin-es@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" @@ -3997,68 +4230,52 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-html@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e" - integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg== +eslint-plugin-html@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-8.0.0.tgz#27f72f3c36718bcd54e3e0869ad7102ac368fd8b" + integrity sha512-NINLBAXM3mLa3k5Ezr/kNLHAJJwbot6lS7Ro+SUftDw4cA51KMmcDuCf98GP6Q6kTVPY1hIggzskxAdxfUPXSA== dependencies: - htmlparser2 "^8.0.1" + htmlparser2 "^9.1.0" -eslint-plugin-import@2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== +eslint-plugin-import@2.29.1, eslint-plugin-import@^2.26.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-import@^2.26.0: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" + eslint-import-resolver-node "^0.3.9" eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + hasown "^2.0.0" + is-core-module "^2.13.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" -eslint-plugin-n@15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz#f7e77f24abb92a550115cf11e29695da122c398c" - integrity sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA== +eslint-plugin-n@16.6.2: + version "16.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" + integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== dependencies: + "@eslint-community/eslint-utils" "^4.4.0" builtins "^5.0.1" - eslint-plugin-es "^4.1.0" - eslint-utils "^3.0.0" - ignore "^5.1.1" - is-core-module "^2.11.0" + eslint-plugin-es-x "^7.5.0" + get-tsconfig "^4.7.0" + globals "^13.24.0" + ignore "^5.2.4" + is-builtin-module "^3.2.1" + is-core-module "^2.12.1" minimatch "^3.1.2" - resolve "^1.22.1" - semver "^7.3.8" + resolve "^1.22.2" + semver "^7.5.3" eslint-plugin-n@^15.2.4: version "15.7.0" @@ -4091,28 +4308,20 @@ eslint-plugin-promise@6.1.1, eslint-plugin-promise@^6.0.0: resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== -eslint-plugin-vue@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.8.0.tgz#91de2aabbee8cdbef078ccd4f650a9ecfa445f4f" - integrity sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA== +eslint-plugin-vue@9.22.0: + version "9.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz#e8a625adb0b6ce3b65635dd74fec8345146f8e26" + integrity sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg== dependencies: - eslint-utils "^3.0.0" + "@eslint-community/eslint-utils" "^4.4.0" natural-compare "^1.4.0" - nth-check "^2.0.1" - postcss-selector-parser "^6.0.9" - semver "^7.3.5" - vue-eslint-parser "^9.0.1" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.15" + semver "^7.6.0" + vue-eslint-parser "^9.4.2" xml-name-validator "^4.0.0" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.1.1: +eslint-scope@^7.1.1, eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== @@ -4120,7 +4329,7 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.0.0, eslint-utils@^2.1.0: +eslint-utils@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== @@ -4134,7 +4343,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -4144,66 +4353,56 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.30.0: - version "8.30.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.30.0.tgz#83a506125d089eef7c5b5910eeea824273a33f50" - integrity sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ== +eslint@8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: - "@eslint/eslintrc" "^1.4.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" find-up "^5.0.0" glob-parent "^6.0.2" globals "^13.19.0" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: +espree@^9.0.0, espree@^9.3.1, espree@^9.4.0, espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== @@ -4212,12 +4411,12 @@ espree@^9.0.0, espree@^9.3.1, espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +esquery@^1.4.0, esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -4231,11 +4430,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -4246,11 +4440,18 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1, estree-walker@^2.0.2: +estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -4276,6 +4477,21 @@ execa@4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + executable@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -4314,10 +4530,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.12, fast-glob@^3.2.5, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.2.12, fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4335,10 +4551,15 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -4392,19 +4613,26 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== dependencies: - flatted "^3.2.7" + micromatch "^4.0.2" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== focus-trap@7.2.0: version "7.2.0" @@ -4413,15 +4641,15 @@ focus-trap@7.2.0: dependencies: tabbable "^6.0.1" -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +follow-redirects@^1.15.0, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== -fomantic-ui-css@2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.2.tgz#b445206bb0c1547ff05abbecc4725107749f7f54" - integrity sha512-D2KogymuA0t7z7zLoekSorgpOKil+q8y09sfYmWP1LcEA1WYRcMKdm5okjnxn4eopl8j45WBnWrkgtobNSbY2w== +fomantic-ui-css@2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/fomantic-ui-css/-/fomantic-ui-css-2.9.3.tgz#5ee927654be50b77abfaff77bc0b6735e1d7a09c" + integrity sha512-7bM6p3QRpfZFofg7Fd3crzox2E/nBsPyyWDN+N4lnTjNMxgKltSaXJTfhLoK5xBA+wEoNtcmm6w6FQ5Drj+27A== dependencies: jquery "^3.4.0" @@ -4432,14 +4660,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4463,7 +4683,7 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fs-extra@^9.0.1, fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -4478,15 +4698,15 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.6: version "1.1.6" @@ -4513,20 +4733,21 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -4540,13 +4761,26 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-tsconfig@^4.7.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" getos@^3.2.1: version "3.2.1" @@ -4624,10 +4858,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== +globals@^13.19.0, globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -4657,21 +4891,21 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql@^16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" + integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -4687,77 +4921,76 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.1.1" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -howler@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/howler/-/howler-2.2.3.tgz#a2eff9b08b586798e7a2ee17a602a90df28715da" - integrity sha512-QM0FFkw0LRX1PR8pNzJVAY25JhIWvbKMBFM4gqk+QdV+kPXOhleWGCB6AiAF/goGjIHK2e/nIElplvjQwhr0jg== +headers-polyfill@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a" + integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw== -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== dependencies: - whatwg-encoding "^2.0.0" + whatwg-encoding "^3.1.1" html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== dependencies: domelementtype "^2.3.0" domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" + domutils "^3.1.0" + entities "^4.5.0" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" + agent-base "^7.1.0" + debug "^4.3.4" http-signature@~1.3.6: version "1.3.6" @@ -4768,12 +5001,17 @@ http-signature@~1.3.6: jsprim "^2.0.2" sshpk "^1.14.1" -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +http2-client@^1.2.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181" + integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA== + +https-proxy-agent@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== dependencies: - agent-base "6" + agent-base "^7.0.2" debug "4" human-signals@^1.1.1: @@ -4781,6 +5019,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -4803,17 +5046,17 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.0.5, ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immutable@^4.0.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -4849,23 +5092,22 @@ ini@2.0.0: resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.0.5, internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" @@ -4894,10 +5136,12 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" @@ -4911,12 +5155,12 @@ is-ci@^3.0.0: dependencies: ci-info "^3.2.0" -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.8.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.11.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1: version "1.0.5" @@ -4968,9 +5212,14 @@ is-module@^1.0.0: integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== is-number-object@^1.0.4: version "1.0.7" @@ -5013,17 +5262,22 @@ is-regexp@^1.0.0: integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -5038,12 +5292,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.14" is-typedarray@~1.0.0: version "1.0.0" @@ -5062,18 +5316,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-wsl@^2.2.0: +is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -5089,12 +5338,12 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-report@^3.0.0: +istanbul-lib-report@^3.0.0, istanbul-lib-report@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== @@ -5103,10 +5352,19 @@ istanbul-lib-report@^3.0.0: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-reports@^3.1.4: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.6: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -5135,16 +5393,24 @@ jquery@^3.4.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^8.0.2: + version "8.0.3" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-8.0.3.tgz#1c407ec905643603b38b6be6977300406ec48775" + integrity sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.0.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -5157,37 +5423,32 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" - integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== +jsdom@24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.0.0.tgz#e2dc04e4c79da368481659818ee2b0cd7c39007c" + integrity sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A== dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" + cssstyle "^4.0.1" + data-urls "^5.0.0" + decimal.js "^10.4.3" form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.2" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" + nwsapi "^2.2.7" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" + tough-cookie "^4.1.3" + w3c-xmlserializer "^5.0.0" webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + ws "^8.16.0" + xml-name-validator "^5.0.0" jsesc@^2.5.1: version "2.5.2" @@ -5229,6 +5490,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stable-stringify@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -5246,36 +5517,20 @@ json5@^2.1.3, json5@^2.2.0, json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-eslint-parser@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" - integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== +jsonc-eslint-parser@2.4.0, jsonc-eslint-parser@^2.0.0, jsonc-eslint-parser@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" + integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== dependencies: acorn "^8.5.0" eslint-visitor-keys "^3.0.0" espree "^9.0.0" semver "^7.3.5" -jsonc-eslint-parser@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6" - integrity sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg== - dependencies: - acorn "^7.4.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^1.3.0" - espree "^6.0.0" - semver "^6.3.0" - -jsonc-eslint-parser@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.3.0.tgz#7c2de97d01bff7227cbef2f25d1025d42a36198b" - integrity sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ== - dependencies: - acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" - semver "^7.3.5" +jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== jsonfile@^6.0.1: version "6.1.0" @@ -5286,6 +5541,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonpointer@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" @@ -5301,18 +5561,25 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" -just-extend@^4.0.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" - integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== +just-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" + integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -5350,11 +5617,19 @@ listr2@^3.8.3: through "^2.3.8" wrap-ansi "^7.0.0" -local-pkg@^0.4.2, local-pkg@^0.4.3: +local-pkg@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== +local-pkg@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.0.tgz#093d25a346bae59a99f80e75f6e9d36d7e8c925c" + integrity sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg== + dependencies: + mlly "^1.4.2" + pkg-types "^1.0.3" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -5420,17 +5695,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +loupe@^2.3.6, loupe@^2.3.7: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" -lru-cache@7.14.1: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== +lru-cache@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== lru-cache@^5.1.1: version "5.1.1" @@ -5460,20 +5735,22 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -magic-string@^0.30.0, magic-string@^0.30.2: - version "0.30.3" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" - integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== +magic-string@^0.30.0, magic-string@^0.30.2, magic-string@^0.30.3, magic-string@^0.30.5, magic-string@^0.30.6: + version "0.30.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" + integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magicast@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.3.tgz#a15760f982deec9dabc5f314e318d7c6bddcb27b" + integrity sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw== + dependencies: + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + source-map-js "^1.0.2" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -5491,7 +5768,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -5516,6 +5793,18 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -5530,13 +5819,6 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -5547,20 +5829,25 @@ mitt@^2.1.0: resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230" integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg== +mlly@^1.2.0, mlly@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" + integrity sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ== + dependencies: + acorn "^8.11.3" + pathe "^1.1.2" + pkg-types "^1.0.3" + ufo "^1.3.2" + moment@2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: +mrmime@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.1.2: version "2.1.2" @@ -5572,25 +5859,55 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -muggle-string@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.2.2.tgz#786aa53fea1652c61c6a59e1f839292b262bc72a" - integrity sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg== +msw-auto-mock@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/msw-auto-mock/-/msw-auto-mock-0.18.0.tgz#2d67d01aa1d2454a55e4efa53caea51b0c055136" + integrity sha512-mFpsq+EM2W05Vb07VMRbJJarahUtxzq4hapwUYhoLM5MtU6tM2D5tRK9xEP7hBRZc6rWT+tfCwvjB0KhxoNEPQ== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + cac "^6.7.12" + lodash "^4.17.21" + oazapfts "^4.5.2" + prettier "3.1.0" + swagger2openapi "^7.0.8" + +msw@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.2.1.tgz#5ece7ee81331aabe632fe331f07e71e8a3949499" + integrity sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w== + dependencies: + "@bundled-es-modules/cookie" "^2.0.0" + "@bundled-es-modules/statuses" "^1.0.1" + "@inquirer/confirm" "^3.0.0" + "@mswjs/cookies" "^1.1.0" + "@mswjs/interceptors" "^0.25.16" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + chalk "^4.1.2" + graphql "^16.8.1" + headers-polyfill "^4.0.2" + is-node-process "^1.2.0" + outvariant "^1.4.2" + path-to-regexp "^6.2.0" + strict-event-emitter "^0.5.1" + type-fest "^4.9.0" + yargs "^17.7.2" muggle-string@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.3.1.tgz#e524312eb1728c63dd0b2ac49e3282e6ed85963a" integrity sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg== -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare@^1.4.0: version "1.4.0" @@ -5598,20 +5915,41 @@ natural-compare@^1.4.0: integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nise@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" - integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== + version "5.1.9" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.9.tgz#0cb73b5e4499d738231a473cd89bd8afbb618139" + integrity sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww== dependencies: - "@sinonjs/commons" "^2.0.0" - "@sinonjs/fake-timers" "^10.0.2" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - path-to-regexp "^1.7.0" + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^11.2.2" + "@sinonjs/text-encoding" "^0.7.2" + just-extend "^6.2.0" + path-to-regexp "^6.2.1" -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-fetch-h2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac" + integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg== + dependencies: + http2-client "^1.2.5" + +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-readfiles@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d" + integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA== + dependencies: + es6-promise "^3.2.1" + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -5625,39 +5963,103 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -nth-check@^2.0.1: +npm-run-path@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" + integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + dependencies: + path-key "^4.0.0" + +nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" -nwsapi@^2.2.2: +nwsapi@^2.2.7: version "2.2.7" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +oas-kit-common@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535" + integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ== + dependencies: + fast-safe-stringify "^2.0.7" + +oas-linter@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e" + integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ== + dependencies: + "@exodus/schemasafe" "^1.0.0-rc.2" + should "^13.2.1" + yaml "^1.10.0" + +oas-resolver@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b" + integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ== + dependencies: + node-fetch-h2 "^2.3.0" + oas-kit-common "^1.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + +oas-schema-walker@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22" + integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ== + +oas-validator@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28" + integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw== + dependencies: + call-me-maybe "^1.0.1" + oas-kit-common "^1.0.8" + oas-linter "^3.2.2" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + reftools "^1.1.9" + should "^13.2.1" + yaml "^1.10.0" + +oazapfts@^4.5.2: + version "4.12.0" + resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-4.12.0.tgz#8a86c5fe5a1237b16b05d06d05815cffa2a2b949" + integrity sha512-hNKRG4eLYceuJuqDDx7Uqsi8p3j5k83gNKSo2qnUOTiiU03sCQOjXxOqCXDbzRcuDFyK94+1PBIpotK4NoxIjw== + dependencies: + "@apidevtools/swagger-parser" "^10.1.0" + lodash "^4.17.21" + minimist "^1.2.8" + swagger2openapi "^7.0.8" + typescript "^5.2.2" + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" -object.fromentries@^2.0.6: +object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -5666,17 +6068,18 @@ object.fromentries@^2.0.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== +object.groupby@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" -object.values@^1.1.5, object.values@^1.1.6: +object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -5699,6 +6102,21 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -5708,7 +6126,7 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.9.1: +optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== @@ -5720,11 +6138,21 @@ optionator@^0.9.1: prelude-ls "^1.2.1" type-check "^0.4.0" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== +outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" + integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -5732,6 +6160,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-limit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985" + integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -5775,13 +6210,39 @@ parse5-htmlparser2-tree-adapter@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^7.0.0, parse5@^7.1.1: +parse5@^7.0.0, parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" +patch-package@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" + integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^9.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + rimraf "^2.6.3" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.0.33" + yaml "^2.2.2" + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -5797,27 +6258,30 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" +path-to-regexp@^6.2.0, path-to-regexp@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" + integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.0.0, pathe@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== +pathe@^1.0.0, pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== pathval@^1.1.1: version "1.1.1" @@ -5849,6 +6313,15 @@ pify@^2.2.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + pofile@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" @@ -5859,20 +6332,25 @@ pofile@^1.1.3: resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.4.tgz#eab7e29f5017589b2a61b2259dff608c0cad76a2" integrity sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g== -postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss-selector-parser@^6.0.15: + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.1.10, postcss@^8.4.23, postcss@^8.4.27: - version "8.4.30" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" - integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== +postcss@^8.4.32, postcss@^8.4.33, postcss@^8.4.35: + version "8.4.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" + integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== dependencies: - nanoid "^3.3.6" + nanoid "^3.3.7" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -5881,6 +6359,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + pretty-bytes@^5.3.0, pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -5891,6 +6374,20 @@ pretty-bytes@^6.0.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-6.1.1.tgz#38cd6bb46f47afbf667c202cfc754bffd2016a3b" integrity sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + proxy-from-env@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" @@ -5914,15 +6411,15 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@~6.10.3: - version "6.10.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== +qs@6.10.4: + version "6.10.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.4.tgz#6a3003755add91c0ec9eacdc5f878b034e73f9e7" + integrity sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g== dependencies: side-channel "^1.0.4" @@ -5943,6 +6440,11 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -5950,6 +6452,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reftools@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e" + integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w== + regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" @@ -5963,9 +6470,9 @@ regenerate@^1.4.2: integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -5974,16 +6481,17 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" -regexpp@^3.0.0, regexpp@^3.2.0: +regexpp@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -6034,15 +6542,20 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve.exports@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== +resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" @@ -6062,9 +6575,16 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -6100,13 +6620,45 @@ rollup@^2.43.1: optionalDependencies: fsevents "~2.3.2" -rollup@^3.21.0, rollup@^3.27.1, rollup@^3.29.1, rollup@^3.7.2: - version "3.29.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" - integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== +rollup@^3.29.1, rollup@^3.7.2: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: fsevents "~2.3.2" +rollup@^4.2.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" + integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== + dependencies: + "@types/estree" "1.0.5" + 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" + +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6121,13 +6673,13 @@ rxjs@^7.5.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + get-intrinsic "^1.2.2" has-symbols "^1.0.3" isarray "^2.0.5" @@ -6136,13 +6688,13 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: @@ -6166,15 +6718,15 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.1.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.0.0, semver@^7.3.4, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -6185,14 +6737,27 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" shebang-command@^2.0.0: version "2.0.0" @@ -6206,7 +6771,51 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -showdown@2.1.0: +should-equal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" + integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA== + dependencies: + should-type "^1.4.0" + +should-format@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1" + integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q== + dependencies: + should-type "^1.3.0" + should-type-adaptors "^1.0.1" + +should-type-adaptors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a" + integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA== + dependencies: + should-type "^1.3.0" + should-util "^1.0.0" + +should-type@^1.3.0, should-type@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3" + integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ== + +should-util@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28" + integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g== + +should@^13.2.1: + version "13.2.3" + resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10" + integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ== + dependencies: + should-equal "^2.0.0" + should-format "^3.0.3" + should-type "^1.4.0" + should-type-adaptors "^1.0.1" + should-util "^1.0.0" + +showdown@2.1.0, showdown@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== @@ -6219,19 +6828,30 @@ shvl@^2.0.3: integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sinon@15.0.2: version "15.0.2" resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.2.tgz#f3e3aacb990bbaa8a7bb976e86118c5dc0154e66" @@ -6244,10 +6864,10 @@ sinon@15.0.2: nise "^5.1.4" supports-color "^7.2.0" -sinon@^15.0.4: - version "15.2.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.2.0.tgz#5e44d4bc5a9b5d993871137fd3560bebfac27565" - integrity sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw== +sinon@^16.0.0: + version "16.1.3" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-16.1.3.tgz#b760ddafe785356e2847502657b4a0da5501fba8" + integrity sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA== dependencies: "@sinonjs/commons" "^3.0.0" "@sinonjs/fake-timers" "^10.3.0" @@ -6257,14 +6877,19 @@ sinon@^15.0.4: supports-color "^7.2.0" sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" totalist "^3.0.0" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -6293,7 +6918,7 @@ sortablejs@1.14.0: resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8" integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -6311,7 +6936,7 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6333,10 +6958,15 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -6355,6 +6985,11 @@ stack-generator@^2.0.5: dependencies: stackframe "^1.3.4" +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + stackframe@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" @@ -6377,35 +7012,50 @@ stacktrace-js@2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" -standardized-audio-context-mock@9.6.18: - version "9.6.18" - resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.18.tgz#0b2dc9039a0f923a64012cf53407072a7e05c62e" - integrity sha512-yUaPX9qdRRKTxkS9h3QvKd+OQ7nRoIKj0cVg/9D6ugQynvRczJIS6KMTZcigi2OfwOKI3X0Gy1aKZC5YUl79Tw== +standardized-audio-context-mock@9.6.32: + version "9.6.32" + resolved "https://registry.yarnpkg.com/standardized-audio-context-mock/-/standardized-audio-context-mock-9.6.32.tgz#ede90e8f0620c86d7b7d042e16f2a44b1ec864aa" + integrity sha512-x9/SWuzcTZ4WT9gk4bdww+/9FmK/jbRgoKcPHg2VieKx/wZVaPUcgwDWm7rISDJCuVaNUGcNcMf3lzvLid8kMA== dependencies: - "@babel/runtime" "^7.21.5" - automation-events "^6.0.1" - sinon "^15.0.4" - standardized-audio-context "^25.3.46" - tslib "^2.5.0" - vehicles "^9.0.1" + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + sinon "^16.0.0" + standardized-audio-context "^25.3.60" + tslib "^2.6.2" + vehicles "^9.0.14" -standardized-audio-context@25.3.55: - version "25.3.55" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.55.tgz#4d87ea6052de80ecf5abf56eb71ecd71f7e52e4e" - integrity sha512-ym9g7FZ5S1FykbQ1///ktTJgk+zTtGF1hGR/BFRQjRkN6G2Xy9GbL5kOcM7DlzflV2yJtqVwfU2gL042b1oHwg== +standardized-audio-context@25.3.60: + version "25.3.60" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.60.tgz#f37a0e35bac7ca230dd44fc66efb28949f6bb864" + integrity sha512-h4ntLsHqnRESxyuU4C5/gvZTBqjBw1SoAR5lsQbqXPI4R3KKZTJWnMMpnRdiySr7cXokbEcepaPGGQ1V+UwlLw== dependencies: - "@babel/runtime" "^7.22.6" - automation-events "^6.0.8" - tslib "^2.6.1" + "@babel/runtime" "^7.23.5" + automation-events "^6.0.13" + tslib "^2.6.2" -standardized-audio-context@^25.3.46: - version "25.3.56" - resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.56.tgz#5db0b1b4092708c633aed9b054a7c7ff19708777" - integrity sha512-f9pubvL/vilyGTQNa73dLX7bIa8V3XzBmKbfrgFF8Ac0EVdO2vIVQy9MSNDe/0pCot6ZxCxCzvVlHnEVHl8nRQ== +standardized-audio-context@^25.3.60: + version "25.3.64" + resolved "https://registry.yarnpkg.com/standardized-audio-context/-/standardized-audio-context-25.3.64.tgz#bbbe9b31fef5537b0901c0f8a6ae4fd06bfc97c1" + integrity sha512-yo4SvErg1MWIYsAJ+nX18gLTacffBQ0DaJWBqFI63jao9Ue2EOriad4FKM3xQlWc85NPHMm4pJ2XnvdTAN05iw== dependencies: - "@babel/runtime" "^7.22.6" - automation-events "^6.0.8" - tslib "^2.6.1" + "@babel/runtime" "^7.23.9" + automation-events "^7.0.0" + tslib "^2.6.2" + +statuses@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +std-env@^3.5.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" @@ -6489,17 +7139,22 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07" - integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== +strip-literal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.0.0.tgz#5d063580933e4e03ebb669b12db64d2200687527" + integrity sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA== dependencies: - acorn "^8.10.0" + js-tokens "^8.0.2" supports-color@^5.3.0: version "5.5.0" @@ -6527,6 +7182,23 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +swagger2openapi@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59" + integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g== + dependencies: + call-me-maybe "^1.0.1" + node-fetch "^2.6.1" + node-fetch-h2 "^2.3.0" + node-readfiles "^0.2.0" + oas-kit-common "^1.0.8" + oas-resolver "^2.5.6" + oas-schema-walker "^1.1.5" + oas-validator "^5.0.8" + reftools "^1.1.9" + yaml "^1.10.0" + yargs "^17.0.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -6553,9 +7225,9 @@ tempy@^0.6.0: unique-string "^2.0.0" terser@^5.0.0: - version "5.20.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.20.0.tgz#ea42aea62578703e33def47d5c5b93c49772423e" - integrity sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ== + version "5.27.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.27.2.tgz#577a362515ff5635f98ba149643793a3973ba77e" + integrity sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -6582,29 +7254,36 @@ text-table@^0.2.0: integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinybench@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.1.tgz#3408f6552125e53a5a48adee31261686fd71587e" - integrity sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== +tinybench@^2.5.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b" + integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA== -tinypool@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" - integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== +tinypool@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.2.tgz#84013b03dc69dacb322563a475d4c0a9be00f82a" + integrity sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ== -tinyspy@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" - integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== +tinyspy@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1" + integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" tmp@~0.2.1: version "0.2.1" @@ -6630,7 +7309,7 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^4.1.2, tough-cookie@^4.1.3: +tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -6647,47 +7326,50 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== +tr46@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" + integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== dependencies: - punycode "^2.1.1" + punycode "^2.3.1" -transliteration@2.3.5: +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +transliteration@2.3.5, transliteration@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/transliteration/-/transliteration-2.3.5.tgz#8f92309575f69e4a8a525dab4ff705ebcf961c45" integrity sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw== dependencies: yargs "^17.5.1" -tsconfig-paths@^3.14.1, tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +ts-api-utils@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" + integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.3: +tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1: +tslib@^2.1.0, tslib@^2.4.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6707,7 +7389,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -6727,60 +7409,70 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +type-fest@^4.9.0: + version "4.10.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738" + integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw== + +typed-array-buffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" -"typescript@4 - 5": - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +"typescript@4 - 5", typescript@5.3.3, typescript@^5.2.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== typical@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== +ufo@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" + integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -6791,6 +7483,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -6835,9 +7532,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unplugin-combine@^0.7.0: version "0.7.0" @@ -6886,15 +7583,15 @@ unplugin-vue-macros@2.4.6: unplugin-combine "^0.7.0" unplugin-vue-define-options "1.3.15" -unplugin@^1.0.0, unplugin@^1.3.2, unplugin@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" - integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== +unplugin@^1.1.0, unplugin@^1.3.2, unplugin@^1.4.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.7.1.tgz#009571e3128640f4e327f33680d2db27afaf1e11" + integrity sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw== dependencies: - acorn "^8.10.0" + acorn "^8.11.3" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.5.0" + webpack-virtual-modules "^0.6.1" untildify@^4.0.0: version "4.0.0" @@ -6906,10 +7603,10 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.11: - version "1.0.12" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.12.tgz#868ce670ac09b4a4d4c86b608701c0dee2dc41cd" - integrity sha512-tE1smlR58jxbFMtrMpFNRmsrOXlpNXss965T1CrpwuZUzUAg/TBQc94SpyhDLSzrqrJS9xTRBthnZAGcE1oaxg== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -6944,23 +7641,23 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-to-istanbul@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== +v8-to-istanbul@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== 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" -vehicles@^9.0.1: - version "9.0.10" - resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.10.tgz#498e672d5a2a2f30963e31711b4aaaa07c3b729b" - integrity sha512-sgXuXFwDIZqAq8IpoYkgKjM4jsv2K/1I7FJDwj7Wxs8dxR7BDOEyIBhyOxP5jNjQSsnF6+hRsvhhTX7QqaU7Hg== +vehicles@^9.0.14: + version "9.0.16" + resolved "https://registry.yarnpkg.com/vehicles/-/vehicles-9.0.16.tgz#1dfab80d21a3991dff7f4a0bc584bd652fb37b84" + integrity sha512-N+oxZfO3QMwUA5fuO1vCLJhAZQyDKVtV3Z4Nv/6LUu3p/tSygSHX28O/QeJM1aY+qZnewy+vWY+4uiJrL/mZEg== dependencies: - "@babel/runtime" "^7.22.10" + "@babel/runtime" "^7.23.8" decimal.js "^10.4.3" - tslib "^2.6.1" + tslib "^2.6.2" verror@1.10.0: version "1.10.0" @@ -6971,6 +7668,17 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite-node@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.3.1.tgz#a93f7372212f5d5df38e945046b945ac3f4855d2" + integrity sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + pathe "^1.1.1" + picocolors "^1.0.0" + vite "^5.0.0" + vite-plugin-pwa@0.14.4: version "0.14.4" resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.14.4.tgz#d83fae9e85ab4a082e11ab475b3ec124bfe49084" @@ -6984,62 +7692,68 @@ vite-plugin-pwa@0.14.4: workbox-build "^6.5.4" workbox-window "^6.5.4" -vite@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.5.tgz#3871fe0f4b582ea7f49a85386ac80e84826367d9" - integrity sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA== +vite@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.3.tgz#dd072653a80225702265550a4700561740dfde55" + integrity sha512-UfmUD36DKkqhi/F75RrxvPpry+9+tTkrXfMNZD+SboZqBCMsxKtO52XeGzzuh7ioz+Eo/SYDBbdb0Z7vgcDJew== dependencies: - esbuild "^0.17.5" - postcss "^8.4.23" - rollup "^3.21.0" + esbuild "^0.19.3" + postcss "^8.4.35" + rollup "^4.2.0" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.3.3" -"vite@^3.0.0 || ^4.0.0": - version "4.4.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" - integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== +vite@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.4.tgz#14e9d3e7a6e488f36284ef13cebe149f060bcfb6" + integrity sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg== 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" optionalDependencies: - fsevents "~2.3.2" + fsevents "~2.3.3" -vitest@0.25.8: - version "0.25.8" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.8.tgz#9b57e0b41cd6f2d2d92aa94a39b35c36f715f8cc" - integrity sha512-X75TApG2wZTJn299E/TIYevr4E9/nBo1sUtZzn0Ci5oK8qnpZAZyhwg0qCeMSakGIWtc6oRwcQFyFfW14aOFWg== +vitest@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.3.1.tgz#2d7e9861f030d88a4669392a4aecb40569d90937" + integrity sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ== dependencies: - "@types/chai" "^4.3.4" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - acorn "^8.8.1" - acorn-walk "^8.2.0" - chai "^4.3.7" + "@vitest/expect" "1.3.1" + "@vitest/runner" "1.3.1" + "@vitest/snapshot" "1.3.1" + "@vitest/spy" "1.3.1" + "@vitest/utils" "1.3.1" + acorn-walk "^8.3.2" + chai "^4.3.10" debug "^4.3.4" - local-pkg "^0.4.2" - source-map "^0.6.1" - strip-literal "^1.0.0" - tinybench "^2.3.1" - tinypool "^0.3.0" - tinyspy "^1.0.2" - vite "^3.0.0 || ^4.0.0" + execa "^8.0.1" + local-pkg "^0.5.0" + magic-string "^0.30.5" + pathe "^1.1.1" + picocolors "^1.0.0" + std-env "^3.5.0" + strip-literal "^2.0.0" + tinybench "^2.5.1" + tinypool "^0.8.2" + vite "^5.0.0" + vite-node "1.3.1" + why-is-node-running "^2.2.2" vue-demi@>=0.14.5: - version "0.14.6" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92" - integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== + version "0.14.7" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2" + integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA== vue-demi@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.12.5.tgz#8eeed566a7d86eb090209a11723f887d28aeb2d1" integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q== -vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.0.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz#429955e041ae5371df5f9e37ebc29ba046496182" - integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g== +vue-eslint-parser@^9.0.0, vue-eslint-parser@^9.3.1, vue-eslint-parser@^9.4.2: + version "9.4.2" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" + integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== dependencies: debug "^4.3.4" eslint-scope "^7.1.1" @@ -7054,14 +7768,13 @@ vue-gettext@2.1.12: resolved "https://registry.yarnpkg.com/vue-gettext/-/vue-gettext-2.1.12.tgz#444d3220149b17fa4c7caeded3f12d439b698f33" integrity sha512-7Kw36xtKvARp8ZafQGPK9WR6EM+dhFUikR5f0+etSkiHuvUM3yf1HsRDLYoLLdJ0AMaXxKwgekumzvCk6KX8rA== -vue-i18n@9.3.0-beta.19: - version "9.3.0-beta.19" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.3.0-beta.19.tgz#d660d9b342322d8c3ae62965bf6957ff8e52607b" - integrity sha512-1pbEcoAbxaAPuR5hODnQJ5CtIimnVD+aUVnCztuuRaOZPLP1i4FxkWVvb1lu8JIRC5pePyODZxi3yoy3PUYheA== +vue-i18n@9.9.1: + version "9.9.1" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.9.1.tgz#3c2fdf3c9db430572a1246439d541d01e2795c06" + integrity sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw== dependencies: - "@intlify/core-base" "9.3.0-beta.19" - "@intlify/shared" "9.3.0-beta.19" - "@intlify/vue-devtools" "9.3.0-beta.19" + "@intlify/core-base" "9.9.1" + "@intlify/shared" "9.9.1" "@vue/devtools-api" "^6.5.0" vue-observe-visibility@^2.0.0-alpha.1: @@ -7074,29 +7787,29 @@ vue-resize@^2.0.0-alpha.1: resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a" integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg== -vue-router@4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.2.tgz#b0097b66d89ca81c0986be03da244c7b32a4fd81" - integrity sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ== +vue-router@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a" + integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw== dependencies: "@vue/devtools-api" "^6.5.0" vue-template-compiler@^2.7.14: - version "2.7.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== + version "2.7.16" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== dependencies: de-indent "^1.0.2" he "^1.2.0" -vue-tsc@1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.6.5.tgz#cd18804b12087c300b6c9ee2a1da41a63f11103e" - integrity sha512-Wtw3J7CC+JM2OR56huRd5iKlvFWpvDiU+fO1+rqyu4V2nMTotShz4zbOZpW5g9fUOcjnyZYfBo5q5q+D/q27JA== +vue-tsc@1.8.27: + version "1.8.27" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-1.8.27.tgz#feb2bb1eef9be28017bb9e95e2bbd1ebdd48481c" + integrity sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg== dependencies: - "@volar/vue-language-core" "1.6.5" - "@volar/vue-typescript" "1.6.5" - semver "^7.3.8" + "@volar/typescript" "~1.11.1" + "@vue/language-core" "1.8.27" + semver "^7.5.4" vue-upload-component@3.1.8: version "3.1.8" @@ -7134,27 +7847,27 @@ vue3-lazyload@0.3.8: dependencies: vue-demi "^0.12.5" -vue@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.2.tgz#407f0057a7a154d836b66f94ce81779d0c2cafbc" - integrity sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA== +vue@3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.11.tgz#898d97025f73cdb5fc4e3ae3fd07a54615232140" + integrity sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w== dependencies: - "@vue/compiler-dom" "3.3.2" - "@vue/compiler-sfc" "3.3.2" - "@vue/runtime-dom" "3.3.2" - "@vue/server-renderer" "3.3.2" - "@vue/shared" "3.3.2" + "@vue/compiler-dom" "3.3.11" + "@vue/compiler-sfc" "3.3.11" + "@vue/runtime-dom" "3.3.11" + "@vue/server-renderer" "3.3.11" + "@vue/shared" "3.3.11" -vue@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6" - integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw== +vue@^3.3.7: + version "3.4.19" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.19.tgz#f9ae0a44db86628548736ff04152830726a97263" + integrity sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw== 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" + "@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" vuedraggable@4.1.0: version "4.1.0" @@ -7183,12 +7896,17 @@ vuex@4.1.0: dependencies: "@vue/devtools-api" "^6.0.0-beta.11" -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== dependencies: - xml-name-validator "^4.0.0" + xml-name-validator "^5.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^4.0.2: version "4.0.2" @@ -7205,31 +7923,39 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" - integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== dependencies: iconv-lite "0.6.3" -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== +whatwg-url@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.0.0.tgz#00baaa7fd198744910c4b1ef68378f2200e4ceb6" + integrity sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw== dependencies: - tr46 "^3.0.0" + tr46 "^5.0.0" webidl-conversions "^7.0.0" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -7250,16 +7976,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.1" which@^2.0.1: version "2.0.2" @@ -7268,6 +7994,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + workbox-background-sync@6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" @@ -7477,16 +8211,21 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.11.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xml-name-validator@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -7507,16 +8246,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml-eslint-parser@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz#c7f5f3904f1c06ad55dc7131a731b018426b4898" - integrity sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg== - dependencies: - eslint-visitor-keys "^1.3.0" - lodash "^4.17.20" - yaml "^1.10.0" - -yaml-eslint-parser@^1.0.0: +yaml-eslint-parser@^1.0.0, yaml-eslint-parser@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz#1a9673ebe254328cfc2fa99f297f6d8c9364ccd8" integrity sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg== @@ -7531,34 +8261,21 @@ yaml@^1.10.0: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@^20.2.2, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yaml@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.0.tgz#2376db1083d157f4b3a452995803dbcf43b08140" + integrity sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.5.1: +yargs@^17.0.1, yargs@^17.5.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -7583,3 +8300,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== diff --git a/scripts/ci-upload-packages.sh b/scripts/ci-upload-packages.sh new file mode 100755 index 000000000..d63594663 --- /dev/null +++ b/scripts/ci-upload-packages.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# Make sure that https://docs.gitlab.com/ee/user/packages/generic_packages/#do-not-allow-duplicate-generic-packages +# is enabled + +set -eu + +error() { + echo >&2 "error: $*" + exit 1 +} + +command -v curl > /dev/null || error "curl command not found!" + +PACKAGE_REGISTRY_URL="$CI_API_V4_URL/projects/$CI_PROJECT_ID/packages/generic" +PACKAGE_NAME="funkwhale" +PACKAGE_VERSION="$CI_COMMIT_REF_NAME" + +# publish_asset <asset> <file> +publish_asset() { + echo "publishing release asset $asset" + curl \ + --fail \ + --show-error \ + --header "JOB-TOKEN: $CI_JOB_TOKEN" \ + --upload-file "$2" \ + "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" + echo +} + +# release_asset_json <asset> +release_asset_json() { + printf '{"name": "%s", "url": "%s", "link_type": "package"}' \ + "$1" \ + "$PACKAGE_REGISTRY_URL/$PACKAGE_NAME/$PACKAGE_VERSION/$1" +} + +release_assets=() +for asset_path in dist/*; do + asset="$(basename "$asset_path")" + publish_asset "$asset" "$asset_path" + release_assets+=("$(release_asset_json "$asset")") +done diff --git a/scripts/compile-templates.py b/scripts/compile-templates.py new file mode 100644 index 000000000..596e7bb70 --- /dev/null +++ b/scripts/compile-templates.py @@ -0,0 +1,38 @@ +from jinja2 import Environment, FileSystemLoader + +file_loader = FileSystemLoader("templates") +env = Environment( + loader=file_loader, trim_blocks=True, lstrip_blocks=True, keep_trailing_newline=True +) + +files = [ + { + "output": "docker/nginx/conf.dev", + "config": {"proxy_frontend": True, "inside_docker": True}, + }, + { + "output": "front/docker/funkwhale.conf.template", + "config": {"proxy_frontend": False, "inside_docker": True}, + }, + { + "output": "deploy/nginx.template", + "config": {"proxy_frontend": False, "inside_docker": False}, + }, + { + "output": "deploy/docker.proxy.template", + "config": { + "proxy_frontend": False, + "inside_docker": False, + "reverse_proxy": True, + }, + }, +] + +template = env.get_template("nginx.conf.j2") +for f in files: + print(f["output"]) + output = template.render(config=f["config"]) + + output_file = open(f["output"], "w") + output_file.write(output) + output_file.close() diff --git a/scripts/releases.py b/scripts/releases.py new file mode 100755 index 000000000..fe9abb6f1 --- /dev/null +++ b/scripts/releases.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 + +import json +import logging +from argparse import ArgumentParser +from functools import reduce +from operator import getitem +from subprocess import check_output +from typing import Dict, List + +from packaging.version import InvalidVersion, Version + +logger = logging.getLogger(__name__) + + +def get_releases() -> List[Dict[str, str]]: + """ + Gather all releases from git tags, sorted by version. + Do not include pre releases. + """ + output = check_output( + [ + *("git", "tag", "-l"), + "--format=%(creatordate:iso-strict)|%(refname:short)", + "--sort=v:refname", # sort by refname (version sort, not lexicographic) + ], + text=True, + ) + + result = [] + for line in output.splitlines(): + date, _, ref = line.partition("|") + try: + version = Version(ref) + if version.pre is not None: + logger.warning("ignoring pre release: %s", version) + continue + + except InvalidVersion as exception: + logger.error("ignoring invalid release: %s", exception) + continue + + result.append({"id": ref, "date": date}) + return list(reversed(result)) + + +def resolve_query(haystack, needle: str): + if isinstance(haystack, list): + needle = int(needle) + return getitem(haystack, needle) + + +def main(query: str = None, raw: bool = False) -> int: + releases = get_releases() + data = { + "count": len(releases), + "latest": releases[0], + "releases": releases, + } + + if query is not None: + parts = query.split(".") + result = reduce(resolve_query, parts, data) + else: + result = data + + if raw: + print(result) + else: + print(json.dumps(result, indent=2)) + + return 0 + + +if __name__ == "__main__": + parser = ArgumentParser("Compile releases data") + parser.add_argument( + "-q", + "--query", + help="Query a specific data", + ) + parser.add_argument( + "-r", + "--raw", + action="store_true", + help="Output raw data", + ) + args = parser.parse_args() + raise SystemExit(main(query=args.query, raw=args.raw)) diff --git a/scripts/releases_test.py b/scripts/releases_test.py new file mode 100755 index 000000000..102b82ba5 --- /dev/null +++ b/scripts/releases_test.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 + + +from textwrap import dedent +from unittest import mock + +from releases import get_releases + +GIT_TAGS = dedent( + """ + 2017-06-26T22:31:52+02:00|0.1 + 2017-07-09T11:37:55+02:00|0.2 + 2017-07-17T22:08:58+02:00|0.2.1 + 2017-12-11T21:16:02+01:00|0.2.2 + 2017-12-12T23:55:09+01:00|0.2.3 + 2017-12-14T23:08:49+01:00|0.2.4 + 2017-12-16T16:15:42+01:00|0.2.5 + 2017-12-16T16:40:52+01:00|0.2.6 + 2017-12-26T21:29:05+01:00|0.3 + 2017-12-27T23:36:54+01:00|0.3.1 + 2017-12-27T23:44:11+01:00|0.3.2 + 2018-01-07T22:27:43+01:00|0.3.3 + 2018-01-07T22:52:04+01:00|0.3.4 + 2018-01-07T23:08:10+01:00|0.3.5 + 2018-02-18T14:48:53+01:00|0.4 + 2018-02-24T15:37:50+01:00|0.5 + 2018-02-24T18:08:07+01:00|0.5.1 + 2018-02-26T21:39:41+01:00|0.5.2 + 2018-02-27T23:10:45+01:00|0.5.3 + 2018-02-28T19:29:47+01:00|0.5.4 + 2018-03-04T15:16:57+01:00|0.6 + 2018-03-06T21:56:21+01:00|0.6.1 + 2018-03-21T21:05:15+01:00|0.7 + 2018-04-02T20:04:53+02:00|0.8 + 2018-04-17T21:31:49+02:00|0.9 + 2018-04-17T23:20:48+02:00|0.9.1 + 2018-04-23T19:44:48+02:00|0.10 + 2018-05-06T16:24:23+02:00|0.11 + 2018-05-09T23:46:23+02:00|0.12 + 2018-05-19T11:43:36+02:00|0.13 + 2018-06-02T18:11:24+02:00|0.14 + 2018-06-06T22:03:42+02:00|0.14.1 + 2018-06-16T15:04:57+02:00|0.14.2 + 2018-06-24T16:00:40+02:00|0.15 + 2018-07-22T22:44:16+02:00|0.16 + 2018-08-19T19:05:22+02:00|0.16.1 + 2018-08-21T19:03:14+02:00|0.16.2 + 2018-08-21T20:34:15+02:00|0.16.3 + 2018-10-07T11:53:35+02:00|0.17 + 2019-01-22T12:05:12+01:00|0.18 + 2019-01-29T14:25:50+01:00|0.18.1 + 2019-02-13T09:28:23+01:00|0.18.2 + 2019-03-21T10:41:32+01:00|0.18.3 + 2019-05-16T12:30:38+02:00|0.19.0 + 2019-05-02T14:26:46+02:00|0.19.0-rc1 + 2019-05-10T10:05:26+02:00|0.19.0-rc2 + 2019-06-28T10:25:35+02:00|0.19.1 + 2019-10-04T10:42:33+02:00|0.20.0 + 2019-09-24T15:28:11+02:00|0.20.0-rc1 + 2019-10-28T10:54:39+01:00|0.20.1 + 2020-04-24T10:11:25+02:00|0.21 + 2020-04-09T09:57:16+02:00|0.21-rc1 + 2020-04-22T11:10:55+02:00|0.21-rc2 + 2020-06-11T10:44:20+02:00|0.21.1 + 2020-07-27T11:21:40+02:00|0.21.2 + 2020-09-09T07:48:14+02:00|1.0 + 2020-08-23T15:21:29+02:00|1.0-rc1 + 2020-10-31T12:43:37+01:00|1.0.1 + 2021-03-10T10:25:28+01:00|1.1 + 2021-02-24T08:18:56+01:00|1.1-rc1 + 2021-03-01T19:21:36+01:00|1.1-rc2 + 2021-04-13T10:27:07+02:00|1.1.1 + 2021-05-19T15:30:51+02:00|1.1.2 + 2021-08-01T22:04:02+02:00|1.1.3 + 2021-08-02T20:47:50+02:00|1.1.4 + 2021-12-27T20:56:03+01:00|1.2.0 + 2021-12-08T20:15:55+01:00|1.2.0-rc1 + 2021-12-21T09:12:57+00:00|1.2.0-rc2 + 2021-11-05T09:24:36+00:00|1.2.0-testing + 2021-11-05T09:31:10+00:00|1.2.0-testing2 + 2021-11-05T09:43:30+00:00|1.2.0-testing3 + 2021-11-05T12:00:26+00:00|1.2.0-testing4 + 2022-01-06T17:35:53+01:00|1.2.1 + 2022-02-04T12:49:11+01:00|1.2.2 + 2022-03-18T10:57:16+01:00|1.2.3 + 2022-04-23T13:40:06+02:00|1.2.4 + 2022-05-07T13:48:31+02:00|1.2.5 + 2022-07-04T17:03:19+02:00|1.2.6 + 2022-07-05T15:43:08+02:00|1.2.6-1 + 2022-07-14T12:53:53+02:00|1.2.7 + 2022-09-12T10:51:44+02:00|1.2.8 + 2022-11-25T17:59:23+01:00|1.2.9 + 2023-01-20T09:40:58+01:00|1.3.0-rc1 + 2023-01-23T10:41:22+01:00|1.3.0-rc2 + 2023-01-23T14:24:46+01:00|1.3.0-rc3 + """ +) + + +def test_get_releases(): + with mock.patch("releases.check_output") as check_output_mock: + check_output_mock.return_value = GIT_TAGS + + assert get_releases() == [ + {"id": "1.2.9", "date": "2022-11-25T17:59:23+01:00"}, + {"id": "1.2.8", "date": "2022-09-12T10:51:44+02:00"}, + {"id": "1.2.7", "date": "2022-07-14T12:53:53+02:00"}, + {"id": "1.2.6-1", "date": "2022-07-05T15:43:08+02:00"}, + {"id": "1.2.6", "date": "2022-07-04T17:03:19+02:00"}, + {"id": "1.2.5", "date": "2022-05-07T13:48:31+02:00"}, + {"id": "1.2.4", "date": "2022-04-23T13:40:06+02:00"}, + {"id": "1.2.3", "date": "2022-03-18T10:57:16+01:00"}, + {"id": "1.2.2", "date": "2022-02-04T12:49:11+01:00"}, + {"id": "1.2.1", "date": "2022-01-06T17:35:53+01:00"}, + {"id": "1.2.0", "date": "2021-12-27T20:56:03+01:00"}, + {"id": "1.1.4", "date": "2021-08-02T20:47:50+02:00"}, + {"id": "1.1.3", "date": "2021-08-01T22:04:02+02:00"}, + {"id": "1.1.2", "date": "2021-05-19T15:30:51+02:00"}, + {"id": "1.1.1", "date": "2021-04-13T10:27:07+02:00"}, + {"id": "1.1", "date": "2021-03-10T10:25:28+01:00"}, + {"id": "1.0.1", "date": "2020-10-31T12:43:37+01:00"}, + {"id": "1.0", "date": "2020-09-09T07:48:14+02:00"}, + {"id": "0.21.2", "date": "2020-07-27T11:21:40+02:00"}, + {"id": "0.21.1", "date": "2020-06-11T10:44:20+02:00"}, + {"id": "0.21", "date": "2020-04-24T10:11:25+02:00"}, + {"id": "0.20.1", "date": "2019-10-28T10:54:39+01:00"}, + {"id": "0.20.0", "date": "2019-10-04T10:42:33+02:00"}, + {"id": "0.19.1", "date": "2019-06-28T10:25:35+02:00"}, + {"id": "0.19.0", "date": "2019-05-16T12:30:38+02:00"}, + {"id": "0.18.3", "date": "2019-03-21T10:41:32+01:00"}, + {"id": "0.18.2", "date": "2019-02-13T09:28:23+01:00"}, + {"id": "0.18.1", "date": "2019-01-29T14:25:50+01:00"}, + {"id": "0.18", "date": "2019-01-22T12:05:12+01:00"}, + {"id": "0.17", "date": "2018-10-07T11:53:35+02:00"}, + {"id": "0.16.3", "date": "2018-08-21T20:34:15+02:00"}, + {"id": "0.16.2", "date": "2018-08-21T19:03:14+02:00"}, + {"id": "0.16.1", "date": "2018-08-19T19:05:22+02:00"}, + {"id": "0.16", "date": "2018-07-22T22:44:16+02:00"}, + {"id": "0.15", "date": "2018-06-24T16:00:40+02:00"}, + {"id": "0.14.2", "date": "2018-06-16T15:04:57+02:00"}, + {"id": "0.14.1", "date": "2018-06-06T22:03:42+02:00"}, + {"id": "0.14", "date": "2018-06-02T18:11:24+02:00"}, + {"id": "0.13", "date": "2018-05-19T11:43:36+02:00"}, + {"id": "0.12", "date": "2018-05-09T23:46:23+02:00"}, + {"id": "0.11", "date": "2018-05-06T16:24:23+02:00"}, + {"id": "0.10", "date": "2018-04-23T19:44:48+02:00"}, + {"id": "0.9.1", "date": "2018-04-17T23:20:48+02:00"}, + {"id": "0.9", "date": "2018-04-17T21:31:49+02:00"}, + {"id": "0.8", "date": "2018-04-02T20:04:53+02:00"}, + {"id": "0.7", "date": "2018-03-21T21:05:15+01:00"}, + {"id": "0.6.1", "date": "2018-03-06T21:56:21+01:00"}, + {"id": "0.6", "date": "2018-03-04T15:16:57+01:00"}, + {"id": "0.5.4", "date": "2018-02-28T19:29:47+01:00"}, + {"id": "0.5.3", "date": "2018-02-27T23:10:45+01:00"}, + {"id": "0.5.2", "date": "2018-02-26T21:39:41+01:00"}, + {"id": "0.5.1", "date": "2018-02-24T18:08:07+01:00"}, + {"id": "0.5", "date": "2018-02-24T15:37:50+01:00"}, + {"id": "0.4", "date": "2018-02-18T14:48:53+01:00"}, + {"id": "0.3.5", "date": "2018-01-07T23:08:10+01:00"}, + {"id": "0.3.4", "date": "2018-01-07T22:52:04+01:00"}, + {"id": "0.3.3", "date": "2018-01-07T22:27:43+01:00"}, + {"id": "0.3.2", "date": "2017-12-27T23:44:11+01:00"}, + {"id": "0.3.1", "date": "2017-12-27T23:36:54+01:00"}, + {"id": "0.3", "date": "2017-12-26T21:29:05+01:00"}, + {"id": "0.2.6", "date": "2017-12-16T16:40:52+01:00"}, + {"id": "0.2.5", "date": "2017-12-16T16:15:42+01:00"}, + {"id": "0.2.4", "date": "2017-12-14T23:08:49+01:00"}, + {"id": "0.2.3", "date": "2017-12-12T23:55:09+01:00"}, + {"id": "0.2.2", "date": "2017-12-11T21:16:02+01:00"}, + {"id": "0.2.1", "date": "2017-07-17T22:08:58+02:00"}, + {"id": "0.2", "date": "2017-07-09T11:37:55+02:00"}, + {"id": "0.1", "date": "2017-06-26T22:31:52+02:00"}, + ] diff --git a/templates/nginx.conf.j2 b/templates/nginx.conf.j2 new file mode 100644 index 000000000..503d7abcb --- /dev/null +++ b/templates/nginx.conf.j2 @@ -0,0 +1,272 @@ +{% if config.reverse_proxy %} +upstream fw { + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% else %} +{% if config.inside_docker %} +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_HOST}:${FUNKWHALE_API_PORT}; +} +{% else %} + +upstream funkwhale-api { + # depending on your setup, you may want to update this + server ${FUNKWHALE_API_IP}:${FUNKWHALE_API_PORT}; +} +{% endif %} +{% endif %} +{% if config.proxy_frontend %} + +upstream funkwhale-front { + server ${FUNKWHALE_FRONT_IP}:${FUNKWHALE_FRONT_PORT}; +} +{% endif %} + +# Required for websocket support. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +{% if not config.inside_docker %} +server { + listen 80; + listen [::]:80; + # update this to match your instance name + server_name ${FUNKWHALE_HOSTNAME}; + + # useful for Let's Encrypt + location /.well-known/acme-challenge/ { + allow all; + } + + location / { + return 301 https://$host$request_uri; + } +} +{% endif %} + +server { +{% if not config.inside_docker %} + listen 443 ssl http2; + listen [::]:443 ssl http2; + + server_name ${FUNKWHALE_HOSTNAME}; + + # TLS + # Feel free to use your own configuration for SSL here or simply remove the + # lines and move the configuration to the previous server block if you + # don't want to run funkwhale behind https (this is not recommended) + # have a look here for let's encrypt configuration: + # https://certbot.eff.org/all-instructions/#debian-9-stretch-nginx + ssl_protocols TLSv1.2; + ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; + ssl_prefer_server_ciphers on; + ssl_session_cache shared:SSL:10m; + ssl_certificate /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${FUNKWHALE_HOSTNAME}/privkey.pem; + + # HSTS + add_header Strict-Transport-Security "max-age=31536000"; + +{% else %} + listen 80; + listen [::]:80; + + server_name _; +{% endif %} + + # General configs +{% if not config.reverse_proxy %} +{% if config.inside_docker %} + root /usr/share/nginx/html; +{% else %} + root ${FUNKWHALE_FRONTEND_PATH}; +{% endif %} +{% endif %} + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + charset utf-8; + + # compression settings + gzip on; + gzip_comp_level 5; + gzip_min_length 256; + gzip_proxied any; + gzip_vary on; + gzip_types + application/javascript + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; + # end of compression settings +{% if not config.reverse_proxy %} + + # headers + add_header Content-Security-Policy "default-src 'self'; connect-src https: wss: http: ws: 'self' 'unsafe-eval'; script-src 'self' 'wasm-unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; media-src https: http: 'self' data:; object-src 'none'"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header Service-Worker-Allowed "/"; + + location /api/ { + include /etc/nginx/funkwhale_proxy.conf; + # This is needed if you have file import via upload enabled. + client_max_body_size ${NGINX_MAX_BODY_SIZE}; + proxy_pass http://funkwhale-api; + } + + location ~ ^/library/(albums|tracks|artists|playlists)/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location /channels/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + location ~ ^/@(vite-plugin-pwa|vite|id)/ { + include /etc/nginx/funkwhale_proxy.conf; + {% if config.proxy_frontend %} + proxy_pass http://funkwhale-front; + {% else %} + {% if config.inside_docker %} + alias /usr/share/nginx/html/; + {% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/; + {% endif %} + try_files $uri $uri/ /index.html; + {% endif %} + } + + location /@ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } +{% endif %} + + location / { +{% if not config.reverse_proxy %} + expires 1d; +{% endif %} + include /etc/nginx/funkwhale_proxy.conf; +{% if config.proxy_frontend and not config.reverse_proxy %} + proxy_pass http://funkwhale-front; +{% elif not config.proxy_frontend and config.reverse_proxy %} + proxy_pass http://fw; +{% else %} +{% if config.inside_docker %} + alias /usr/share/nginx/html/; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/; +{% endif %} + try_files $uri $uri/ /index.html; +{% endif %} + } + +{% if not config.reverse_proxy %} +{% if config.proxy_frontend %} + location = /embed.html { + proxy_pass http://funkwhale-front; +{% else %} + location ~ "/(front/)?embed.html" { +{% if config.inside_docker %} + alias /usr/share/nginx/html/embed.html; +{% else %} + alias ${FUNKWHALE_FRONTEND_PATH}/embed.html; +{% endif %} +{% endif %} + add_header Content-Security-Policy "connect-src https: http: 'self'; default-src 'self'; script-src 'self' unpkg.com 'unsafe-inline' 'unsafe-eval'; style-src https: http: 'self' 'unsafe-inline'; img-src https: http: 'self' data:; font-src https: http: 'self' data:; object-src 'none'; media-src https: http: 'self' data:"; + add_header Referrer-Policy "strict-origin-when-cross-origin"; + + expires 1d; + } + + location /federation/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # You can comment this if you do not plan to use the Subsonic API. + location /rest/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api/api/subsonic/rest/; + } + + location /.well-known/ { + include /etc/nginx/funkwhale_proxy.conf; + proxy_pass http://funkwhale-api; + } + + # Allow direct access to only specific subdirectories in /media + location /media/__sized__/ { + alias ${MEDIA_ROOT}/__sized__/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/attachments/ { + alias ${MEDIA_ROOT}/attachments/; + add_header Access-Control-Allow-Origin '*'; + } + + # Allow direct access to only specific subdirectories in /media + location /media/dynamic_preferences/ { + alias ${MEDIA_ROOT}/dynamic_preferences/; + add_header Access-Control-Allow-Origin '*'; + } + + # This is an internal location that is used to serve + # media (uploaded) files once correct permission / authentication + # has been checked on API side. + # Comment the "NON-S3" commented lines and uncomment "S3" commented lines + # if you're storing media files in a S3 bucket. + location ~ /_protected/media/(.+) { + internal; + alias ${MEDIA_ROOT}/$1; # NON-S3 + # Needed to ensure DSub auth isn't forwarded to S3/Minio, see #932. +# proxy_set_header Authorization ""; # S3 +# proxy_pass $1; # S3 + add_header Access-Control-Allow-Origin '*'; + } + + location /_protected/music/ { + # This is an internal location that is used to serve + # local music files once correct permission / authentication + # has been checked on API side. + # Set this to the same value as your MUSIC_DIRECTORY_PATH setting. + internal; + alias ${MUSIC_DIRECTORY_PATH}/; + add_header Access-Control-Allow-Origin '*'; + } + + location /manifest.json { + # If the reverse proxy is terminating SSL, nginx gets confused and redirects to http, hence the full URL + return 302 ${FUNKWHALE_PROTOCOL}://${FUNKWHALE_HOSTNAME}/api/v1/instance/spa-manifest.json; + } + +{% if config.proxy_frontend %} + location /staticfiles/ { + alias /usr/share/nginx/html/staticfiles/; + } +{% endif %} +{% if not config.reverse_proxy and not config.inside_docker %} + location /staticfiles/ { + alias ${STATIC_ROOT}/; + } +{% endif %} +{% endif %} +}