From ccc6c9867fd2d308200097f95dc4791eaf368cb7 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Wed, 11 Jun 2025 19:20:11 -0500 Subject: [PATCH 01/38] refactor(client): move to Vite by @phillipthelen --- .babelrc | 2 +- gulp/gulp-start.js | 11 - gulp/gulp-tests.js | 6 - gulpfile.js | 1 - habitica-images | 2 +- migrations/archive/api_v3/groups.js | 2 +- migrations/archive/api_v3/users.js | 2 +- migrations/migration-runner.js | 2 +- package-lock.json | 563 +- package.json | 9 +- test/content/shop-featuredItems.test.js | 2 +- test/helpers/globals.helper.js | 2 +- test/helpers/start-server.js | 2 +- website/client/.eslintrc.js | 4 +- website/client/babel.config.js | 9 - website/client/{public => }/index.html | 4 +- website/client/package-lock.json | 11817 +++++----------- website/client/package.json | 35 +- website/client/src/app.vue | 14 +- website/client/src/assets/scss/banner.scss | 2 +- website/client/src/assets/scss/bootstrap.scss | 4 +- website/client/src/assets/scss/faq.scss | 2 +- website/client/src/assets/scss/form.scss | 6 +- website/client/src/assets/scss/iconalert.scss | 4 +- website/client/src/assets/scss/modal.scss | 2 +- website/client/src/assets/scss/static.scss | 2 +- website/client/src/components/404.vue | 4 +- .../components/achievements/chooseClass.vue | 10 +- .../components/achievements/firstDrops.vue | 4 +- .../achievements/genericAchievement.vue | 6 +- .../src/components/achievements/levelUp.vue | 6 +- .../achievements/onboardingComplete.vue | 6 +- .../components/achievements/wonChallenge.vue | 10 +- .../admin-panel/user-support/stats-row.vue | 2 +- .../admin-panel/user-support/stats.vue | 2 +- .../user-support/subscriptionAndPerks.vue | 2 +- .../admin-panel/user-support/userHistory.vue | 2 +- website/client/src/components/appFooter.vue | 26 +- .../client/src/components/auth/authForm.vue | 8 +- .../components/auth/registerLoginReset.vue | 20 +- website/client/src/components/avatar.vue | 2 +- .../avatarModal/customize-banner.vue | 4 +- .../avatarModal/customize-options.vue | 6 +- .../src/components/avatarModal/sub-menu.vue | 2 +- .../src/components/bannedAccountModal.vue | 2 +- .../client/src/components/bugReportModal.vue | 2 +- .../src/components/bugReportSuccessModal.vue | 4 +- .../components/challenges/challengeDetail.vue | 8 +- .../components/challenges/challengeItem.vue | 20 +- .../components/challenges/challengeModal.vue | 2 +- .../challenges/closeChallengeModal.vue | 4 +- .../components/challenges/findChallenges.vue | 4 +- .../components/challenges/groupChallenges.vue | 4 +- .../components/challenges/myChallenges.vue | 6 +- .../challenges/reportChallengeModal.vue | 6 +- .../src/components/chat/autoComplete.vue | 24 +- .../src/components/chat/chatMessages.vue | 2 +- .../src/components/chat/reportFlagModal.vue | 4 +- .../client/src/components/creatorIntro.vue | 28 +- .../src/components/externalLinkModal.vue | 6 +- website/client/src/components/faceAvatar.vue | 2 +- .../group-plans/groupPlanCreationModal.vue | 4 +- .../group-plans/groupPlansUpdateModal.vue | 14 +- .../group-plans/taskInformation.vue | 18 +- website/client/src/components/groups/chat.vue | 4 +- .../components/groups/communityGuidelines.vue | 2 +- .../components/groups/createPartyModal.vue | 8 +- .../src/components/groups/discovery.vue | 4 +- .../client/src/components/groups/group.vue | 24 +- .../src/components/groups/groupFormModal.vue | 6 +- .../components/groups/invitationListModal.vue | 8 +- .../src/components/groups/inviteModal.vue | 4 +- .../src/components/groups/lookingForParty.vue | 14 +- .../src/components/groups/membersModal.vue | 10 +- .../client/src/components/groups/myGuilds.vue | 6 +- .../groups/participantListModal.vue | 2 +- .../src/components/groups/publicGuildItem.vue | 10 +- .../components/groups/questDetailModal.vue | 4 +- .../components/groups/questSidebarSection.vue | 10 +- .../src/components/groups/rightSidebar.vue | 14 +- .../client/src/components/groups/tavern.vue | 50 +- .../src/components/header/banners/base.vue | 2 +- .../header/banners/birthdayBanner.vue | 8 +- .../components/header/banners/chatBanner.vue | 2 +- .../header/banners/damagePaused.vue | 2 +- .../components/header/banners/gemsPromo.vue | 50 +- .../components/header/banners/giftPromo.vue | 4 +- .../client/src/components/header/index.vue | 2 +- website/client/src/components/header/menu.vue | 20 +- .../header/messageCount.functional.vue | 2 +- .../components/header/notifications/base.vue | 6 +- .../components/header/notifications/g1g1.vue | 6 +- .../notifications/onboardingComplete.vue | 4 +- .../notifications/unallocatedStatsPoints.vue | 2 +- .../header/notifications/worldBoss.vue | 10 +- .../header/notificationsDropdown.vue | 8 +- .../src/components/header/onboardingGuide.vue | 6 +- .../src/components/header/userDropdown.vue | 12 +- .../inventory/equipment/attributesGrid.vue | 2 +- .../inventory/equipment/equipGearModal.vue | 18 +- .../components/inventory/equipment/index.vue | 4 +- .../inventory/equipment/unequipDropdown.vue | 4 +- .../src/components/inventory/itemPopover.vue | 27 +- .../src/components/inventory/items/index.vue | 15 +- .../inventory/stable/hatchedPetDialog.vue | 6 +- .../inventory/stable/hatchingModal.vue | 6 +- .../src/components/inventory/stable/index.vue | 11 +- .../inventory/stable/mountRaisedModal.vue | 4 +- .../components/inventory/stable/petItem.vue | 2 +- .../inventory/stable/welcomeModal.vue | 2 +- .../client/src/components/memberDetails.vue | 10 +- .../src/components/memberDetailsNew.vue | 10 +- .../src/components/members/classBadge.vue | 10 +- .../components/members/inlineClassBadge.vue | 10 +- .../components/members/reportMemberModal.vue | 6 +- .../src/components/messages/likeButton.vue | 8 +- .../src/components/messages/messageCard.vue | 12 +- .../src/components/messages/messageList.vue | 2 +- .../src/components/news/birthdayModal.vue | 30 +- .../src/components/news/newsContent.vue | 4 +- .../client/src/components/notifications.vue | 2 +- .../src/components/payments/amazonModal.vue | 4 +- .../components/payments/buttons/amazon.vue | 2 +- .../src/components/payments/buttons/list.vue | 6 +- .../src/components/payments/buyGemsModal.vue | 46 +- .../payments/cancelModalConfirm.vue | 6 +- .../src/components/payments/canceledModal.vue | 6 +- .../components/payments/selectUserModal.vue | 10 +- .../src/components/payments/sendGiftModal.vue | 12 +- .../src/components/payments/successModal.vue | 10 +- .../client/src/components/secondaryMenu.vue | 2 +- .../client/src/components/sectionButton.vue | 6 +- .../src/components/selectMembersModal.vue | 6 +- .../src/components/settings/subscription.vue | 117 +- .../settings/subscriptionOptions.vue | 33 +- .../src/components/settings/usernameForm.vue | 2 +- .../components/settings/verifyUsername.vue | 4 +- .../src/components/shared/closeIcon.vue | 4 +- .../src/components/shared/faqSidebar.vue | 22 +- .../client/src/components/shared/itemCost.vue | 10 +- .../src/components/shared/numberIncrement.vue | 10 +- .../src/components/shops/balanceInfo.vue | 8 +- .../client/src/components/shops/buyModal.vue | 22 +- .../src/components/shops/countdownBanner.vue | 6 +- .../components/shops/customizations/index.vue | 4 +- .../client/src/components/shops/gemPrice.vue | 4 +- .../src/components/shops/itemWithLabel.vue | 2 +- .../shops/market/equipmentSection.vue | 8 +- .../src/components/shops/market/index.vue | 2 +- .../src/components/shops/market/sellModal.vue | 14 +- .../components/shops/quests/buyQuestModal.vue | 22 +- .../src/components/shops/quests/index.vue | 4 +- .../shops/quests/questDialogContent.vue | 4 +- .../src/components/shops/quests/questInfo.vue | 12 +- .../components/shops/quests/questRewards.vue | 8 +- .../src/components/shops/seasonal/index.vue | 12 +- .../client/src/components/shops/shopItem.vue | 14 +- .../components/shops/timeTravelers/index.vue | 6 +- .../client/src/components/sidebarSection.vue | 2 +- .../src/components/snackbars/notification.vue | 12 +- .../src/components/static/appleRedirect.vue | 2 +- .../src/components/static/chatSunsetFaq.vue | 2 +- .../components/static/communityGuidelines.vue | 12 +- .../components/static/contentScheduleFaq.vue | 2 +- website/client/src/components/static/faq.vue | 2 +- .../client/src/components/static/features.vue | 20 +- .../src/components/static/groupPlans.vue | 63 +- .../client/src/components/static/header.vue | 10 +- website/client/src/components/static/home.vue | 62 +- .../client/src/components/static/overview.vue | 2 +- .../src/components/static/staticWrapper.vue | 8 +- .../static/subscriptionBenefitsFaq.vue | 40 +- .../src/components/tasks/approvalFooter.vue | 10 +- .../src/components/tasks/approvalHeader.vue | 2 +- .../client/src/components/tasks/column.vue | 10 +- .../tasks/modal-controls/checklist.vue | 10 +- .../tasks/modal-controls/lockableLabel.vue | 4 +- .../tasks/modal-controls/multiList.vue | 6 +- .../tasks/modal-controls/selectDifficulty.vue | 12 +- .../tasks/modal-controls/selectMulti.vue | 2 +- .../tasks/modal-controls/selectSingle.vue | 2 +- .../modal-controls/selectTranslatedArray.vue | 2 +- .../client/src/components/tasks/spells.vue | 12 +- website/client/src/components/tasks/task.vue | 34 +- .../client/src/components/tasks/taskModal.vue | 20 +- .../src/components/tasks/taskSummary.vue | 6 +- website/client/src/components/tasks/user.vue | 22 +- .../src/components/tasks/yesterdailyModal.vue | 2 +- website/client/src/components/ui/closeX.vue | 4 +- .../client/src/components/ui/countBadge.vue | 2 +- .../src/components/ui/customMenuDropdown.vue | 4 +- .../client/src/components/ui/datepicker.vue | 6 +- website/client/src/components/ui/drawer.vue | 6 +- .../client/src/components/ui/drawerSlider.vue | 6 +- .../client/src/components/ui/equipBadge.vue | 6 +- .../client/src/components/ui/filterGroup.vue | 2 +- .../src/components/ui/filterSidebar.vue | 2 +- .../src/components/ui/informationIcon.vue | 2 +- website/client/src/components/ui/itemRows.vue | 2 +- .../src/components/ui/loadingGryphon.vue | 2 +- .../src/components/ui/loadingSpinner.vue | 2 +- website/client/src/components/ui/pinBadge.vue | 4 +- .../components/ui/purchaseHistoryTable.vue | 10 +- .../client/src/components/ui/selectList.vue | 4 +- .../src/components/ui/showMoreButton.vue | 2 +- website/client/src/components/ui/sprite.vue | 2 +- .../client/src/components/ui/starBadge.vue | 4 +- website/client/src/components/ui/statsbar.vue | 2 +- .../src/components/ui/toggleCheckbox.vue | 2 +- .../client/src/components/ui/toggleSwitch.vue | 4 +- website/client/src/components/userLabel.vue | 22 +- website/client/src/components/userLink.vue | 24 +- .../src/components/userMenu/profile.vue | 45 +- .../components/userMenu/profileAchievs.vue | 2 +- .../src/components/userMenu/profileModal.vue | 4 +- .../src/components/userMenu/profileStats.vue | 12 +- .../world-boss/worldBossInfoModal.vue | 10 +- website/client/src/libs/analytics.js | 6 +- website/client/src/libs/auth.js | 2 +- website/client/src/libs/logging.js | 4 +- website/client/src/libs/payments.js | 4 +- website/client/src/main.js | 4 +- website/client/src/mixins/externalLinks.js | 2 +- website/client/src/mixins/groupsUtilities.js | 4 +- website/client/src/mixins/payments.js | 2 +- website/client/src/mixins/sanitizeRedirect.js | 2 +- .../src/pages/private-messages/index.vue | 136 +- .../private-messages/pm-conversation-item.vue | 4 +- .../private-messages/pm-disabled-state.vue | 2 +- .../pages/private-messages/pm-empty-state.vue | 6 +- .../pm-new-message-started.vue | 2 +- .../start-new-conversation-input-header.vue | 2 +- .../client/src/pages/settings-overview.vue | 14 +- .../settings/components/classIconLabel.vue | 10 +- .../pages/settings/components/lockedInput.vue | 4 +- .../pages/settings/components/yourBalance.vue | 2 +- .../src/pages/settings/generalSettings.vue | 2 +- .../pages/settings/notificationSettings.vue | 2 +- .../settingRows/audioThemeSetting.vue | 2 +- .../settings/settingRows/classSetting.vue | 4 +- .../settingRows/dateFormatSetting.vue | 2 +- .../settingRows/dayStartAdjustmentSetting.vue | 2 +- .../settings/settingRows/deleteAccount.vue | 2 +- .../settingRows/displayNameSetting.vue | 4 +- .../settings/settingRows/fixValuesSetting.vue | 14 +- .../settings/settingRows/headerSettings.vue | 2 +- .../settings/settingRows/languageSetting.vue | 2 +- .../settings/settingRows/loginMethods.vue | 8 +- .../settings/settingRows/passwordSetting.vue | 2 +- .../settings/settingRows/resetAccount.vue | 2 +- .../pages/settings/settingRows/sleepMode.vue | 2 +- .../settings/settingRows/userNameSetting.vue | 2 +- .../pages/settings/siteDataRows/apiRow.vue | 2 +- .../siteDataRows/developerModeRow.vue | 4 +- .../settings/siteDataRows/userDataRow.vue | 2 +- .../pages/settings/siteDataRows/userIdRow.vue | 2 +- .../settings/siteDataRows/webhooksRow.vue | 10 +- website/client/src/pages/user-main.vue | 105 +- .../client/src/router/shared-route-imports.js | 2 +- website/client/src/router/static-routes.js | 36 +- website/client/src/router/user-routes.js | 14 +- website/client/src/store/index.js | 2 +- website/client/tests/unit/.eslintrc.js | 10 - .../components/achievements/levelUp.spec.js | 11 +- .../tests/unit/components/avatar.spec.js | 59 +- .../categories/categoryTags.spec.js | 13 +- .../challenges/challengeDetail.spec.js | 5 +- .../components/groups/membersModal.spec.js | 7 +- .../unit/components/groups/myGuilds.spec.js | 108 - .../client/tests/unit/components/home.spec.js | 19 +- .../unit/components/memberDetails.spec.js | 5 +- .../components/messages/messageCard.spec.js | 9 +- .../unit/components/notifications.spec.js | 25 +- .../unit/components/sidebarSection.spec.js | 13 +- .../unit/components/tasks/column.spec.js | 27 +- .../tests/unit/components/tasks/user.spec.js | 5 +- .../tests/unit/components/ui/drawer.spec.js | 5 +- .../client/tests/unit/filters/floor.spec.js | 3 +- .../client/tests/unit/filters/round.spec.js | 3 +- .../tests/unit/filters/roundBigNumber.spec.js | 9 +- website/client/tests/unit/helpers.js | 23 - .../tests/unit/libs/asyncResource.spec.js | 41 +- .../client/tests/unit/libs/deepFreeze.spec.js | 3 +- website/client/tests/unit/libs/i18n.spec.js | 9 +- .../unit/libs/renderWithMentions.spec.js | 15 +- website/client/tests/unit/libs/store.spec.js | 25 +- .../libs/store/helpers/filterTasks.spec.js | 11 +- .../libs/store/helpers/orderTasks.spec.js | 9 +- .../tests/unit/mixins/groupsUtilities.spec.js | 55 +- .../tests/unit/store/actions/shops.spec.js | 8 +- .../tests/unit/store/actions/tasks.spec.js | 12 +- .../tests/unit/store/actions/user.spec.js | 12 +- .../store/getters/members/hasClass.spec.js | 9 +- .../store/getters/tasks/canDelete.spec.js | 17 +- .../unit/store/getters/tasks/canEdit.spec.js | 19 +- .../store/getters/tasks/getTagsFor.spec.js | 3 +- .../getters/tasks/getTaskClasses.spec.js | 47 +- .../unit/store/getters/tasks/getTasks.spec.js | 13 +- .../unit/store/getters/user/user.spec.js | 13 +- website/client/tests/unit/store/store.spec.js | 3 +- website/client/vite.config.mjs | 169 + website/client/vitest.config.js | 22 + website/client/vue.config.js | 200 - website/client/webpack.webstorm.config | 9 - .../script/content/constants/schedule.js | 3 +- .../common/script/content/hatching-potions.js | 2 +- website/common/script/content/is_released.js | 5 +- website/common/script/fns/datedMemoize.js | 3 +- website/server/index.js | 2 +- website/server/libs/setupNconf.js | 11 +- website/server/middlewares/static.js | 1 + 311 files changed, 5321 insertions(+), 10626 deletions(-) delete mode 100644 gulp/gulp-start.js delete mode 100644 website/client/babel.config.js rename website/client/{public => }/index.html (97%) delete mode 100644 website/client/tests/unit/.eslintrc.js delete mode 100644 website/client/tests/unit/components/groups/myGuilds.spec.js delete mode 100644 website/client/tests/unit/helpers.js create mode 100644 website/client/vite.config.mjs create mode 100644 website/client/vitest.config.js delete mode 100644 website/client/vue.config.js delete mode 100644 website/client/webpack.webstorm.config diff --git a/.babelrc b/.babelrc index 0bddca3824..29a41a8166 100644 --- a/.babelrc +++ b/.babelrc @@ -9,4 +9,4 @@ } ] ] -} \ No newline at end of file +} diff --git a/gulp/gulp-start.js b/gulp/gulp-start.js deleted file mode 100644 index 736f5cb325..0000000000 --- a/gulp/gulp-start.js +++ /dev/null @@ -1,11 +0,0 @@ -import gulp from 'gulp'; -import nodemon from 'gulp-nodemon'; - -import pkg from '../package.json'; - -gulp.task('nodemon', done => { - nodemon({ - script: pkg.main, - }); - done(); -}); diff --git a/gulp/gulp-tests.js b/gulp/gulp-tests.js index 64ac63902f..3a85cb59ca 100644 --- a/gulp/gulp-tests.js +++ b/gulp/gulp-tests.js @@ -49,12 +49,6 @@ function integrationTestCommand (testDir) { } /* Test task definitions */ -gulp.task('test:nodemon', gulp.series(done => { - process.env.PORT = TEST_SERVER_PORT; // eslint-disable-line no-process-env - process.env.NODE_DB_URI = TEST_DB_URI; // eslint-disable-line no-process-env - done(); -}, 'nodemon')); - gulp.task('test:prepare:mongo', cb => { const mongooseOptions = getDefaultConnectionOptions(); const connectionUrl = getDevelopmentConnectionUrl(TEST_DB_URI); diff --git a/gulpfile.js b/gulpfile.js index 86c9f32a38..bc1132913c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -21,7 +21,6 @@ if (process.env.NODE_ENV === 'production') { // eslint-disable-line no-process-e require('./gulp/gulp-build'); // eslint-disable-line global-require require('./gulp/gulp-console'); // eslint-disable-line global-require require('./gulp/gulp-sprites'); // eslint-disable-line global-require - require('./gulp/gulp-start'); // eslint-disable-line global-require require('./gulp/gulp-tests'); // eslint-disable-line global-require require('./gulp/gulp-transifex-test'); // eslint-disable-line global-require require('gulp').task('default', gulp.series('test')); // eslint-disable-line global-require diff --git a/habitica-images b/habitica-images index acb3ede81d..cf18a04339 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit acb3ede81dbe832e17dce64d4e55c1825e47b474 +Subproject commit cf18a0433939aa3d41b87c5fee9a07083f7309fd diff --git a/migrations/archive/api_v3/groups.js b/migrations/archive/api_v3/groups.js index 1d1d7e3b0c..43db848add 100644 --- a/migrations/archive/api_v3/groups.js +++ b/migrations/archive/api_v3/groups.js @@ -37,7 +37,7 @@ let consoleStamp = require('console-stamp'); consoleStamp(console); // Initialize configuration -require('../../website/server/libs/api-v3/setupNconf')(); +require('../../website/server/libs/api-v3/setupNconf').default(); let MONGODB_OLD = nconf.get('MONGODB_OLD'); let MONGODB_NEW = nconf.get('MONGODB_NEW'); diff --git a/migrations/archive/api_v3/users.js b/migrations/archive/api_v3/users.js index 1560c9d3dd..2511175071 100644 --- a/migrations/archive/api_v3/users.js +++ b/migrations/archive/api_v3/users.js @@ -32,7 +32,7 @@ let moment = require('moment'); consoleStamp(console); // Initialize configuration -require('../../website/server/libs/api-v3/setupNconf')(); +require('../../website/server/libs/api-v3/setupNconf').default(); let MONGODB_OLD = nconf.get('MONGODB_OLD'); let MONGODB_NEW = nconf.get('MONGODB_NEW'); diff --git a/migrations/migration-runner.js b/migrations/migration-runner.js index c66ac2014a..e3125c8be1 100644 --- a/migrations/migration-runner.js +++ b/migrations/migration-runner.js @@ -6,7 +6,7 @@ require('@babel/register'); // eslint-disable-line import/no-extraneous-dependen function setUpServer () { const nconf = require('nconf'); // eslint-disable-line global-require, no-unused-vars const mongoose = require('mongoose'); // eslint-disable-line global-require, no-unused-vars - const setupNconf = require('../website/server/libs/setupNconf'); // eslint-disable-line global-require + const setupNconf = require('../website/server/libs/setupNconf').default; // eslint-disable-line global-require setupNconf(); diff --git a/package-lock.json b/package-lock.json index 0d4ad6223e..e79c3c94e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,6 @@ "gulp-babel": "^8.0.0", "gulp-filter": "^7.0.0", "gulp-imagemin": "^7.1.0", - "gulp-nodemon": "^2.5.0", "gulp.spritesmith": "^6.13.0", "habitica-markdown": "^3.0.0", "helmet": "^4.6.0", @@ -55,12 +54,12 @@ "merge-stream": "^2.0.0", "method-override": "^3.0.0", "moment": "^2.29.4", - "moment-recur": "^1.0.7", + "moment-recur": "git://github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", "mongoose": "^8.9.5", "morgan": "^1.10.0", "nconf": "^0.12.1", "node-gcm": "^1.0.5", - "nodemon": "^2.0.20", + "nodemon": "^3.1.9", "on-headers": "^1.0.2", "passport": "^0.5.3", "passport-facebook": "^3.0.0", @@ -151,14 +150,6 @@ "node": ">=4" } }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/code-frame/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -542,14 +533,6 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1787,231 +1770,6 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/linux-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", @@ -2027,96 +1785,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4171,6 +3839,14 @@ "node": ">=6" } }, + "node_modules/apidoc/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/apidoc/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4201,6 +3877,41 @@ "node": ">=10" } }, + "node_modules/apidoc/node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/apidoc/node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/apidoc/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -4215,6 +3926,36 @@ "node": ">=10" } }, + "node_modules/apidoc/node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/apidoc/node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/apidoc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/apidoc/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -6195,7 +5936,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "devOptional": true, + "dev": true, "dependencies": { "file-uri-to-path": "1.0.0" } @@ -7015,15 +6756,6 @@ "node": ">=4" } }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/coa/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7117,6 +6849,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, "engines": { "node": ">=0.1.90" } @@ -8995,14 +8728,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-habitrpg/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-config-habitrpg/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -10509,7 +10234,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "devOptional": true + "dev": true }, "node_modules/filename-reserved-regex": { "version": "2.0.0", @@ -11595,24 +11320,6 @@ "node": ">=0.10.0" } }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/glob-watcher/node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -12302,16 +12009,6 @@ "node": ">=8" } }, - "node_modules/gulp-nodemon": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/gulp-nodemon/-/gulp-nodemon-2.5.0.tgz", - "integrity": "sha512-vXfaP72xo2C6XOaXrNcLEM3QqDJ1x21S3x97U4YtzN2Rl2kH57++aFkAVxe6BafGRSTxs/xVfE/jNNlCv5Ym2Q==", - "dependencies": { - "colors": "^1.2.1", - "gulp": "^4.0.0", - "nodemon": "^2.0.2" - } - }, "node_modules/gulp.spritesmith": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/gulp.spritesmith/-/gulp.spritesmith-6.13.0.tgz", @@ -12544,6 +12241,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", @@ -15337,15 +15042,6 @@ "node": "*" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -15409,9 +15105,10 @@ } }, "node_modules/moment-recur": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/moment-recur/-/moment-recur-1.0.7.tgz", - "integrity": "sha512-jpBQn6H62gCnEYjtYdLfK/VdPZHEXo1t8RrVItHVVS67SRvByyJBNBa3WQSGTe+8H0smcYO/79FYTA9LGMVdQw==", + "version": "1.0.8", + "resolved": "git+ssh://git@github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", + "integrity": "sha512-LaqXV3izeVQjG0EKAEQQWdneMiff5JR6oBKcfgl0uFOTeaFzLKG62psk7r2VE7RTBdhYigt6KNaLZR7GdWPEIA==", + "license": "Unlicense", "dependencies": { "moment": "<3.0.0" } @@ -15951,7 +15648,7 @@ "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "devOptional": true + "dev": true }, "node_modules/nanomatch": { "version": "1.2.13", @@ -16315,17 +16012,17 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" @@ -16334,35 +16031,22 @@ "nodemon": "bin/nodemon.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/nodemon/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/nodemon/node_modules/supports-color": { @@ -19216,15 +18900,6 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "node_modules/run-rs/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/run-rs/node_modules/mongodb": { "version": "3.6.12", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.12.tgz", @@ -19749,22 +19424,25 @@ } }, "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dependencies": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" } }, "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/sinon": { @@ -20793,15 +20471,6 @@ "node": ">=4" } }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "optional": true, - "engines": { - "node": ">=4" - } - }, "node_modules/svgo/node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", diff --git a/package.json b/package.json index 32085c2f0c..ac9b965044 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "gulp-babel": "^8.0.0", "gulp-filter": "^7.0.0", "gulp-imagemin": "^7.1.0", - "gulp-nodemon": "^2.5.0", "gulp.spritesmith": "^6.13.0", "habitica-markdown": "^3.0.0", "helmet": "^4.6.0", @@ -50,12 +49,11 @@ "merge-stream": "^2.0.0", "method-override": "^3.0.0", "moment": "^2.29.4", - "moment-recur": "^1.0.7", + "moment-recur": "git://github.com/HabitRPG/moment-recur.git#d3e8e6da0806f13b74dd2e4d7d9053e6a63db119", "mongoose": "^8.9.5", "morgan": "^1.10.0", "nconf": "^0.12.1", "node-gcm": "^1.0.5", - "nodemon": "^2.0.20", "on-headers": "^1.0.2", "passport": "^0.5.3", "passport-facebook": "^3.0.0", @@ -100,15 +98,14 @@ "test:sanity": "nyc --silent --no-clean mocha test/sanity --recursive", "test:common": "nyc --silent --no-clean mocha test/common --recursive", "test:content": "nyc --silent --no-clean mocha test/content --recursive", - "test:nodemon": "gulp test:nodemon", "coverage": "nyc report --reporter=html --report-dir coverage/results; open coverage/results/index.html", "sprites": "gulp sprites:compile", "client:dev": "cd website/client && npm run serve", "client:build": "cd website/client && npm run build", "client:unit": "cd website/client && npm run test:unit", - "start": "gulp nodemon", + "start": "node --watch ./website/server/index.js", "start:simple": "node ./website/server/index.js", - "debug": "gulp nodemon --inspect", + "debug": "node --watch --inspect ./website/server/index.js", "mongo:dev": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet", "mongo:test": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data-testing --number 1 --quiet", "postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install", diff --git a/test/content/shop-featuredItems.test.js b/test/content/shop-featuredItems.test.js index 6ec7d57592..b1d7d8ce31 100644 --- a/test/content/shop-featuredItems.test.js +++ b/test/content/shop-featuredItems.test.js @@ -18,7 +18,7 @@ describe('Shop Featured Items', () => { }); it('contains the current premium hatching potions', () => { - clock = Sinon.useFakeTimers(new Date('2024-04-08')); + clock = Sinon.useFakeTimers(new Date('2024-04-09')); const items = featuredItems.market(); expect(_.find(items, item => item.path === 'premiumHatchingPotions.Porcelain')).to.exist; }); diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 213efac698..535138a69c 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -19,6 +19,6 @@ const sinonStubPromise = require('sinon-stub-promise'); sinonStubPromise(global.sinon); global.sandbox = sinon.createSandbox(); -const setupNconf = require('../../website/server/libs/setupNconf'); +const setupNconf = require('../../website/server/libs/setupNconf').default; setupNconf('./config.json.example'); diff --git a/test/helpers/start-server.js b/test/helpers/start-server.js index 57d98519e5..cf1f74b71a 100644 --- a/test/helpers/start-server.js +++ b/test/helpers/start-server.js @@ -3,7 +3,7 @@ const nconf = require('nconf'); const mongoose = require('mongoose'); -const setupNconf = require('../../website/server/libs/setupNconf'); +const setupNconf = require('../../website/server/libs/setupNconf').default; // fix further imports of require/import syntaxes require('@babel/register'); diff --git a/website/client/.eslintrc.js b/website/client/.eslintrc.js index 7a44ad03e3..6fdf41506f 100644 --- a/website/client/.eslintrc.js +++ b/website/client/.eslintrc.js @@ -3,6 +3,7 @@ module.exports = { root: true, env: { node: true, + es2021: true, }, extends: [ 'habitrpg/lib/vue', @@ -39,7 +40,4 @@ module.exports = { order: ['template', 'style', 'script'], }], }, - parserOptions: { - parser: 'babel-eslint', - }, }; diff --git a/website/client/babel.config.js b/website/client/babel.config.js deleted file mode 100644 index d2ddb50bcf..0000000000 --- a/website/client/babel.config.js +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable import/no-commonjs */ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset', - ], - plugins: [ - '@babel/plugin-proposal-optional-chaining', - ], -}; diff --git a/website/client/public/index.html b/website/client/index.html similarity index 97% rename from website/client/public/index.html rename to website/client/index.html index 2b77fedd6a..bc3dc19bef 100644 --- a/website/client/public/index.html +++ b/website/client/index.html @@ -12,6 +12,7 @@ +
@@ -28,10 +29,9 @@
- - + diff --git a/website/client/package-lock.json b/website/client/package-lock.json index 92af10f04b..c595d61381 100644 --- a/website/client/package-lock.json +++ b/website/client/package-lock.json @@ -9,20 +9,16 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { - "@vue/cli-plugin-babel": "^5.0.8", - "@vue/cli-plugin-eslint": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-unit-mocha": "^5.0.8", - "@vue/cli-service": "^5.0.8", + "@froxz/vite-plugin-s3": "^1.6.0", + "@vitejs/plugin-vue2": "^2.3.3", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^8.21.3", "assert": "^2.1.0", + "autoprefixer": "^10.4.20", "axios": "^0.28.0", "axios-progress-bar": "^1.2.0", - "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "core-js": "^3.33.1", "eslint": "7.32.0", "eslint-config-habitrpg": "6.2.0", "eslint-plugin-mocha": "5.3.0", @@ -32,31 +28,34 @@ "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", + "markdown-it": "^14.0.0", "moment": "^2.29.4", - "moment-locales-webpack-plugin": "^1.2.0", "nconf": "^0.12.1", "sass": "^1.63.4", - "sass-loader": "^14.1.1", "sinon": "^17.0.1", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", "uuid": "^9.0.1", "validator": "^13.9.0", + "vite": "^6.0.0", + "vite-plugin-compression2": "^1.3.3", "vue": "^2.7.10", "vue-fragment": "^1.6.0", "vue-mugen-scroll": "^0.2.6", "vue-router": "^3.6.5", - "vue-template-babel-compiler": "^2.0.0", - "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@vitest/browser": "^3.0.5", "babel-plugin-lodash": "^3.3.4", - "chai": "^5.1.0", "inspectpack": "^4.7.1", + "jsdom": "^26.0.0", + "mocha": "^11.1.0", + "playwright": "^1.50.1", "terser-webpack-plugin": "^5.3.10", + "vitest": "^3.0.5", "webpack": "^5.94.0" } }, @@ -68,19 +67,6 @@ "node": ">=0.10.0" } }, - "node_modules/@achrinza/node-ipc": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", - "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", - "dependencies": { - "@node-ipc/js-queue": "2.0.3", - "event-pubsub": "4.3.0", - "js-message": "1.0.7" - }, - "engines": { - "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21" - } - }, "node_modules/@amplitude/analytics-connector": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@amplitude/analytics-connector/-/analytics-connector-1.5.0.tgz", @@ -128,6 +114,8 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -136,15 +124,841 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.828.0.tgz", + "integrity": "sha512-TvFyrEfJkf9NN3cq5mXCgFv/sPaA8Rm5tEPgV5emuLedeGsORlWmVpdSKqfZ4lSoED1tMfNM6LY4uA9D8/RS5g==", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-node": "3.828.0", + "@aws-sdk/middleware-bucket-endpoint": "3.821.0", + "@aws-sdk/middleware-expect-continue": "3.821.0", + "@aws-sdk/middleware-flexible-checksums": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-location-constraint": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-sdk-s3": "3.826.0", + "@aws-sdk/middleware-ssec": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/signature-v4-multi-region": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-blob-browser": "^4.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.828.0.tgz", + "integrity": "sha512-qxw8JcPTaFaBwTBUr4YmLajaMh3En65SuBWAKEtjctbITRRekzR7tvr/TkwoyVOh+XoAtkwOn+BQeQbX+/wgHw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.826.0.tgz", + "integrity": "sha512-BGbQYzWj3ps+dblq33FY5tz/SsgJCcXX0zjQlSC07tYvU1jHTUvsefphyig+fY38xZ4wdKjbTop+KUmXUYrOXw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.826.0.tgz", + "integrity": "sha512-DK3pQY8+iKK3MGDdC3uOZQ2psU01obaKlTYhEwNu4VWzgwQL4Vi3sWj4xSWGEK41vqZxiRLq6fOq7ysRI+qEZA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.826.0.tgz", + "integrity": "sha512-N+IVZBh+yx/9GbMZTKO/gErBi/FYZQtcFRItoLbY+6WU+0cSWyZYfkoeOxHmQV3iX9k65oljERIWUmL9x6OSQg==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.828.0.tgz", + "integrity": "sha512-T3DJMo2/j7gCPpFg2+xEHWgua05t8WP89ye7PaZxA2Fc6CgScHkZsJZTri1QQIU2h+eOZ75EZWkeFLIPgN0kRQ==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.828.0.tgz", + "integrity": "sha512-9z3iPwVYOQYNzVZj8qycZaS/BOSKRXWA+QVNQlfEnQ4sA4sOcKR4kmV2h+rJcuBsSFfmOF62ZDxyIBGvvM4t/w==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.826.0", + "@aws-sdk/credential-provider-http": "3.826.0", + "@aws-sdk/credential-provider-ini": "3.828.0", + "@aws-sdk/credential-provider-process": "3.826.0", + "@aws-sdk/credential-provider-sso": "3.828.0", + "@aws-sdk/credential-provider-web-identity": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.826.0.tgz", + "integrity": "sha512-kURrc4amu3NLtw1yZw7EoLNEVhmOMRUTs+chaNcmS+ERm3yK0nKjaJzmKahmwlTQTSl3wJ8jjK7x962VPo+zWw==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.828.0.tgz", + "integrity": "sha512-9CEAXzUDSzOjOCb3XfM15TZhTaM+l07kumZyx2z8NC6T2U4qbCJqn4h8mFlRvYrs6cBj2SN40sD3r5Wp0Cq2Kw==", + "dependencies": { + "@aws-sdk/client-sso": "3.828.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/token-providers": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.828.0.tgz", + "integrity": "sha512-MguDhGHlQBeK9CQ/P4NOY0whAJ4HJU4x+f1dphg3I1sGlccFqfB8Moor2vXNKu0Th2kvAwkn9pr7gGb/+NGR9g==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.821.0.tgz", + "integrity": "sha512-cebgeytKlWOgGczLo3BPvNY9XlzAzGZQANSysgJ2/8PSldmUpXRIF+GKPXDVhXeInWYHIfB8zZi3RqrPoXcNYQ==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.821.0.tgz", + "integrity": "sha512-zAOoSZKe1njOrtynvK6ZORU57YGv5I7KP4+rwOvUN3ZhJbQ7QPf8gKtFUCYAPRMegaXCKF/ADPtDZBAmM+zZ9g==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.826.0.tgz", + "integrity": "sha512-Fz9w8CFYPfSlHEB6feSsi06hdS+s+FB8k5pO4L7IV0tUa78mlhxF/VNlAJaVWYyOkZXl4HPH2K48aapACSQOXw==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.821.0.tgz", + "integrity": "sha512-sKrm80k0t3R0on8aA/WhWFoMaAl4yvdk+riotmMElLUpcMcRXAd1+600uFVrxJqZdbrKQ0mjX0PjT68DlkYXLg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.826.0.tgz", + "integrity": "sha512-8F0qWaYKfvD/de1AKccXuigM+gb/IZSncCqxdnFWqd+TFzo9qI9Hh+TpUhWOMYSgxsMsYQ8ipmLzlD/lDhjrmA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.5.3", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.821.0.tgz", + "integrity": "sha512-YYi1Hhr2AYiU/24cQc8HIB+SWbQo6FBkMYojVuz/zgrtkFmALxENGF/21OPg7f/QWd+eadZJRxCjmRwh5F2Cxg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.828.0.tgz", + "integrity": "sha512-nixvI/SETXRdmrVab4D9LvXT3lrXkwAWGWk2GVvQvzlqN1/M/RfClj+o37Sn4FqRkGH9o9g7Fqb1YqZ4mqDAtA==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.5.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.828.0.tgz", + "integrity": "sha512-xmeOILiR9LvfC8MctgeRXXN8nQTwbOvO4wHvgE8tDRsjnBpyyO0j50R4+viHXdMUGtgGkHEXRv8fFNBq54RgnA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.826.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.828.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.5.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-retry": "^4.1.12", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.19", + "@smithy/util-defaults-mode-node": "^4.0.19", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.826.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.826.0.tgz", + "integrity": "sha512-3fEi/zy6tpMzomYosksGtu7jZqGFcdBXoL7YRsG7OEeQzBbOW9B+fVaQZ4jnsViSjzA/yKydLahMrfPnt+iaxg==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.826.0", + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.828.0.tgz", + "integrity": "sha512-JdOjI/TxkfQpY/bWbdGMdCiePESXTbtl6MfnJxz35zZ3tfHvBnxAWCoYJirdmjzY/j/dFo5oEyS6mQuXAG9w2w==", + "dependencies": { + "@aws-sdk/core": "3.826.0", + "@aws-sdk/nested-clients": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.821.0.tgz", + "integrity": "sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.828.0.tgz", + "integrity": "sha512-RvKch111SblqdkPzg3oCIdlGxlQs+k+P7Etory9FmxPHyPDvsP1j1c74PmgYqtzzMWmoXTjd+c9naUHh9xG8xg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.828.0.tgz", + "integrity": "sha512-LdN6fTBzTlQmc8O8f1wiZN0qF3yBWVGis7NwpWK7FUEzP9bEZRxYfIkV9oV9zpt6iNRze1SedK3JQVB/udxBoA==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.828.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -154,6 +968,8 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -162,6 +978,8 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz", "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==", + "dev": true, + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -188,36 +1006,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" @@ -227,6 +1025,8 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "peer": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -238,97 +1038,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", - "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@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.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", - "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dependencies": { - "@babel/types": "^7.23.0" - }, + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -337,6 +1052,7 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -348,6 +1064,8 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "peer": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -362,61 +1080,21 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -425,11 +1103,13 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -439,6 +1119,8 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -447,19 +1129,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "engines": { "node": ">=6.9.0" } @@ -468,19 +1148,8 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -489,7 +1158,9 @@ "version": "7.26.10", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/template": "^7.26.9", "@babel/types": "^7.26.10" @@ -512,12 +1183,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", - "license": "MIT", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dependencies": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -526,126 +1196,12 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "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.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.6.tgz", - "integrity": "sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/plugin-syntax-decorators": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -658,212 +1214,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -871,904 +1226,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", - "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", - "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", - "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dependencies": { - "@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.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.6.tgz", - "integrity": "sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz", - "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==", - "dependencies": { - "@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.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.3", - "@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.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", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-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.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.4", - "@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.5", - "@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.3", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-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-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", @@ -1780,53 +1237,31 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.26.10.tgz", - "integrity": "sha512-JfoPiD7f/vvd/PaOfu5cr9CyzwDMPg4T0nX3MQr6IgTq49DhjvUcmjmjA7j6+xih1Evq+QKZnge1SoIlYozv/Q==", - "license": "MIT", - "dependencies": { - "core-js": "^2.6.12", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs2/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", - "license": "MIT", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", - "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1835,24 +1270,140 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", - "license": "MIT", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=10.0.0" + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, "node_modules/@eslint/eslintrc": { @@ -1899,17 +1450,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@froxz/vite-plugin-s3": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@froxz/vite-plugin-s3/-/vite-plugin-s3-1.7.1.tgz", + "integrity": "sha512-0iGJEiMI0Zy2Zq+a3sfc8yUgaRiZsy7d5Lx9LiZ6ssUM5lxmCZW4KSCjEKG2L1E3JORGoPDXBYnfb0w6jFcI7g==", "dependencies": { - "@hapi/hoek": "^9.0.0" + "@aws-sdk/client-s3": "^3.0.0", + "mime-types": "^2.1.35", + "recursive-readdir": "^2.2.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -1930,14 +1481,111 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "devOptional": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1947,14 +1595,16 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1963,73 +1613,28 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@node-ipc/js-queue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", - "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", - "dependencies": { - "easy-stack": "1.0.1" - }, - "engines": { - "node": ">=1.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@nuxt/opencollective": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.3.tgz", @@ -2111,28 +1716,82 @@ "node": ">=8" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz", + "integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz", + "integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@sinonjs/commons": { "version": "3.0.1", @@ -2173,748 +1832,699 @@ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==" }, - "node_modules/@soda/friendly-errors-webpack-plugin": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", - "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { - "chalk": "^3.0.0", - "error-stack-parser": "^2.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=18.0.0" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18.0.0" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "node_modules/@smithy/chunked-blob-reader-native": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, - "node_modules/@soda/get-current-script": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", - "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 10" + "node": ">=18.0.0" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@smithy/core": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.5.3.tgz", + "integrity": "sha512-xa5byV9fEguZNofCclv6v9ra0FYh5FATQW/da7FQUVTic94DfrN/NvmKZjrMyzbpqfot9ZjBaO8U1UeTbmSLuA==", + "dependencies": { + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10.13.0" + "node": ">=18.0.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz", + "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==", "dependencies": { - "@types/node": "*" + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz", + "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==", "dependencies": { - "@types/node": "*" + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz", + "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==", "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz", + "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz", + "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "node_modules/@smithy/fetch-http-handler": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.4.tgz", + "integrity": "sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==", "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "node_modules/@smithy/hash-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", "dependencies": { - "@types/node": "*" + "@smithy/types": "^4.3.1", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@types/minimatch": { + "node_modules/@smithy/md5-js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.11.tgz", + "integrity": "sha512-zDogwtRLzKl58lVS8wPcARevFZNBOOqnmzWWxVe9XiaXU2CADFjvJ9XfNibgkOWs08sxLuSr81NrpY4mgp9OwQ==", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.12.tgz", + "integrity": "sha512-wvIH70c4e91NtRxdaLZF+mbLZ/HcC6yg7ySKUiufL6ESp6zJUSnJucZ309AvG9nqCFHSRB5I6T3Ez1Q9wCh0Ww==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.5", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.5", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" - }, - "node_modules/@types/node": { - "version": "20.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", - "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", - "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "node_modules/@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", - "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==" - }, - "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", - "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==" - }, - "node_modules/@vue/babel-plugin-jsx": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", - "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "@vue/babel-helper-vue-transform-on": "^1.1.5", - "camelcase": "^6.3.0", - "html-tags": "^3.3.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-plugin-transform-vue-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", - "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/babel-preset-app": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", - "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/helper-compilation-targets": "^7.12.16", - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-decorators": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/runtime": "^7.12.13", - "@vue/babel-plugin-jsx": "^1.0.3", - "@vue/babel-preset-jsx": "^1.1.2", - "babel-plugin-dynamic-import-node": "^2.3.3", - "core-js": "^3.8.3", - "core-js-compat": "^3.8.3", - "semver": "^7.3.4" - }, - "peerDependencies": { - "@babel/core": "*", - "core-js": "^3", - "vue": "^2 || ^3.2.13" - }, - "peerDependenciesMeta": { - "core-js": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-preset-app/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@vue/babel-preset-app/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@vue/babel-preset-app/node_modules/yallist": { + "node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.5.tgz", + "integrity": "sha512-LvcfhrnCBvCmTee81pRlh1F39yTS/+kYleVeLCwNtkY8wtGg8V/ca9rbZZvYIl8OjlMtL6KIjaiL/lgVqHD2nA==", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.3.tgz", + "integrity": "sha512-xxzNYgA0HD6ETCe5QJubsxP0hQH3QK3kbpJz3QrosBCuIWyEXLR/CO5hFb2OeawEKUxMNhz3a1nuJNN2np2RMA==", + "dependencies": { + "@smithy/core": "^3.5.3", + "@smithy/middleware-endpoint": "^4.1.11", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@vue/babel-preset-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", - "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dependencies": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", - "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", - "@vue/babel-sugar-functional-vue": "^1.4.0", - "@vue/babel-sugar-inject-h": "^1.4.0", - "@vue/babel-sugar-v-model": "^1.4.0", - "@vue/babel-sugar-v-on": "^1.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0", - "vue": "*" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-sugar-composition-api-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", - "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-composition-api-render-instance": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", - "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-functional-vue": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", - "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", - "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-model": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", - "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/babel-sugar-v-on": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", - "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@vue/cli-overlay": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", - "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==" - }, - "node_modules/@vue/cli-plugin-babel": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", - "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", - "dependencies": { - "@babel/core": "^7.12.16", - "@vue/babel-preset-app": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "babel-loader": "^8.2.2", - "thread-loader": "^3.0.0", - "webpack": "^5.54.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-eslint": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", - "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8", - "eslint-webpack-plugin": "^3.1.0", - "globby": "^11.0.2", - "webpack": "^5.54.0", - "yorkie": "^2.0.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "eslint": ">=7.5.0" - } - }, - "node_modules/@vue/cli-plugin-router": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", - "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-unit-mocha": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-5.0.8.tgz", - "integrity": "sha512-t8eN1ttbSkHg+U7AjCKwpuhpV2OBsP35RjBkdSrcAPjoX3MxVwoWyqGPeYI+jWbPGX3tFxM/uMQwN0U3lmzH7A==", - "dependencies": { - "@vue/cli-shared-utils": "^5.0.8", - "jsdom": "^18.0.1", - "jsdom-global": "^3.0.2", - "mocha": "^8.3.0", - "mochapack": "^2.1.0" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-plugin-vuex": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", - "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-service": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", - "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.12.16", - "@soda/friendly-errors-webpack-plugin": "^1.8.0", - "@soda/get-current-script": "^1.0.2", - "@types/minimist": "^1.2.0", - "@vue/cli-overlay": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-vuex": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "@vue/component-compiler-utils": "^3.3.0", - "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", - "@vue/web-component-wrapper": "^1.3.0", - "acorn": "^8.0.5", - "acorn-walk": "^8.0.2", - "address": "^1.1.2", - "autoprefixer": "^10.2.4", - "browserslist": "^4.16.3", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "cli-highlight": "^2.1.10", - "clipboardy": "^2.3.0", - "cliui": "^7.0.4", - "copy-webpack-plugin": "^9.0.1", - "css-loader": "^6.5.0", - "css-minimizer-webpack-plugin": "^3.0.2", - "cssnano": "^5.0.0", - "debug": "^4.1.1", - "default-gateway": "^6.0.3", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "hash-sum": "^2.0.0", - "html-webpack-plugin": "^5.1.0", - "is-file-esm": "^1.0.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "mini-css-extract-plugin": "^2.5.3", - "minimist": "^1.2.5", - "module-alias": "^2.2.2", - "portfinder": "^1.0.26", - "postcss": "^8.2.6", - "postcss-loader": "^6.1.1", - "progress-webpack-plugin": "^1.0.12", - "ssri": "^8.0.1", - "terser-webpack-plugin": "^5.1.1", - "thread-loader": "^3.0.0", - "vue-loader": "^17.0.0", - "vue-style-loader": "^4.1.3", - "webpack": "^5.54.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-chain": "^6.5.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.7.3", - "webpack-virtual-modules": "^0.4.2", - "whatwg-fetch": "^3.6.2" - }, - "bin": { - "vue-cli-service": "bin/vue-cli-service.js" + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.0.0 || >= 14.0.0" - }, - "peerDependencies": { - "vue-template-compiler": "^2.0.0", - "webpack-sources": "*" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "less-loader": { - "optional": true - }, - "pug-plain-loader": { - "optional": true - }, - "raw-loader": { - "optional": true - }, - "sass-loader": { - "optional": true - }, - "stylus-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - }, - "webpack-sources": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@vue/cli-shared-utils": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", - "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dependencies": { - "@achrinza/node-ipc": "^9.2.5", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "joi": "^17.4.0", - "launch-editor": "^2.2.1", - "lru-cache": "^6.0.0", - "node-fetch": "^2.6.7", - "open": "^8.0.2", - "ora": "^5.3.0", - "read-pkg": "^5.1.1", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@vue/cli-shared-utils/node_modules/ansi-styles": { + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.19.tgz", + "integrity": "sha512-mvLMh87xSmQrV5XqnUYEPoiFFeEGYeAKIDDKdhE2ahqitm8OHM3aSvhqL6rrK6wm1brIk90JhxDf5lf2hbrLbQ==", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.19.tgz", + "integrity": "sha512-8tYnx+LUfj6m+zkUUIrIQJxPM1xVxfRBvoGHua7R/i6qAxOMjqR6CpEpDwKoIs1o0+hOjGvkKE23CafKL0vJ9w==", + "dependencies": { + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.5.tgz", + "integrity": "sha512-V7MSjVDTlEt/plmOFBn1762Dyu5uqMrV2Pl2X0dYk4XvWfdWJNe9Bs5Bzb56wkCuiWjSfClVMGcsuKrGj7S/yg==", + "dependencies": { + "@smithy/service-error-classification": "^4.0.5", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.2.tgz", + "integrity": "sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==", + "dependencies": { + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.5.tgz", + "integrity": "sha512-4QvC49HTteI1gfemu0I1syWovJgPvGn7CVUoN9ZFkdvr/cCFkrEL7qNCdx/2eICqDWEGnnr68oMdSIPCLAriSQ==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2925,10 +2535,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vue/cli-shared-utils/node_modules/chalk": { + "node_modules/@testing-library/dom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2940,10 +2551,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@vue/cli-shared-utils/node_modules/color-convert": { + "node_modules/@testing-library/dom/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2951,48 +2563,26 @@ "node": ">=7.0.0" } }, - "node_modules/@vue/cli-shared-utils/node_modules/color-name": { + "node_modules/@testing-library/dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@vue/cli-shared-utils/node_modules/has-flag": { + "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/supports-color": { + "node_modules/@testing-library/dom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3000,10 +2590,219 @@ "node": ">=8" } }, - "node_modules/@vue/cli-shared-utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/node": { + "version": "20.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz", + "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@vitejs/plugin-vue2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue2/-/plugin-vue2-2.3.3.tgz", + "integrity": "sha512-qexY6+bbwY8h0AZerzUuGywNTi0cLOkbiSbggr0R3WEW95iB2hblQFyv4MAkkc2vm4gZN1cO5kzT1Kp6xlVzZw==", + "engines": { + "node": "^14.18.0 || >= 16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "vue": "^2.7.0-0" + } + }, + "node_modules/@vitest/browser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.2.3.tgz", + "integrity": "sha512-5HpUb0ixGF8JWSAjb/P1x/VPuTYUkL4pL0+YO6DJiuvQgqJN3PREaUEcXwfXjU4nBc37EahfpRbAwdE9pHs9lQ==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "@vitest/mocker": "3.2.3", + "@vitest/utils": "3.2.3", + "magic-string": "^0.30.17", + "sirv": "^3.0.1", + "tinyrainbow": "^2.0.0", + "ws": "^8.18.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "3.2.3", + "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz", + "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz", + "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.2.3", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz", + "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.2.3", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz", + "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz", + "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==", + "dev": true, + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz", + "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.2.3", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, "node_modules/@vue/compiler-sfc": { "version": "2.7.16", @@ -3018,64 +2817,6 @@ "prettier": "^1.18.2 || ^2.0.0" } }, - "node_modules/@vue/component-compiler-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", - "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", - "dependencies": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.36", - "postcss-selector-parser": "^6.0.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, "node_modules/@vue/test-utils": { "version": "1.0.0-beta.29", "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz", @@ -3089,48 +2830,11 @@ "vue-template-compiler": "^2.x" } }, - "node_modules/@vue/vue-loader-v15": { - "name": "vue-loader", - "version": "15.11.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", - "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", - "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "prettier": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/@vue/web-component-wrapper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", - "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==" - }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -3139,22 +2843,26 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3164,12 +2872,14 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3181,6 +2891,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -3189,6 +2900,7 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -3196,12 +2908,14 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3217,6 +2931,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -3229,6 +2944,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", @@ -3240,6 +2956,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3253,6 +2970,7 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" @@ -3261,30 +2979,14 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/acorn": { "version": "8.11.2", @@ -3297,38 +2999,11 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, "peerDependencies": { "acorn": "^8" } @@ -3341,31 +3016,13 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -3383,46 +3040,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "peerDependencies": { "ajv": "^6.9.1" } @@ -3448,25 +3070,6 @@ "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3486,11 +3089,6 @@ "node": ">=4" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -3503,25 +3101,6 @@ "node": ">= 8" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3530,6 +3109,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -3542,11 +3130,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, "node_modules/array-includes": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", @@ -3565,14 +3148,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -3684,18 +3259,10 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -3711,11 +3278,11 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -3757,65 +3324,6 @@ "axios": "0.x" } }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-lodash": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz", @@ -3829,79 +3337,11 @@ "require-package-name": "^2.0.1" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", - "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.4", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", - "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4", - "core-js-compat": "^3.33.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", - "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3910,99 +3350,11 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, "node_modules/blueimp-md5": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, "node_modules/bootstrap": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", @@ -4035,6 +3387,11 @@ "vue-functional-data-merge": "^3.1.0" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4055,20 +3412,16 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "funding": [ { "type": "opencollective", @@ -4084,10 +3437,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -4096,40 +3449,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, "node_modules/call-bind": { @@ -4185,19 +3517,11 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4205,21 +3529,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001571", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001571.tgz", - "integrity": "sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==", + "version": "1.0.30001722", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001722.tgz", + "integrity": "sha512-DCQHBBZtiK6JVkAGw7drvAMK0Q0POD/xZvEmDp6baiMMP6QXXk9HpD6mNYBZWhOPG6LvIDb82ITqtWjhDckHCA==", "funding": [ { "type": "opencollective", @@ -4235,18 +3548,10 @@ } ] }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "dependencies": { "assertion-error": "^2.0.1", @@ -4316,145 +3621,11 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, "engines": { "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/cli-highlight/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "dependencies": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4465,27 +3636,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4499,16 +3649,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4520,60 +3660,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4584,173 +3670,22 @@ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, - "node_modules/consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", - "dependencies": { - "bluebird": "^3.1.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-webpack-plugin": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", - "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", - "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", - "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", - "dependencies": { - "browserslist": "^4.22.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4760,358 +3695,49 @@ "node": ">= 8" } }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.21", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.3", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" - }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.4.0.tgz", + "integrity": "sha512-W0Y2HOXlPkb2yaKrCVRjinYKciu/qSLEmK0K9mcfDei3zwlnHFEHAs/Du3cIRwPqY+J4JsiBzUjoHyc8RsJ03A==", + "dev": true, "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, "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" }, "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "peer": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5126,6 +3752,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -5134,9 +3761,10 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true }, "node_modules/decode-uri-component": { "version": "0.4.1", @@ -5160,91 +3788,6 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -5261,14 +3804,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -5293,63 +3828,24 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "engines": { "node": ">=6" } }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -5361,104 +3857,17 @@ "node": ">=6.0.0" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true }, "node_modules/dom-event-types": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.1.0.tgz", "integrity": "sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ==" }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", @@ -5472,28 +3881,16 @@ "node": ">= 0.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.616", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", - "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==" + "version": "1.5.166", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.166.tgz", + "integrity": "sha512-QPWqHL0BglzPYyJJ1zSSmwFFL6MFXhbACOCcsCdUMCkzPdS9/OIBVxg516X/Ado2qwAq8k0nJJ7phQPCqiaFAw==" }, "node_modules/element-in-view": { "version": "0.1.0", @@ -5505,34 +3902,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5554,35 +3928,14 @@ } }, "node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/es-abstract": { @@ -5654,9 +4007,10 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true }, "node_modules/es-object-atoms": { "version": "1.0.0", @@ -5706,19 +4060,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esbuild": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.5", + "@esbuild/android-arm": "0.25.5", + "@esbuild/android-arm64": "0.25.5", + "@esbuild/android-x64": "0.25.5", + "@esbuild/darwin-arm64": "0.25.5", + "@esbuild/darwin-x64": "0.25.5", + "@esbuild/freebsd-arm64": "0.25.5", + "@esbuild/freebsd-x64": "0.25.5", + "@esbuild/linux-arm": "0.25.5", + "@esbuild/linux-arm64": "0.25.5", + "@esbuild/linux-ia32": "0.25.5", + "@esbuild/linux-loong64": "0.25.5", + "@esbuild/linux-mips64el": "0.25.5", + "@esbuild/linux-ppc64": "0.25.5", + "@esbuild/linux-riscv64": "0.25.5", + "@esbuild/linux-s390x": "0.25.5", + "@esbuild/linux-x64": "0.25.5", + "@esbuild/netbsd-arm64": "0.25.5", + "@esbuild/netbsd-x64": "0.25.5", + "@esbuild/openbsd-arm64": "0.25.5", + "@esbuild/openbsd-x64": "0.25.5", + "@esbuild/sunos-x64": "0.25.5", + "@esbuild/win32-arm64": "0.25.5", + "@esbuild/win32-ia32": "0.25.5", + "@esbuild/win32-x64": "0.25.5" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -5727,34 +4115,6 @@ "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -6291,113 +4651,6 @@ "node": ">=4" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -6637,6 +4890,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6645,226 +4907,29 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=12.0.0" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6875,34 +4940,25 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" + "strnum": "^1.0.5" }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" + "bin": { + "fxparser": "src/cli/cli.js" } }, "node_modules/file-entry-cache": { @@ -6938,56 +4994,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7003,6 +5014,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } @@ -7052,6 +5064,22 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -7065,14 +5093,6 @@ "node": ">= 6" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fp-ts": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.1.tgz", @@ -7091,33 +5111,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7165,6 +5158,8 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, "engines": { "node": ">=6.9.0" } @@ -7177,15 +5172,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", @@ -7209,17 +5195,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -7254,26 +5229,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -7292,33 +5258,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -7333,29 +5272,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/habitica-markdown": { "version": "3.0.0", @@ -7376,10 +5294,25 @@ "markdown-it-emoji": "^1.1.1" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "node_modules/habitica-markdown/node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" + }, + "node_modules/habitica-markdown/node_modules/markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dependencies": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } }, "node_modules/has-bigints": { "version": "1.0.2", @@ -7444,11 +5377,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -7473,277 +5401,56 @@ "resolved": "https://registry.npmjs.org/hellojs/-/hellojs-1.20.0.tgz", "integrity": "sha512-zfZGRt0J0OpJHnw2GJz4uh+rzMNAMWpIymiaRbSmCqCvqDMLSx2/qR5JucqnHPsZHUEjyKj5aLJ8K54kyHHjLQ==" }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "engines": { - "node": "*" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "node": ">=18" } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" + "node": ">= 14" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -7906,14 +5613,6 @@ "node": ">= 0.4" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/intro.js": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/intro.js/-/intro.js-7.2.0.tgz", @@ -7938,14 +5637,6 @@ "io-ts": "^2.0.0" } }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7974,11 +5665,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8027,17 +5713,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -8063,20 +5738,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8085,14 +5746,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-file-esm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", - "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", - "dependencies": { - "read-pkg-up": "^7.0.1" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -8126,14 +5779,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -8183,31 +5828,19 @@ } }, "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.4", @@ -8235,14 +5868,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -8289,6 +5914,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -8307,44 +5933,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -8358,6 +5971,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -8366,6 +5980,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8376,31 +5991,11 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "node_modules/js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8419,43 +6014,37 @@ } }, "node_modules/jsdom": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-18.1.1.tgz", - "integrity": "sha512-NmJQbjQ/gpS/1at/ce3nCx89HbXL/f5OcenBe8wU1Eik0ROhyUc3LtmG3567dEHAGXkN8rmILW/qtCOPxPHQJw==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.5.0", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.1", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^10.0.0", - "ws": "^8.2.3", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -8463,28 +6052,16 @@ } } }, - "node_modules/jsdom-global": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz", - "integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg==", - "peerDependencies": { - "jsdom": ">=10.0.0" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -8492,15 +6069,11 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -8516,6 +6089,8 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true, "bin": { "json5": "lib/cli.js" }, @@ -8523,17 +6098,6 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/just-extend": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", @@ -8547,39 +6111,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/launch-editor-middleware": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", - "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", - "dependencies": { - "launch-editor": "^2.6.1" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8592,19 +6123,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, "node_modules/linkify-it": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", @@ -8617,38 +6135,16 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, "engines": { "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -8664,41 +6160,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -8709,26 +6175,27 @@ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8743,6 +6210,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8758,6 +6226,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8768,12 +6237,14 @@ "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -8782,6 +6253,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8789,164 +6261,54 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "dev": true }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdown-it-emoji": { @@ -8987,6 +6349,29 @@ "markdown-it": "bin/markdown-it.js" } }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/markdown-it/node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/markdown-it/node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "node_modules/math-intrinsics": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", @@ -8995,103 +6380,16 @@ "node": ">= 0.4" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dependencies": { - "source-map": "^0.6.1" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/mime-db": { "version": "1.52.0", @@ -9112,86 +6410,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -9212,113 +6430,98 @@ } }, "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.6.0.tgz", + "integrity": "sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==", + "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -9326,18 +6529,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -9346,33 +6571,38 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dependencies": { - "randombytes": "^2.1.0" + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9383,288 +6613,33 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mochapack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/mochapack/-/mochapack-2.1.4.tgz", - "integrity": "sha512-qoZYT8ibht6z35e936P6Y/3nynFX843Jm+2l/pNWB3Sue63IHBfqZeAnF6Ypez85kUll7HtapMogfO2hGb2N2Q==", + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { - "@babel/runtime-corejs2": "^7.0.0", - "chalk": "^2.4.2", - "chokidar": "^3.5.2", - "glob-parent": "5.1.2", - "globby": "^10.0.1", - "interpret": "^1.2.0", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "memory-fs": "^0.4.1", - "minimatch": "^3.0.4", - "nodent-runtime": "^3.2.1", - "normalize-path": "^3.0.0", - "progress": "^2.0.3", - "source-map-support": "^0.5.13", - "toposort": "^2.0.2", - "yargs": "14.0.0" - }, - "bin": { - "mochapack": "bin/mochapack" - }, - "peerDependencies": { - "mocha": ">=6", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/mochapack/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mochapack/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mochapack/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mochapack/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/mochapack/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/mochapack/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochapack/node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/mochapack/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mochapack/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mochapack/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mochapack/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mochapack/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mochapack/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/mochapack/node_modules/yargs": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.0.0.tgz", - "integrity": "sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow==", - "dependencies": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/mochapack/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "node_modules/mocha/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/module-alias": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" - }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -9673,57 +6648,30 @@ "node": "*" } }, - "node_modules/moment-locales-webpack-plugin": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.2.0.tgz", - "integrity": "sha512-QAi5v0OlPUP7GXviKMtxnpBAo8WmTHrUNN7iciAhNOEAd9evCOvuN0g1N7ThIg3q11GLCkjY1zQ2saRcf/43nQ==", - "dependencies": { - "lodash.difference": "^4.5.0" - }, - "peerDependencies": { - "moment": "^2.8.0", - "webpack": "^1 || ^2 || ^3 || ^4 || ^5" - } - }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, "engines": { "node": ">=10" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9750,23 +6698,11 @@ "node": ">= 0.4.0" } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/nise": { "version": "5.1.9", @@ -9785,15 +6721,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9832,43 +6759,10 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/nodent-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", - "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==", - "hasInstallScript": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -9886,59 +6780,11 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true }, "node_modules/object-inspect": { "version": "1.13.3", @@ -10047,30 +6893,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10079,44 +6901,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -10133,119 +6917,11 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10260,6 +6936,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -10270,34 +6947,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -10310,62 +6964,35 @@ "node": ">=6" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { + "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -10391,19 +7018,34 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -10414,9 +7056,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10441,63 +7083,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/playwright": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.0.tgz", + "integrity": "sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==", + "dev": true, "dependencies": { - "find-up": "^4.0.0" + "playwright-core": "1.53.0" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "node_modules/playwright-core": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.0.tgz", + "integrity": "sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==", + "dev": true, + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/popper.js": { @@ -10518,39 +7131,10 @@ "vue": "^2.5.18" } }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", + "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", "funding": [ { "type": "opencollective", @@ -10566,532 +7150,19 @@ } ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz", - "integrity": "sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.14.tgz", - "integrity": "sha512-65xXYsT40i9GyWzlHQ5ShZoK7JZdySeOozi/tz2EezDo6c04q6+ckYMeoY7idaie1qp2dT5KoYQ2yky6JuoHnA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -11115,19 +7186,31 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, "node_modules/progress": { "version": "2.0.3", @@ -11137,71 +7220,11 @@ "node": ">=0.4.0" } }, - "node_modules/progress-webpack-plugin": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", - "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", - "dependencies": { - "chalk": "^2.1.0", - "figures": "^2.0.0", - "log-update": "^2.3.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -11210,18 +7233,12 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, "node_modules/query-string": { @@ -11240,30 +7257,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", @@ -11273,139 +7266,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/readdirp": { "version": "3.5.0", @@ -11418,20 +7288,15 @@ "node": ">=8.10.0" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { - "regenerate": "^1.4.2" + "minimatch": "^3.0.5" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, "node_modules/regenerator-runtime": { @@ -11439,14 +7304,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", @@ -11474,61 +7331,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11545,22 +7347,12 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "node_modules/require-package-name": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==", "dev": true }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -11585,35 +7377,6 @@ "node": ">=4" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -11628,28 +7391,50 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/rollup": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz", + "integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==", "dependencies": { - "queue-microtask": "^1.2.2" + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.43.0", + "@rollup/rollup-android-arm64": "4.43.0", + "@rollup/rollup-darwin-arm64": "4.43.0", + "@rollup/rollup-darwin-x64": "4.43.0", + "@rollup/rollup-freebsd-arm64": "4.43.0", + "@rollup/rollup-freebsd-x64": "4.43.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.43.0", + "@rollup/rollup-linux-arm-musleabihf": "4.43.0", + "@rollup/rollup-linux-arm64-gnu": "4.43.0", + "@rollup/rollup-linux-arm64-musl": "4.43.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.43.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-gnu": "4.43.0", + "@rollup/rollup-linux-riscv64-musl": "4.43.0", + "@rollup/rollup-linux-s390x-gnu": "4.43.0", + "@rollup/rollup-linux-x64-gnu": "4.43.0", + "@rollup/rollup-linux-x64-musl": "4.43.0", + "@rollup/rollup-win32-arm64-msvc": "4.43.0", + "@rollup/rollup-win32-ia32-msvc": "4.43.0", + "@rollup/rollup-win32-x64-msvc": "4.43.0", + "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, "node_modules/safe-array-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", @@ -11675,7 +7460,8 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safe-regex-test": { "version": "1.0.2", @@ -11696,7 +7482,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sass": { "version": "1.69.5", @@ -11714,71 +7501,16 @@ "node": ">=14.0.0" } }, - "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=v12.22.7" } }, "node_modules/secure-keys": { @@ -11786,23 +7518,6 @@ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg==" }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -11817,153 +7532,16 @@ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -11998,22 +7576,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -12033,14 +7595,6 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -12109,10 +7663,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sinon": { "version": "17.0.1", @@ -12159,24 +7726,17 @@ } }, "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/slice-ansi": { @@ -12225,24 +7785,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/sortablejs": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", @@ -12257,9 +7799,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -12268,80 +7810,12 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/split-on-first": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", @@ -12358,49 +7832,23 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true }, "node_modules/stopword": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/stopword/-/stopword-2.0.8.tgz", "integrity": "sha512-btlEC2vEuhCuvshz99hSGsY8GzaP5qzDPQm56j6rR/R38p8xdsOXgU5a6tIgvU/4hcCta1Vlo/2FVXA9m0f8XA==" }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -12414,6 +7862,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", @@ -12467,6 +7930,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -12475,30 +7951,6 @@ "node": ">=4" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -12510,21 +7962,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "js-tokens": "^9.0.1" }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12547,43 +8013,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/table": { "version": "6.8.1", @@ -12624,14 +8058,21 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } }, + "node_modules/tar-mini": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", + "integrity": "sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==" + }, "node_modules/terser": { "version": "5.26.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "devOptional": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -12649,6 +8090,7 @@ "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -12682,6 +8124,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -12698,84 +8141,14 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/thread-loader": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", - "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", - "dependencies": { - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/thread-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/thread-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", @@ -12784,11 +8157,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -12800,6 +8168,102 @@ "node": ">=0.6.0" } }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12811,58 +8275,37 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" - }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/tsconfig-paths": { @@ -12911,26 +8354,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", @@ -13014,64 +8437,13 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", @@ -13087,8 +8459,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -13105,15 +8477,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -13126,24 +8489,6 @@ "which-typed-array": "^1.1.2" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -13161,15 +8506,6 @@ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", @@ -13178,12 +8514,219 @@ "node": ">= 0.10" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 0.8" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz", + "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-compression2": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-1.4.0.tgz", + "integrity": "sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "tar-mini": "^0.2.0" + }, + "peerDependencies": { + "vite": "^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz", + "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==", + "dev": true, + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.3", + "@vitest/mocker": "3.2.3", + "@vitest/pretty-format": "^3.2.3", + "@vitest/runner": "3.2.3", + "@vitest/snapshot": "3.2.3", + "@vitest/spy": "3.2.3", + "@vitest/utils": "3.2.3", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.0", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.3", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.3", + "@vitest/ui": "3.2.3", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/vue": { @@ -13255,96 +8798,6 @@ "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" }, - "node_modules/vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==" - }, - "node_modules/vue-loader": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.0.tgz", - "integrity": "sha512-tq81JlBNWYvoYAh5PRZXg5bE7BEv0Id6W7BF5otj18MtHgu5OqiK9rQu0z73r+VGlIq0lLDoEeC7RWYynUpXlQ==", - "dependencies": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "watchpack": "^2.4.0" - }, - "peerDependencies": { - "webpack": "^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/vue-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vue-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/vue-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/vue-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vue-mugen-scroll": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/vue-mugen-scroll/-/vue-mugen-scroll-0.2.6.tgz", @@ -13362,59 +8815,16 @@ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz", "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" }, - "node_modules/vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", - "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "node_modules/vue-style-loader/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==" - }, - "node_modules/vue-template-babel-compiler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vue-template-babel-compiler/-/vue-template-babel-compiler-2.0.0.tgz", - "integrity": "sha512-O0GOktQ5TZCZ5sWVl8CbyLBFriwwai7xDBtpdUI1xZSbbVVNf5Um/mDHYJXaHX6vfhmeAuohggXxIi0RPgXZ4g==", - "dependencies": { - "@babel/core": "^7.14.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.5", - "@babel/types": "^7.14.5", - "deepmerge": "^4.2.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "vue-template-compiler": "^2.6.0" - } - }, "node_modules/vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "peer": true, "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==" - }, "node_modules/vuedraggable": { "version": "2.24.3", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", @@ -13432,30 +8842,23 @@ "vue": "^2.6.10" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -13464,26 +8867,11 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, "engines": { "node": ">=12" } @@ -13492,6 +8880,7 @@ "version": "5.94.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", @@ -13533,356 +8922,20 @@ } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-chain": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", - "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-chain/node_modules/deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==" - }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13896,72 +8949,38 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", - "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, "dependencies": { - "tr46": "^3.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/which": { @@ -13993,11 +9012,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, "node_modules/which-typed-array": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", @@ -14016,62 +9030,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==" + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz", + "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -14089,6 +9068,57 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14125,9 +9155,10 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "dev": true, "engines": { "node": ">=10.0.0" }, @@ -14145,17 +9176,19 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", @@ -14168,15 +9201,9 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true }, "node_modules/yargs": { "version": "16.2.0", @@ -14207,6 +9234,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -14217,126 +9245,17 @@ "node": ">=10" } }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "hasInstallScript": true, - "dependencies": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/yorkie/node_modules/execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/yorkie/node_modules/normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/yorkie/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" } } } diff --git a/website/client/package.json b/website/client/package.json index e9b1fe2689..62da71d323 100644 --- a/website/client/package.json +++ b/website/client/package.json @@ -3,28 +3,26 @@ "version": "1.0.0", "private": true, "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "test:unit": "vue-cli-service test:unit --require ./tests/unit/helpers.js", - "lint": "vue-cli-service lint .", - "lint-no-fix": "vue-cli-service lint --no-fix .", + "serve": "vite", + "build": "vite build", + "preview": "vite preview", + "test:unit": "vitest run", + "test:unit:watch": "vitest watch", + "lint": "eslint --ext .js,.vue --ignore-path ../../.gitignore --fix .", + "lint-no-fix": "eslint --ext .js,.vue --no-fix src", "postinstall": "node ./scripts/npm-postinstall.js" }, "dependencies": { - "@vue/cli-plugin-babel": "^5.0.8", - "@vue/cli-plugin-eslint": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-unit-mocha": "^5.0.8", - "@vue/cli-service": "^5.0.8", + "@froxz/vite-plugin-s3": "^1.6.0", + "@vitejs/plugin-vue2": "^2.3.3", "@vue/test-utils": "1.0.0-beta.29", "amplitude-js": "^8.21.3", "assert": "^2.1.0", + "autoprefixer": "^10.4.20", "axios": "^0.28.0", "axios-progress-bar": "^1.2.0", - "babel-eslint": "^10.1.0", "bootstrap": "^4.6.0", "bootstrap-vue": "^2.23.1", - "core-js": "^3.33.1", "eslint": "7.32.0", "eslint-config-habitrpg": "6.2.0", "eslint-plugin-mocha": "5.3.0", @@ -34,31 +32,34 @@ "intro.js": "^7.2.0", "jquery": "^3.7.1", "lodash": "^4.17.21", + "markdown-it": "^14.0.0", "moment": "^2.29.4", - "moment-locales-webpack-plugin": "^1.2.0", "nconf": "^0.12.1", "sass": "^1.63.4", - "sass-loader": "^14.1.1", "sinon": "^17.0.1", "stopword": "^2.0.8", "timers-browserify": "^2.0.12", "uuid": "^9.0.1", "validator": "^13.9.0", + "vite": "^6.0.0", + "vite-plugin-compression2": "^1.3.3", "vue": "^2.7.10", "vue-fragment": "^1.6.0", "vue-mugen-scroll": "^0.2.6", "vue-router": "^3.6.5", - "vue-template-babel-compiler": "^2.0.0", - "vue-template-compiler": "^2.7.10", "vuedraggable": "^2.24.3", "vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#153d339e4dbebb73733658aeda1d5b7fcc55b0a0" }, "devDependencies": { "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@vitest/browser": "^3.0.5", "babel-plugin-lodash": "^3.3.4", - "chai": "^5.1.0", "inspectpack": "^4.7.1", + "jsdom": "^26.0.0", + "mocha": "^11.1.0", + "playwright": "^1.50.1", "terser-webpack-plugin": "^5.3.10", + "vitest": "^3.0.5", "webpack": "^5.94.0" } } diff --git a/website/client/src/app.vue b/website/client/src/app.vue index e839ffd9b5..245e75706f 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -29,12 +29,14 @@ - +
+ +
- diff --git a/website/client/src/assets/scss/banner.scss b/website/client/src/assets/scss/banner.scss index 6461aff450..e00cfb4e29 100644 --- a/website/client/src/assets/scss/banner.scss +++ b/website/client/src/assets/scss/banner.scss @@ -1,5 +1,5 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .featured-label { width: auto; diff --git a/website/client/src/assets/scss/bootstrap.scss b/website/client/src/assets/scss/bootstrap.scss index fc701daed6..5b5effb077 100644 --- a/website/client/src/assets/scss/bootstrap.scss +++ b/website/client/src/assets/scss/bootstrap.scss @@ -2,7 +2,7 @@ $grid-gutter-width: 24px; // Bootstrap and its default variables -@import 'node_modules/bootstrap/scss/bootstrap'; +@import '~/bootstrap/scss/bootstrap'; // Bootstrap Vue styles -@import 'node_modules/bootstrap-vue/dist/bootstrap-vue'; \ No newline at end of file +@import '~/bootstrap-vue/dist/bootstrap-vue'; \ No newline at end of file diff --git a/website/client/src/assets/scss/faq.scss b/website/client/src/assets/scss/faq.scss index 481a6016dd..aac66e0fbf 100644 --- a/website/client/src/assets/scss/faq.scss +++ b/website/client/src/assets/scss/faq.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; h1 { margin-top: 0px; diff --git a/website/client/src/assets/scss/form.scss b/website/client/src/assets/scss/form.scss index b572ec26bf..a7b0f3863c 100644 --- a/website/client/src/assets/scss/form.scss +++ b/website/client/src/assets/scss/form.scss @@ -61,13 +61,13 @@ input, textarea, input.form-control, textarea.form-control { &.input-valid { padding-right: 27px; - background-image: url(~@/assets/svg/for-css/check.svg); + background-image: url(@/assets/svg/for-css/check.svg); background-size: 1rem; } &.input-invalid { padding-right: 40px; - background-image: url(~@/assets/svg/for-css/alert.svg); + background-image: url(@/assets/svg/for-css/alert.svg); background-size: 16px 16px; border-color: $red-100 !important; } @@ -239,7 +239,7 @@ $bg-disabled-control: $gray-10; &:checked~.custom-control-label::after { width: 18px; height: 18px; - background-image: url(~@/assets/svg/for-css/checkbox-white.svg); + background-image: url(@/assets/svg/for-css/checkbox-white.svg); background-size: 13px 10px; } diff --git a/website/client/src/assets/scss/iconalert.scss b/website/client/src/assets/scss/iconalert.scss index ddb2e03f46..acde7f23c6 100644 --- a/website/client/src/assets/scss/iconalert.scss +++ b/website/client/src/assets/scss/iconalert.scss @@ -29,13 +29,13 @@ } .iconalert-success::before { - background-image: url(~@/assets/svg/for-css/checkbox-white.svg); + background-image: url(@/assets/svg/for-css/checkbox-white.svg); background-size: 13px 10px; background-color: #1ca372; } .iconalert-warning::before, .iconalert-error::before { - background-image: url(~@/assets/svg/for-css/alert-white.svg); + background-image: url(@/assets/svg/for-css/alert-white.svg); background-size: 16px 16px; } diff --git a/website/client/src/assets/scss/modal.scss b/website/client/src/assets/scss/modal.scss index 1c88d6a775..375b429f43 100644 --- a/website/client/src/assets/scss/modal.scss +++ b/website/client/src/assets/scss/modal.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .modal { z-index: 1350; diff --git a/website/client/src/assets/scss/static.scss b/website/client/src/assets/scss/static.scss index 9a9b9ee51e..9d3b18ef79 100644 --- a/website/client/src/assets/scss/static.scss +++ b/website/client/src/assets/scss/static.scss @@ -1,4 +1,4 @@ -@import '~@/assets/scss/colors.scss'; +@import '@/assets/scss/colors.scss'; .container-fluid.static-view { margin: 5em 2em 0 2em; diff --git a/website/client/src/components/404.vue b/website/client/src/components/404.vue index e5f713b0ae..724248a113 100644 --- a/website/client/src/components/404.vue +++ b/website/client/src/components/404.vue @@ -4,7 +4,7 @@

@@ -48,7 +48,7 @@ export default { diff --git a/website/client/src/pages/settings/siteDataRows/apiRow.vue b/website/client/src/pages/settings/siteDataRows/apiRow.vue index b9e9a94920..037f5dbe3b 100644 --- a/website/client/src/pages/settings/siteDataRows/apiRow.vue +++ b/website/client/src/pages/settings/siteDataRows/apiRow.vue @@ -52,7 +52,7 @@ diff --git a/website/client/src/pages/settings/siteDataRows/webhooksRow.vue b/website/client/src/pages/settings/siteDataRows/webhooksRow.vue index 55992ace6f..035c253796 100644 --- a/website/client/src/pages/settings/siteDataRows/webhooksRow.vue +++ b/website/client/src/pages/settings/siteDataRows/webhooksRow.vue @@ -137,7 +137,7 @@ - &.groups-background { - background-color: white; - background-image: url('../assets/images/group-plans-static/top.svg'); - background-repeat: no-repeat; - } - } + + .modal-backdrop { + opacity: .9 !important; + background-color: $purple-100 !important; + } - + /* Push progress bar above modals */ + #nprogress .bar { + z-index: 1600 !important; /* Must stay above nav bar */ + } + - - - diff --git a/website/client/src/router/shared-route-imports.js b/website/client/src/router/shared-route-imports.js index e3b5d24d13..46e646fc2f 100644 --- a/website/client/src/router/shared-route-imports.js +++ b/website/client/src/router/shared-route-imports.js @@ -1 +1 @@ -export const NotFoundPage = () => import(/* webpackChunkName: "not-found" */'@/components/404'); +export const NotFoundPage = () => import('@/components/404'); diff --git a/website/client/src/router/static-routes.js b/website/client/src/router/static-routes.js index d0eff40690..e896041f97 100644 --- a/website/client/src/router/static-routes.js +++ b/website/client/src/router/static-routes.js @@ -2,27 +2,27 @@ import { NotFoundPage } from './shared-route-imports'; -const StaticWrapper = () => import(/* webpackChunkName: "entry" */'@/components/static/staticWrapper'); -const HomePage = () => import(/* webpackChunkName: "entry" */'@/components/static/home'); +const StaticWrapper = () => import('@/components/static/staticWrapper'); +const HomePage = () => import('@/components/static/home'); -const AppleRedirectPage = () => import(/* webpackChunkName: "static" */'@/components/static/appleRedirect'); -const ClearBrowserDataPage = () => import(/* webpackChunkName: "static" */'@/components/static/clearBrowserData'); -const CommunityGuidelinesPage = () => import(/* webpackChunkName: "static" */'@/components/static/communityGuidelines'); -const ContactPage = () => import(/* webpackChunkName: "static" */'@/components/static/contact'); -const FAQPage = () => import(/* webpackChunkName: "static" */'@/components/static/faq'); -const ChatSunsetFaq = () => import(/* webpackChunkName: "static" */'@/components/static/chatSunsetFaq'); -const ContentScheduleFaq = () => import(/* webpackChunkName: "static" */'@/components/static/contentScheduleFaq'); -const SubscriptionBenefitsFaq = () => import(/* webpackChunkName: "static" */'@/components/static/subscriptionBenefitsFaq'); -const FeaturesPage = () => import(/* webpackChunkName: "static" */'@/components/static/features'); -const GroupPlansPage = () => import(/* webpackChunkName: "static" */'@/components/static/groupPlans'); +const AppleRedirectPage = () => import('@/components/static/appleRedirect'); +const ClearBrowserDataPage = () => import('@/components/static/clearBrowserData'); +const CommunityGuidelinesPage = () => import('@/components/static/communityGuidelines'); +const ContactPage = () => import('@/components/static/contact'); +const FAQPage = () => import('@/components/static/faq'); +const ChatSunsetFaq = () => import('@/components/static/chatSunsetFaq'); +const ContentScheduleFaq = () => import('@/components/static/contentScheduleFaq'); +const SubscriptionBenefitsFaq = () => import('@/components/static/subscriptionBenefitsFaq'); +const FeaturesPage = () => import('@/components/static/features'); +const GroupPlansPage = () => import('@/components/static/groupPlans'); // Commenting out merch page see // https://github.com/HabitRPG/habitica/issues/12039 -// const MerchPage = () => import(/* webpackChunkName: "static" */'@/components/static/merch'); -const NewsPage = () => import(/* webpackChunkName: "static" */'@/components/static/newStuff'); -const OverviewPage = () => import(/* webpackChunkName: "static" */'@/components/static/overview'); -const PressKitPage = () => import(/* webpackChunkName: "static" */'@/components/static/pressKit'); -const PrivacyPage = () => import(/* webpackChunkName: "static" */'@/components/static/privacy'); -const TermsPage = () => import(/* webpackChunkName: "static" */'@/components/static/terms'); +// const MerchPage = () => import('@/components/static/merch'); +const NewsPage = () => import('@/components/static/newStuff'); +const OverviewPage = () => import('@/components/static/overview'); +const PressKitPage = () => import('@/components/static/pressKit'); +const PrivacyPage = () => import('@/components/static/privacy'); +const TermsPage = () => import('@/components/static/terms'); export const STATIC_ROUTES = { path: '/static', diff --git a/website/client/src/router/user-routes.js b/website/client/src/router/user-routes.js index 4e59fa9d1e..aefb197384 100644 --- a/website/client/src/router/user-routes.js +++ b/website/client/src/router/user-routes.js @@ -1,16 +1,16 @@ import ParentPage from '@/components/parentPage.vue'; // Settings -const Settings = () => import(/* webpackChunkName: "settings" */'@/pages/settings-overview'); -const GeneralSettings = () => import(/* webpackChunkName: "settings" */'@/pages/settings/generalSettings'); -const Notifications = () => import(/* webpackChunkName: "settings" */'@/pages/settings/notificationSettings'); -const Transactions = () => import(/* webpackChunkName: "settings" */'@/pages/settings/purchaseHistory.vue'); +const Settings = () => import('@/pages/settings-overview'); +const GeneralSettings = () => import('@/pages/settings/generalSettings'); +const Notifications = () => import('@/pages/settings/notificationSettings'); +const Transactions = () => import('@/pages/settings/purchaseHistory.vue'); -const SiteData = () => import(/* webpackChunkName: "settings" */'@/pages/settings/siteData.vue'); +const SiteData = () => import('@/pages/settings/siteData.vue'); // not converted yet -const PromoCode = () => import(/* webpackChunkName: "settings" */'@/pages/settings/promoCode.vue'); -const Subscription = () => import(/* webpackChunkName: "settings" */'@/components/settings/subscription'); +const PromoCode = () => import('@/pages/settings/promoCode.vue'); +const Subscription = () => import('@/components/settings/subscription'); export const USER_ROUTES = { path: '/user', diff --git a/website/client/src/store/index.js b/website/client/src/store/index.js index d4db095891..2212ec4cd4 100644 --- a/website/client/src/store/index.js +++ b/website/client/src/store/index.js @@ -11,7 +11,7 @@ import { setUpAxios } from '@/libs/auth'; import actions from './actions'; import getters from './getters'; -const IS_TEST = process.env.NODE_ENV === 'test'; // eslint-disable-line no-process-env +const IS_TEST = import.meta.env.NODE_ENV === 'test'; // eslint-disable-line no-process-env // Load user auth parameters and determine if it's logged in // before trying to load data diff --git a/website/client/tests/unit/.eslintrc.js b/website/client/tests/unit/.eslintrc.js deleted file mode 100644 index 270ac3cd72..0000000000 --- a/website/client/tests/unit/.eslintrc.js +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable import/no-commonjs */ -const base = require('../../../../test/.eslintrc.js'); - -base.rules = base.rules || {}; - -// TODO find a way to let eslint understand webpack aliases -base.rules['import/no-unresolved'] = 'off'; -base.rules['import/extensions'] = 'off'; - -module.exports = base; diff --git a/website/client/tests/unit/components/achievements/levelUp.spec.js b/website/client/tests/unit/components/achievements/levelUp.spec.js index 42d81ee0c6..15146f5af4 100644 --- a/website/client/tests/unit/components/achievements/levelUp.spec.js +++ b/website/client/tests/unit/components/achievements/levelUp.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import LevelUp from '@/components/achievements/levelUp.vue'; /* @@ -50,32 +51,32 @@ describe('LevelUp', () => { }); */ - it('displays the right level in the title', () => { + test('displays the right level in the title', () => { const title = testFunction('title', 12); expect(title()).to.equal('"reachedLevel" {"level":12}'); }); - it('does not display rewards for level 10', () => { + test('does not display rewards for level 10', () => { const displayRewardQuest = testFunction('displayRewardQuest', 10); expect(displayRewardQuest()).to.be.false; }); [15, 30, 40, 60].forEach(level => { - it(`does display rewards for level ${level}`, () => { + test(`does display rewards for level ${level}`, () => { const displayRewardQuest = testFunction('displayRewardQuest', level); expect(displayRewardQuest()).to.be.true; }); }); - it('generates the right test class for level 15', () => { + test('generates the right test class for level 15', () => { const questClass = testFunction('questClass', 15); expect(questClass()).to.equal('inventory_quest_scroll_atom1'); }); - it('generates empty test class for level 14', () => { + test('generates empty test class for level 14', () => { const questClass = testFunction('questClass', 14); expect(questClass()).to.equal(''); }); diff --git a/website/client/tests/unit/components/avatar.spec.js b/website/client/tests/unit/components/avatar.spec.js index 7d050848d7..2db45f31dc 100644 --- a/website/client/tests/unit/components/avatar.spec.js +++ b/website/client/tests/unit/components/avatar.spec.js @@ -1,10 +1,13 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import merge from 'lodash/merge'; import Avatar from '@/components/avatar'; import generateStore from '@/store'; -context('avatar.vue', () => { +describe('avatar.vue', () => { let Constructr; let vm; @@ -38,7 +41,7 @@ context('avatar.vue', () => { }); describe('hasClass', () => { - it('returns false if user is too low of level', () => { + test('returns false if user is too low of level', () => { vm.member = merge({ stats: { lvl: 3 }, preferences: { disableClasses: false }, @@ -47,7 +50,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns false if user has disabled the class system', () => { + test('returns false if user has disabled the class system', () => { vm.member = merge({ stats: { lvl: 17 }, preferences: { disableClasses: true }, @@ -56,7 +59,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns false if user has not yet selected a class', () => { + test('returns false if user has not yet selected a class', () => { vm.member = merge({ stats: { lvl: 20 }, preferences: { disableClasses: false }, @@ -65,7 +68,7 @@ context('avatar.vue', () => { expect(vm.hasClass).to.equal(false); }); - it('returns true if user meets all prereqs for having a class', () => { + test('returns true if user meets all prereqs for having a class', () => { vm.member = merge({ stats: { lvl: 13 }, preferences: { disableClasses: false }, @@ -76,11 +79,11 @@ context('avatar.vue', () => { }); describe('isBuffed', () => { - it('returns undefined if user is not buffed', () => { + test('returns undefined if user is not buffed', () => { expect(vm.isBuffed).to.equal(undefined); }); - it('returns a value if user has buffs', () => { + test('returns a value if user has buffs', () => { vm.member = merge({ stats: { buffs: { @@ -96,12 +99,12 @@ context('avatar.vue', () => { }); describe('paddingTop', () => { - xit('defaults to 27px', () => { + test('defaults to 24px', () => { vm.avatarOnly = true; - expect(vm.paddingTop).to.equal('27px'); + expect(vm.paddingTop).to.equal('24px'); }); - it('is 24px if user has a pet', () => { + test('is 24px if user has a pet', () => { vm.member.items = merge({ currentPet: { name: 'Foo' }, }, baseMember.items); @@ -109,7 +112,7 @@ context('avatar.vue', () => { expect(vm.paddingTop).to.equal('24px'); }); - it('is 0px if user has a mount', () => { + test('is 0px if user has a mount', () => { vm.member.items = merge({ currentMount: 'Bar', }, baseMember.items); @@ -117,18 +120,18 @@ context('avatar.vue', () => { expect(vm.paddingTop).to.equal('0px'); }); - it('can be overriden', () => { + test('can be overriden', () => { vm.overrideTopPadding = '27px'; expect(vm.paddingTop).to.equal('27px'); }); }); describe('costumeClass', () => { - it('returns if showing equipped gear', () => { + test('returns if showing equipped gear', () => { expect(vm.costumeClass).to.equal('equipped'); }); - it('returns if wearing a costume', () => { + test('returns if wearing a costume', () => { vm.member.preferences = { costume: true, hair: {} }; vm.member.items.gear.costume = {}; @@ -137,7 +140,7 @@ context('avatar.vue', () => { }); describe('visualBuffs', () => { - it('returns an array of buffs', () => { + test('returns an array of buffs', () => { vm.member = merge({ stats: { class: 'warrior', @@ -159,17 +162,17 @@ context('avatar.vue', () => { }; }); - it('shows the background', () => { + test('shows the background', () => { expect(vm.backgroundClass).to.equal('background_pony'); }); - it('can be overridden', () => { + test('can be overridden', () => { vm.overrideAvatarGear = { background: 'character' }; expect(vm.backgroundClass).to.equal('background_character'); }); - it('returns to a blank string if not showing background', () => { + test('returns to a blank string if not showing background', () => { vm.withBackground = false; vm.avatarOnly = true; @@ -178,11 +181,11 @@ context('avatar.vue', () => { }); describe('specialMountClass', () => { - it('returns null if not riding a Kangaroo', () => { + test('returns null if not riding a Kangaroo', () => { expect(vm.specialMountClass).to.equal(null); }); - it('returns corresponding offset class if riding a Kangaroo', () => { + test('returns corresponding offset class if riding a Kangaroo', () => { vm.member.items.currentMount = 'Kangaroo-Base'; expect(vm.specialMountClass).to.equal('offset-kangaroo'); @@ -190,7 +193,7 @@ context('avatar.vue', () => { }); describe('skinClass', () => { - it('returns current skin color', () => { + test('returns current skin color', () => { vm.member = merge({ preferences: { skin: 'blue', @@ -201,7 +204,7 @@ context('avatar.vue', () => { expect(vm.skinClass).to.equal('skin_blue'); }); - it('adds sleep if Dailies paused', () => { + test('adds sleep if Dailies paused', () => { vm.member = merge({ preferences: { skin: 'blue', @@ -213,7 +216,7 @@ context('avatar.vue', () => { }); }); - context('methods', () => { + describe('methods', () => { describe('getGearClass', () => { beforeEach(() => { vm.member = merge({ @@ -226,15 +229,15 @@ context('avatar.vue', () => { }, baseMember); }); - it('returns undefined if no match', () => { + test('returns undefined if no match', () => { expect(vm.getGearClass('foo')).to.equal(undefined); }); - it('returns the matching gear', () => { + test('returns the matching gear', () => { expect(vm.getGearClass('Hat')).to.equal('Fancy Tophat'); }); - it('can be overridden', () => { + test('can be overridden', () => { vm.overrideAvatarGear = { Hat: 'Dapper Bowler' }; expect(vm.getGearClass('Hat')).to.equal('Dapper Bowler'); @@ -242,7 +245,7 @@ context('avatar.vue', () => { }); describe('hideGear', () => { - it('returns no weapon equipped', () => { + test('returns no weapon equipped', () => { vm.member.items.gear.equipped = {}; expect(vm.hideGear('weapon')).to.equal(false); }); @@ -277,7 +280,7 @@ context('avatar.vue', () => { }, }, baseMember); }); - it('does if not showing visual buffs', () => { + test('does if not showing visual buffs', () => { expect(vm.showAvatar()).to.equal(true); const { buffs } = vm.member.stats; diff --git a/website/client/tests/unit/components/categories/categoryTags.spec.js b/website/client/tests/unit/components/categories/categoryTags.spec.js index b522bb84d8..a0345e13e1 100644 --- a/website/client/tests/unit/components/categories/categoryTags.spec.js +++ b/website/client/tests/unit/components/categories/categoryTags.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { mount } from '@vue/test-utils'; import Vue from 'vue'; @@ -20,7 +23,7 @@ describe('Category Tags', () => { }); }); - it('displays a category', () => { + test('displays a category', () => { wrapper.setProps({ categories: [ { @@ -34,7 +37,7 @@ describe('Category Tags', () => { }); }); - it('displays a habitica official in purple', () => { + test('displays a habitica official in purple', () => { wrapper.setProps({ categories: [ { @@ -46,7 +49,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('habitica_official'); }); - it('displays owner label', () => { + test('displays owner label', () => { wrapper.setProps({ owner: true, }); @@ -54,7 +57,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('owned'); }); - it('displays member label', () => { + test('displays member label', () => { wrapper.setProps({ member: true, }); @@ -62,7 +65,7 @@ describe('Category Tags', () => { expect(wrapper.find('.category-label').text()).to.eq('joined'); }); - it('displays additional content at the end', () => { + test('displays additional content at the end', () => { expect(wrapper.find('p').text()).to.eq('This is a slot.'); }); }); diff --git a/website/client/tests/unit/components/challenges/challengeDetail.spec.js b/website/client/tests/unit/components/challenges/challengeDetail.spec.js index a423fe9a1b..096ce5d5e6 100644 --- a/website/client/tests/unit/components/challenges/challengeDetail.spec.js +++ b/website/client/tests/unit/components/challenges/challengeDetail.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import ChallengeDetailComponent from '@/components/challenges/challengeDetail.vue'; import Store from '@/libs/store'; @@ -56,7 +59,7 @@ describe('Challenge Detail', () => { }); }); - it('removes a destroyed task from task list', () => { + test('removes a destroyed task from task list', () => { const taskToRemove = { _id: '1', type: 'habit' }; wrapper.vm.taskDestroyed(taskToRemove); expect(wrapper.vm.tasksByType[taskToRemove.type].length).to.eq(0); diff --git a/website/client/tests/unit/components/groups/membersModal.spec.js b/website/client/tests/unit/components/groups/membersModal.spec.js index 8148f941ef..a952b41f6c 100644 --- a/website/client/tests/unit/components/groups/membersModal.spec.js +++ b/website/client/tests/unit/components/groups/membersModal.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import MembersModalComponent from '@/components/groups/membersModal.vue'; @@ -15,12 +18,12 @@ describe.skip('Members Modal Component', () => { vm.$destroy(); }); - it('should have an empty object as sort-option at start', () => { + test('should have an empty object as sort-option at start', () => { const defaultData = vm.data(); expect(defaultData.sortOption).to.eq({}); }); - it('should accept sort-option object', () => { + test('should accept sort-option object', () => { const sortOption = vm.data().sortOption[0]; vm.sort(sortOption); Vue.nextTick(() => { diff --git a/website/client/tests/unit/components/groups/myGuilds.spec.js b/website/client/tests/unit/components/groups/myGuilds.spec.js deleted file mode 100644 index 64c2730782..0000000000 --- a/website/client/tests/unit/components/groups/myGuilds.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -import { shallowMount, createLocalVue } from '@vue/test-utils'; -import Store from '@/libs/store'; -import myGuilds from '@/components/groups/myGuilds'; -import PublicGuildItem from '@/components/groups/publicGuildItem'; - -const localVue = createLocalVue(); -localVue.use(Store); - -describe('myGuilds component', () => { - let computed; - const guilds = [{ - _id: '1', - type: 'guild', - name: 'Crimson Vow', - summary: 'testing', - description: 'testing', - }, { - _id: '2', - type: 'guild', - name: 'Log Horizon', - summary: 'testing', - description: 'testing', - }, { - _id: '3', - type: 'guild', - name: 'CAD Cads', - summary: '3D', - description: '3D', - }, { - _id: '4', - type: 'guild', - name: 'Santa Claus', - summary: '3d', - description: 'hohoho', - }]; - const store = new Store({ - state: { - user: { - data: { - _id: '999', - guilds: ['1', '2', '3', '4'], - }, - }, - editingGroup: {}, - constants: { - TAVERN_ID: '9999', - }, - }, - getters: {}, - actions: { - 'guilds:getMyGuilds': () => guilds, - 'common:setTitle': () => {}, - }, - }); - - function makeWrapper (opts = {}) { - return shallowMount(myGuilds, { - data () { - return { - filter: {}, - search: '', - }; - }, - store, - localVue, - ...opts, - }); - } - - before(() => { - computed = { - guilds: () => guilds, - }; - }); - - it('renders all guilds with no filter and no search', () => { - const wrapper = makeWrapper({ computed }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(4); - }); - - it('renders guilds with name matching against a single-word search term', () => { - const search = 'vow'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(1); - }); - - it('renders guilds with summary matching against a single-word search term', () => { - const search = '3d'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(2); - }); - - it('renders guilds with description matching against a single-word search term', () => { - const search = 'hoho'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(1); - }); - - it('renders guilds with summary matching against two search terms with space in between', () => { - const search = '3d ohayou'; - const wrapper = makeWrapper({ computed }); - wrapper.setData({ search }); - expect(wrapper.findAll(PublicGuildItem).length).to.equal(2); - }); -}); diff --git a/website/client/tests/unit/components/home.spec.js b/website/client/tests/unit/components/home.spec.js index 5b77b0233c..32c52d8b17 100644 --- a/website/client/tests/unit/components/home.spec.js +++ b/website/client/tests/unit/components/home.spec.js @@ -1,9 +1,14 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; +import sinon from 'sinon'; import Home from '@/components/static/home.vue'; import Store from '@/libs/store'; import * as Analytics from '@/libs/analytics'; +const sandbox = sinon.createSandbox(); const localVue = createLocalVue(); localVue.use(Store); @@ -49,14 +54,16 @@ describe('Home', () => { wrapper = mountWrapper(); }); - afterEach(sinon.restore); + afterEach(() => { + sandbox.restore(); + }); - it('has a visible title', () => { + test('has a visible title', () => { expect(wrapper.find('h1').text()).to.equal('motivateYourself'); }); describe('signup form', () => { - it('registers a user from the form', async () => { + test('registers a user from the form', async () => { const username = 'newUser'; const email = 'rookie@habitica.com'; const password = 'ImmaG3tProductive!'; @@ -74,7 +81,7 @@ describe('Home', () => { }); }); - it('registers a user with group invite if groupInvite in the query', async () => { + test('registers a user with group invite if groupInvite in the query', async () => { const groupInvite = 'TheBestGroup'; wrapper = mountWrapper({ groupInvite }); await fillOutUserForm('invitedUser', 'invited@habitica.com', '1veGotFri3ndsHooray!'); @@ -85,7 +92,7 @@ describe('Home', () => { expect(registerStub.getCall(0).args[1].groupInvite).to.equal(groupInvite); }); - it('registers a user with group invite if p in the query', async () => { + test('registers a user with group invite if p in the query', async () => { const p = 'ThePiGroup'; wrapper = mountWrapper({ p }); await fillOutUserForm('alsoInvitedUser', 'invited2@habitica.com', '1veGotFri3nds2!'); @@ -96,7 +103,7 @@ describe('Home', () => { expect(registerStub.getCall(0).args[1].groupInvite).to.equal(p); }); - it('registers a user with group invite invite if both p and groupInvite are in the query', async () => { + test('registers a user with group invite invite if both p and groupInvite are in the query', async () => { const groupInvite = 'StillTheBestGroup'; wrapper = mountWrapper({ p: 'LesserGroup', groupInvite }); await fillOutUserForm('doublyInvitedUser', 'invited3@habitica.com', '1veGotSm4rtFri3nds!'); diff --git a/website/client/tests/unit/components/memberDetails.spec.js b/website/client/tests/unit/components/memberDetails.spec.js index df36f10b0e..f1edae7f6d 100644 --- a/website/client/tests/unit/components/memberDetails.spec.js +++ b/website/client/tests/unit/components/memberDetails.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import Vue from 'vue'; import MemberDetailsComponent from '@/components/memberDetails.vue'; @@ -14,7 +17,7 @@ describe('Members Details Component', () => { vm.$destroy(); }); - it.skip('prevents flickering by setting a 1px margin-right on elements of class member-stats', () => { + test.skip('prevents flickering by setting a 1px margin-right on elements of class member-stats', () => { const memberstats = vm.$el.querySelector('.member-stats'); const style = window.getComputedStyle(memberstats, null); const marginRightProp = style.getPropertyValue('margin-right'); diff --git a/website/client/tests/unit/components/messages/messageCard.spec.js b/website/client/tests/unit/components/messages/messageCard.spec.js index 7cd8c3672e..3a6a228832 100644 --- a/website/client/tests/unit/components/messages/messageCard.spec.js +++ b/website/client/tests/unit/components/messages/messageCard.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import { shallowMount, createLocalVue } from '@vue/test-utils'; @@ -42,19 +45,19 @@ describe('MessageCard', () => { }); }); - it('shows the message text', () => { + test('shows the message text', () => { expect(wrapper.find('div.text').text()).to.equal(message.text); expect(wrapper.find('div.mentioned-icon').exists()).to.be.false; }); - it('shows mention dot if user is mentioned', () => { + test('shows mention dot if user is mentioned', () => { wrapper.setProps({ msg: createMessage('@Tester') }); expect(wrapper.find('div.mentioned-icon').exists()).to.be.true; }); // Bug fixed by https://github.com/HabitRPG/habitica/pull/12177 - it('shows mention dot if user is mentioned after almostmention', () => { + test('shows mention dot if user is mentioned after almostmention', () => { wrapper.setProps({ msg: createMessage('thetester @Tester') }); expect(wrapper.find('div.mentioned-icon').exists()).to.be.true; diff --git a/website/client/tests/unit/components/notifications.spec.js b/website/client/tests/unit/components/notifications.spec.js index c14d1fccca..e8e3f3039e 100644 --- a/website/client/tests/unit/components/notifications.spec.js +++ b/website/client/tests/unit/components/notifications.spec.js @@ -1,9 +1,16 @@ +import { + describe, expect, test, beforeEach, chai, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import { toNextLevel } from '@/../../common/script/statHelpers'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import NotificationsComponent from '@/components/notifications.vue'; import Store from '@/libs/store'; import { hasClass } from '@/store/getters/members'; +chai.use(sinonChai); + const localVue = createLocalVue(); localVue.use(Store); @@ -46,7 +53,7 @@ describe('Notifications', () => { }); }); - it('set user has class computed prop', () => { + test('set user has class computed prop', () => { expect(wrapper.vm.userHasClass).to.be.false; store.state.user.data.stats.lvl = 10; @@ -57,7 +64,7 @@ describe('Notifications', () => { }); describe('user exp notifcation', () => { - it('notifies when user gets more exp', () => { + test('notifies when user gets more exp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -72,7 +79,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user levels with exact xp', () => { + test('when user levels with exact xp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -94,7 +101,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user levels with exact more exp than needed', () => { + test('when user levels with exact more exp than needed', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -116,7 +123,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user has more exp than needed then levels', () => { + test('when user has more exp than needed then levels', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 9; @@ -138,7 +145,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user multilevels', () => { + test('when user multilevels', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 8; @@ -160,7 +167,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user looses xp', () => { + test('when user looses xp', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -179,7 +186,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user looses xp under 0', () => { + test('when user looses xp under 0', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevel = 10; @@ -198,7 +205,7 @@ describe('Notifications', () => { expSpy.restore(); }); - it('when user dies', () => { + test('when user dies', () => { const expSpy = sinon.spy(wrapper.vm, 'exp'); const userLevelBefore = 10; diff --git a/website/client/tests/unit/components/sidebarSection.spec.js b/website/client/tests/unit/components/sidebarSection.spec.js index 72dccc0e95..f5ff43b832 100644 --- a/website/client/tests/unit/components/sidebarSection.spec.js +++ b/website/client/tests/unit/components/sidebarSection.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { mount } from '@vue/test-utils'; import SidebarSection from '@/components/sidebarSection.vue'; @@ -16,21 +19,21 @@ describe('Sidebar Section', () => { }); }); - it('displays title', () => { + test('displays title', () => { expect(wrapper.find('h3').text()).to.eq('Hello World'); }); - it('displays contents', () => { + test('displays contents', () => { expect(wrapper.find('.section-body').find('p').text()).to.eq('This is a test.'); }); - it('displays tooltip icon', () => { + test('displays tooltip icon', () => { expect(wrapper.contains('.section-info')).to.eq(false); wrapper.setProps({ tooltip: 'This is a test' }); expect(wrapper.contains('.section-info')).to.eq(true); }); - it('hides contents', () => { + test('hides contents', () => { expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); wrapper.find('[role="button"').trigger('click'); expect(wrapper.find('.section-body').element.style.display).to.eq('none'); @@ -38,7 +41,7 @@ describe('Sidebar Section', () => { expect(wrapper.find('.section-body').element.style.display).to.not.eq('none'); }); - it('can hide contents by default', () => { + test('can hide contents by default', () => { wrapper = mount(SidebarSection, { propsData: { title: 'Hello World', diff --git a/website/client/tests/unit/components/tasks/column.spec.js b/website/client/tests/unit/components/tasks/column.spec.js index a44bf4be4d..e6cba6eb9e 100644 --- a/website/client/tests/unit/components/tasks/column.spec.js +++ b/website/client/tests/unit/components/tasks/column.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import TaskColumn from '@/components/tasks/column.vue'; import Store from '@/libs/store'; @@ -41,7 +44,7 @@ describe('Task Column', () => { }); } - it('returns a vue instance', () => { + test('returns a vue instance', () => { wrapper = makeWrapper(); expect(wrapper.isVueInstance()).to.be.true; }); @@ -51,11 +54,11 @@ describe('Task Column', () => { wrapper = makeWrapper(); }); - it('defaults isUser to false', () => { + test('defaults isUser to false', () => { expect(wrapper.vm.isUser).to.be.false; }); - it('passes isUser to component instance', () => { + test('passes isUser to component instance', () => { wrapper.setProps({ isUser: false }); expect(wrapper.vm.isUser).to.be.false; @@ -106,7 +109,7 @@ describe('Task Column', () => { wrapper = makeWrapper({ store }); }); - it('returns task list from props for group-plan', () => { + test('returns task list from props for group-plan', () => { wrapper.setProps({ taskListOverride }); wrapper.vm.taskList.forEach((el, i) => { @@ -120,7 +123,7 @@ describe('Task Column', () => { }); }); - it('returns task list from store for user', () => { + test('returns task list from store for user', () => { wrapper.setProps({ isUser: true, taskListOverride }); wrapper.vm.taskList.forEach((el, i) => { @@ -142,7 +145,7 @@ describe('Task Column', () => { ]; }); - it('returns all tasks if no tag is given', () => { + test('returns all tasks if no tag is given', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks); expect(returnedTasks).to.have.lengthOf(tasks.length); tasks.forEach((task, i) => { @@ -150,7 +153,7 @@ describe('Task Column', () => { }); }); - it('returns tasks for given single tag', () => { + test('returns tasks for given single tag', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks, [3]); expect(returnedTasks).to.have.lengthOf(3); @@ -159,7 +162,7 @@ describe('Task Column', () => { expect(returnedTasks[2]).to.eq(tasks[3]); }); - it('returns tasks for given multiple tags', () => { + test('returns tasks for given multiple tags', () => { const returnedTasks = wrapper.vm.filterByTagList(tasks, [2, 3]); expect(returnedTasks).to.have.lengthOf(1); @@ -201,7 +204,7 @@ describe('Task Column', () => { ]; }); - it('returns all tasks for empty search term', () => { + test('returns all tasks for empty search term', () => { const returnedTasks = wrapper.vm.filterBySearchText(tasks); expect(returnedTasks).to.have.lengthOf(tasks.length); tasks.forEach((task, i) => { @@ -209,19 +212,19 @@ describe('Task Column', () => { }); }); - it('returns tasks for search term in title /i', () => { + test('returns tasks for search term in title /i', () => { ['Title', 'TITLE', 'title', 'tItLe'].forEach(term => { expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[2]); }); }); - it('returns tasks for search term in note /i', () => { + test('returns tasks for search term in note /i', () => { ['Note', 'NOTE', 'note', 'nOtE'].forEach(term => { expect(wrapper.vm.filterBySearchText(tasks, term)[0]).to.eq(tasks[3]); }); }); - it('returns tasks for search term in checklist title /i', () => { + test('returns tasks for search term in checklist title /i', () => { ['Check', 'CHECK', 'check', 'cHeCK'].forEach(term => { const returnedTasks = wrapper.vm.filterBySearchText(tasks, term); diff --git a/website/client/tests/unit/components/tasks/user.spec.js b/website/client/tests/unit/components/tasks/user.spec.js index 56f2f2102a..dc7f4ee467 100644 --- a/website/client/tests/unit/components/tasks/user.spec.js +++ b/website/client/tests/unit/components/tasks/user.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import { shallowMount, createLocalVue } from '@vue/test-utils'; import User from '@/components/tasks/user.vue'; import Store from '@/libs/store'; @@ -21,7 +22,7 @@ describe('Tasks User', () => { } describe('Computed Properties', () => { - it('should render a challenge tag under challenge header in tag filter popup when the challenge is active', () => { + test('should render a challenge tag under challenge header in tag filter popup when the challenge is active', () => { const activeChallengeTag = { id: '1', name: 'Challenge1', @@ -35,7 +36,7 @@ describe('Tasks User', () => { expect(computedTagsByType.challenges.tags[0].name).to.equal(activeChallengeTag.name); }); - it('should render a challenge tag under normal tag header in tag filter popup when the challenge is no longer active', () => { + test('should render a challenge tag under normal tag header in tag filter popup when the challenge is no longer active', () => { const inactiveChallengeTag = { id: '1', name: 'Challenge1', diff --git a/website/client/tests/unit/components/ui/drawer.spec.js b/website/client/tests/unit/components/ui/drawer.spec.js index 3245744e33..222157d271 100644 --- a/website/client/tests/unit/components/ui/drawer.spec.js +++ b/website/client/tests/unit/components/ui/drawer.spec.js @@ -1,14 +1,15 @@ +import { describe, expect, test } from 'vitest'; import Vue from 'vue'; import DrawerComponent from '@/components/ui/drawer.vue'; describe('DrawerComponent', () => { - it('sets the correct default data', () => { + test('sets the correct default data', () => { expect(DrawerComponent.data).to.be.a('function'); const defaultData = DrawerComponent.data(); expect(defaultData.isOpened).to.be.true; }); - it('renders the correct title', () => { + test('renders the correct title', () => { const Ctor = Vue.extend(DrawerComponent); const vm = new Ctor({ propsData: { diff --git a/website/client/tests/unit/filters/floor.spec.js b/website/client/tests/unit/filters/floor.spec.js index 7880bc60a0..8875d427a7 100644 --- a/website/client/tests/unit/filters/floor.spec.js +++ b/website/client/tests/unit/filters/floor.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import floorFilter from '@/filters/floor'; describe('floor filter', () => { - it('can floor a decimal number', () => { + test('can floor a decimal number', () => { expect(floorFilter(4.567)).to.equal(4.56); expect(floorFilter(4.562)).to.equal(4.56); }); diff --git a/website/client/tests/unit/filters/round.spec.js b/website/client/tests/unit/filters/round.spec.js index 09fce16e79..7bd5c9be17 100644 --- a/website/client/tests/unit/filters/round.spec.js +++ b/website/client/tests/unit/filters/round.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import roundFilter from '@/filters/round'; describe('round filter', () => { - it('can round a decimal number', () => { + test('can round a decimal number', () => { expect(roundFilter(4.567)).to.equal(4.57); expect(roundFilter(4.562)).to.equal(4.56); }); diff --git a/website/client/tests/unit/filters/roundBigNumber.spec.js b/website/client/tests/unit/filters/roundBigNumber.spec.js index 5017d87d02..6a8e8bf3a6 100644 --- a/website/client/tests/unit/filters/roundBigNumber.spec.js +++ b/website/client/tests/unit/filters/roundBigNumber.spec.js @@ -1,20 +1,21 @@ +import { describe, expect, test } from 'vitest'; import roundBigNumberFilter from '@/filters/roundBigNumber'; describe('round big number filter', () => { - it('can round a decimal number', () => { + test('can round a decimal number', () => { expect(roundBigNumberFilter(4.567)).to.equal(4.57); expect(roundBigNumberFilter(4.562)).to.equal(4.56); }); - it('can round thousands', () => { + test('can round thousands', () => { expect(roundBigNumberFilter(70065)).to.equal('70.1k'); }); - it('can round milions', () => { + test('can round milions', () => { expect(roundBigNumberFilter(10000987)).to.equal('10.0m'); }); - it('can round bilions', () => { + test('can round bilions', () => { expect(roundBigNumberFilter(1000000000)).to.equal('1.0b'); }); }); diff --git a/website/client/tests/unit/helpers.js b/website/client/tests/unit/helpers.js deleted file mode 100644 index eccdde95ec..0000000000 --- a/website/client/tests/unit/helpers.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable import/no-commonjs */ -require('../../../../test/helpers/globals.helper.js'); - -// Shim localStorage -const localStorage = { - data: {}, - getItem (key) { - return this.data[key]; - }, - setItem (key, value) { - this.data[key] = value; - }, - removeItem (key) { - delete this.data[key]; - }, -}; - -Object.defineProperty(window, 'localStorage', { - value: localStorage, - configurable: true, - enumerable: true, - writable: true, -}); diff --git a/website/client/tests/unit/libs/asyncResource.spec.js b/website/client/tests/unit/libs/asyncResource.spec.js index f7378de4db..cc77bc4ed1 100644 --- a/website/client/tests/unit/libs/asyncResource.spec.js +++ b/website/client/tests/unit/libs/asyncResource.spec.js @@ -1,10 +1,21 @@ +import { + describe, expect, test, afterEach, beforeEach, chai, +} from 'vitest'; import axios from 'axios'; import { sleep } from '@/../../../test/helpers/sleep'; -import { asyncResourceFactory, loadAsyncResource } from '@/libs/asyncResource'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import chaiAsPromised from 'chai-as-promised'; import generateStore from '@/store'; +import { asyncResourceFactory, loadAsyncResource } from '@/libs/asyncResource'; + +chai.use(sinonChai); +chai.use(chaiAsPromised); + +const sandbox = sinon.createSandbox(); describe('async resource', () => { - it('asyncResourceFactory', () => { + test('asyncResourceFactory', () => { const resource = asyncResourceFactory(); expect(resource.loadingStatus).to.equal('NOT_LOADED'); expect(resource.data).to.equal(null); @@ -16,29 +27,29 @@ describe('async resource', () => { if (axios.get && axios.get.restore) axios.get.restore(); }); - context('errors', () => { - it('store is missing', () => { + describe('errors', () => { + test('store is missing', () => { expect(() => loadAsyncResource({})).to.throw; }); - it('path is missing', () => { + test('path is missing', () => { expect(() => loadAsyncResource({ store: 'store', })).to.throw; }); - it('url is missing', () => { + test('url is missing', () => { expect(() => loadAsyncResource({ store: 'store', path: 'path', })).to.throw; }); - it('deserialize is missing', () => { + test('deserialize is missing', () => { expect(() => loadAsyncResource({ store: 'store', path: 'path', url: 'url', })).to.throw; }); - it('resource not found', () => { + test('resource not found', () => { const store = generateStore(); expect(() => loadAsyncResource({ @@ -49,7 +60,7 @@ describe('async resource', () => { })).to.throw; }); - it('invalid loading status', () => { + test('invalid loading status', () => { const store = generateStore(); store.state.user.loadingStatus = 'INVALID'; @@ -62,7 +73,7 @@ describe('async resource', () => { }); }); - it('returns the resource if it is already loaded and forceLoad is false', async () => { + test('returns the resource if it is already loaded and forceLoad is false', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADED'; store.state.user.data = { _id: 1 }; @@ -80,7 +91,7 @@ describe('async resource', () => { expect(axios.get).to.not.have.been.called; }); - it('load the resource if it is not loaded', async () => { + test('load the resource if it is not loaded', async () => { const store = generateStore(); store.state.user = asyncResourceFactory(); @@ -101,7 +112,7 @@ describe('async resource', () => { expect(axios.get).to.have.been.calledOnce; }); - it('load the resource if it is loaded but forceLoad is true', async () => { + test('load the resource if it is loaded but forceLoad is true', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADED'; @@ -133,7 +144,7 @@ describe('async resource', () => { store.state.worldState.appVersionOnLoad = 1; }); - it('load the resource if it is loaded but the appVersion has changed', async () => { + test('load the resource if it is loaded but the appVersion has changed', async () => { store.state.serverAppVersion = 2; sandbox.stub(axios, 'get').withArgs('/api/v4/world-state').returns(Promise.resolve({ data: { data: { _id: 1 } }, @@ -155,7 +166,7 @@ describe('async resource', () => { expect(axios.get).to.have.been.calledOnce; }); - it('does not load the resource if it is loaded but the appVersion has changed', async () => { + test('does not load the resource if it is loaded but the appVersion has changed', async () => { sandbox.stub(axios, 'get').returns(Promise.resolve({ data: { data: { _id: 1 } } })); const resource = await loadAsyncResource({ @@ -173,7 +184,7 @@ describe('async resource', () => { }); }); - it('does not send multiple requests if the resource is being loaded', async () => { + test('does not send multiple requests if the resource is being loaded', async () => { const store = generateStore(); store.state.user.loadingStatus = 'LOADING'; diff --git a/website/client/tests/unit/libs/deepFreeze.spec.js b/website/client/tests/unit/libs/deepFreeze.spec.js index a49ef6f738..9f0572bd3e 100644 --- a/website/client/tests/unit/libs/deepFreeze.spec.js +++ b/website/client/tests/unit/libs/deepFreeze.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import deepFreeze from '@/libs/deepFreeze'; describe('deepFreeze', () => { - it('deeply freezes an object', () => { + test('deeply freezes an object', () => { const obj = { a: 1, b () { diff --git a/website/client/tests/unit/libs/i18n.spec.js b/website/client/tests/unit/libs/i18n.spec.js index f4a7f32f14..b7eca519ac 100644 --- a/website/client/tests/unit/libs/i18n.spec.js +++ b/website/client/tests/unit/libs/i18n.spec.js @@ -1,9 +1,12 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import commoni18n from '@/../../common/script/i18n'; import i18n from '@/libs/i18n'; describe('i18n plugin', () => { - before(() => { + beforeEach(() => { Vue.use(i18n, { i18nData: { strings: { @@ -13,11 +16,11 @@ describe('i18n plugin', () => { }); }); - it('adds $t to Vue.prototype', () => { + test('adds $t to Vue.prototype', () => { expect(Vue.prototype.$t).to.exist; }); - it('$t is a proxy for common/i18n.t', () => { + test('$t is a proxy for common/i18n.t', () => { const result = (new Vue()).$t('reportBug'); expect(result).to.equal(commoni18n.t('reportBug')); expect(result).to.equal('Report a Bug'); diff --git a/website/client/tests/unit/libs/renderWithMentions.spec.js b/website/client/tests/unit/libs/renderWithMentions.spec.js index bb5b9a6a1b..e92bf85181 100644 --- a/website/client/tests/unit/libs/renderWithMentions.spec.js +++ b/website/client/tests/unit/libs/renderWithMentions.spec.js @@ -1,3 +1,4 @@ +import { describe, expect, test } from 'vitest'; import renderMarkdown from '@/libs/renderWithMentions'; describe('renderWithMentions', () => { @@ -5,13 +6,13 @@ describe('renderWithMentions', () => { return { auth: { local: { username: name } }, profile: { name: displayName } }; } - it('returns null if no text supplied', () => { + test('returns null if no text supplied', () => { const result = renderMarkdown('', user('a', 'b')); expect(result).to.be.null; }); - it('highlights displayname', () => { + test('highlights displayname', () => { const text = 'hello @displayedUser with text after'; const result = renderMarkdown(text, user('user', 'displayedUser')); @@ -19,14 +20,14 @@ describe('renderWithMentions', () => { expect(result).to.contain('@displayedUser'); }); - it('highlights username', () => { + test('highlights username', () => { const text = 'hello @user'; const result = renderMarkdown(text, user('user', 'displayedUser')); expect(result).to.contain('@user'); }); - it('highlights username sandwiched with underscores', () => { + test('highlights username sandwiched with underscores', () => { const text = 'hello @_user_'; const result = renderMarkdown(text, user('_user_', 'displayedUser')); @@ -35,7 +36,7 @@ describe('renderWithMentions', () => { expect(result).to.not.contain(''); }); - it('highlights username sandwiched with double underscores', () => { + test('highlights username sandwiched with double underscores', () => { const text = 'hello @__user__'; const result = renderMarkdown(text, user('diffUser', 'displayDiffUser')); @@ -44,13 +45,13 @@ describe('renderWithMentions', () => { expect(result).to.not.contain(''); }); - it('not highlights any email', () => { + test('not highlights any email', () => { const result = renderMarkdown('hello@example.com', user('example', 'displayedUser')); expect(result).to.not.contain('@example'); }); - it('complex highlight', () => { + test('complex highlight', () => { const plainText = 'a bit more @mentions to @use my@mentions.com broken @mail.com'; const result = renderMarkdown(plainText, user('use', 'mentions')); diff --git a/website/client/tests/unit/libs/store.spec.js b/website/client/tests/unit/libs/store.spec.js index 9fa413a07e..ace7fa5378 100644 --- a/website/client/tests/unit/libs/store.spec.js +++ b/website/client/tests/unit/libs/store.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import Vue from 'vue'; import StoreModule, { mapState, mapGetters, mapActions } from '@/libs/store'; import { flattenAndNamespace } from '@/libs/store/helpers/internals'; @@ -42,7 +45,7 @@ describe('Store', () => { Vue.use(StoreModule); }); - it('injects itself in all component', done => { + test('injects itself in all component', done => { new Vue({ // eslint-disable-line no-new store, created () { @@ -52,7 +55,7 @@ describe('Store', () => { }); }); - it('can watch a function on the state', done => { + test('can watch a function on the state', done => { store.watch(state => state.name, newName => { expect(newName).to.equal('test updated'); done(); @@ -62,13 +65,13 @@ describe('Store', () => { }); describe('getters', () => { - it('supports getters', () => { + test('supports getters', () => { expect(store.getters.computedName).to.equal('test computed!'); store.state.name = 'test updated'; expect(store.getters.computedName).to.equal('test updated computed!'); }); - it('supports nested getters', () => { + test('supports nested getters', () => { expect(store.getters['nested:computedName']).to.equal('test computed!'); store.state.name = 'test updated'; expect(store.getters['nested:computedName']).to.equal('test updated computed!'); @@ -76,21 +79,21 @@ describe('Store', () => { }); describe('actions', () => { - it('can dispatch an action', async () => { + test('can dispatch an action', async () => { expect(await store.dispatch('getName', 1, 2, 3)).to.deep.equal(['test', 1, 2, 3]); }); - it('can dispatch a nested action', async () => { + test('can dispatch a nested action', async () => { expect(await store.dispatch('nested:getName', 1, 2, 3)).to.deep.equal(['test', 1, 2, 3]); }); - it('throws an error if the action doesn\'t exists', () => { + test('throws an error if the action doesn\'t exists', () => { expect(() => store.dispatched('wrong')).to.throw; }); }); describe('helpers', () => { - it('mapState', done => { + test('mapState', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -114,7 +117,7 @@ describe('Store', () => { }); }); - it('mapGetters', done => { + test('mapGetters', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -134,7 +137,7 @@ describe('Store', () => { }); }); - it('mapActions', done => { + test('mapActions', done => { new Vue({ // eslint-disable-line no-new store, data: { @@ -154,7 +157,7 @@ describe('Store', () => { }); }); - it('flattenAndNamespace', () => { + test('flattenAndNamespace', () => { const result = flattenAndNamespace({ nested: { computed ({ state }, ...args) { diff --git a/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js b/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js index b9f86cdfc8..8cdb934be0 100644 --- a/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js +++ b/website/client/tests/unit/libs/store/helpers/filterTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, beforeEach, test, expect, +} from 'vitest'; import { getTypeLabel, getFilterLabels, @@ -6,7 +9,7 @@ import { describe('Filter Category for Tasks', () => { describe('getTypeLabel', () => { - it('should return correct task type labels', () => { + test('should return correct task type labels', () => { expect(getTypeLabel('habit')).to.eq('habits'); expect(getTypeLabel('daily')).to.eq('dailies'); expect(getTypeLabel('todo')).to.eq('todos'); @@ -24,7 +27,7 @@ describe('Filter Category for Tasks', () => { reward = ['all', 'custom', 'wishlist']; }); - it('should return all task type filter labels by type', () => { + test('should return all task type filter labels by type', () => { // habits getFilterLabels('habit').forEach((item, i) => { expect(item).to.eq(habit[i]); @@ -45,14 +48,14 @@ describe('Filter Category for Tasks', () => { }); describe('getActiveFilter', () => { - it('should return single function by default', () => { + test('should return single function by default', () => { const activeFilter = getActiveFilter('habit'); expect(activeFilter).to.be.an('object'); expect(activeFilter).to.have.all.keys('label', 'filterFn', 'default'); expect(activeFilter.default).to.be.true; }); - it('should return single function for given filter type', () => { + test('should return single function for given filter type', () => { const activeFilterLabel = 'yellowred'; const activeFilter = getActiveFilter('habit', activeFilterLabel); expect(activeFilter).to.be.an('object'); diff --git a/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js b/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js index 285c0cb602..8f2648302c 100644 --- a/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js +++ b/website/client/tests/unit/libs/store/helpers/orderTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, beforeEach, test, expect, +} from 'vitest'; import shuffle from 'lodash/shuffle'; import { orderSingleTypeTasks, @@ -14,18 +17,18 @@ describe('Task Order Helper Function', () => { shuffledTasks = shuffle(tasks); }); - it('should return tasks as is for no task order', () => { + test('should return tasks as is for no task order', () => { expect(orderSingleTypeTasks(shuffledTasks)).to.eq(shuffledTasks); }); - it('should return tasks in expected order', () => { + test('should return tasks in expected order', () => { const newOrderedTasks = orderSingleTypeTasks(shuffledTasks, taskOrderList); newOrderedTasks.forEach((item, index) => { expect(item).to.eq(tasks[index]); }); }); - it('should return new tasks at end of expected order', () => { + test('should return new tasks at end of expected order', () => { const newTaskIds = [10, 15, 20]; newTaskIds.forEach(i => tasks.push({ _id: i, id: i })); shuffledTasks = shuffle(tasks); diff --git a/website/client/tests/unit/mixins/groupsUtilities.spec.js b/website/client/tests/unit/mixins/groupsUtilities.spec.js index 686e59342e..6d3915b57a 100644 --- a/website/client/tests/unit/mixins/groupsUtilities.spec.js +++ b/website/client/tests/unit/mixins/groupsUtilities.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import { createLocalVue } from '@vue/test-utils'; import { TAVERN_ID } from '@/../../common/script/constants'; import groupsUtilities from '@/mixins/groupsUtilities'; @@ -11,7 +14,7 @@ describe('Groups Utilities Mixin', () => { let instance; let user; - before(() => { + beforeEach(() => { instance = new LocalVue({ store: generateStore(), mixins: [groupsUtilities], @@ -27,38 +30,38 @@ describe('Groups Utilities Mixin', () => { }); describe('isMemberOfGroup', () => { - it('registers as a method', () => { + test('registers as a method', () => { expect(instance.isMemberOfGroup).to.exist; }); - it('returns true when the group is the Tavern', () => { + test('returns true when the group is the Tavern', () => { expect(instance.isMemberOfGroup(user, { _id: TAVERN_ID, })).to.equal(true); }); - it('returns true when the group is the user\'s party', () => { + test('returns true when the group is the user\'s party', () => { expect(instance.isMemberOfGroup(user, { type: 'party', _id: user.party._id, })).to.equal(true); }); - it('returns false when the group is not the user\'s party', () => { + test('returns false when the group is not the user\'s party', () => { expect(instance.isMemberOfGroup(user, { type: 'party', _id: 'not my party', })).to.equal(false); }); - it('returns true when the group is not a guild of which the user is a member', () => { + test('returns true when the group is not a guild of which the user is a member', () => { expect(instance.isMemberOfGroup(user, { type: 'guild', _id: user.guilds[0], })).to.equal(true); }); - it('returns false when the group is not a guild of which the user is a member', () => { + test('returns false when the group is not a guild of which the user is a member', () => { expect(instance.isMemberOfGroup(user, { type: 'guild', _id: 'not my guild', @@ -70,7 +73,7 @@ describe('Groups Utilities Mixin', () => { let testGroup; let testGroup2; - before(() => { + beforeEach(() => { testGroup = { type: 'guild', _id: user.guilds[0], @@ -103,55 +106,55 @@ describe('Groups Utilities Mixin', () => { }; }); - it('returns true with no filter and no search', () => { + test('returns true with no filter and no search', () => { const filter = {}; const search = ''; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns false with no filter and one search word not matching against any of the guild name, summary, and description', () => { + test('returns false with no filter and one search word not matching against any of the guild name, summary, and description', () => { const filter = {}; const search = '3d'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no filter and one search word matched successfully against guild name', () => { + test('returns true with no filter and one search word matched successfully against guild name', () => { const filter = {}; const search = 'vow'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and one search word matched successfully against guild summary', () => { + test('returns true with no filter and one search word matched successfully against guild summary', () => { const filter = {}; const search = 'test'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and one search word matched successfully against guild description', () => { + test('returns true with no filter and one search word matched successfully against guild description', () => { const filter = {}; const search = 'dum'; expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild name', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild name', () => { const filter = {}; const search = 'cad test'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild summary', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild summary', () => { const filter = {}; const search = 'cad 3d'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns true with no filter and two search words with two spaces in between matched successfully against guild description', () => { + test('returns true with no filter and two search words with two spaces in between matched successfully against guild description', () => { const filter = {}; const search = 'my dummy'; expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with no search word and one filter category that does not match against any guild categories', () => { + test('returns false with no search word and one filter category that does not match against any guild categories', () => { const filter = { categories: ['academics'], }; @@ -159,7 +162,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and one filter category that matches successfully against any guild categories', () => { + test('returns true with no search word and one filter category that matches successfully against any guild categories', () => { const filter = { categories: ['hobbies_occupations'], }; @@ -167,7 +170,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns false with no search word and one filter role that does not match against guild role', () => { + test('returns false with no search word and one filter role that does not match against guild role', () => { const filter = { roles: ['guild_leader'], }; @@ -175,7 +178,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and one filter role that matches successfully against guild role', () => { + test('returns true with no search word and one filter role that matches successfully against guild role', () => { const filter = { roles: ['member'], }; @@ -183,7 +186,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no search word and filter size silver tier that matches against a guild size of 1000, the max guild size belonging to silver tier', () => { + test('returns true with no search word and filter size silver tier that matches against a guild size of 1000, the max guild size belonging to silver tier', () => { const filter = { guildSize: 'gold_tier', }; @@ -191,7 +194,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(true); }); - it('returns true with no search word and filter size bronze tier that matches against a guild size of 100, the max guild size belonging to bronze tier', () => { + test('returns true with no search word and filter size bronze tier that matches against a guild size of 100, the max guild size belonging to bronze tier', () => { const filter = { guildSize: 'silver_tier', }; @@ -199,7 +202,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with no search word and filter category that matches successfully against one guild category and filter role that does not match against guild role', () => { + test('returns false with no search word and filter category that matches successfully against one guild category and filter role that does not match against guild role', () => { const filter = { categories: ['hobbies_occupations'], roles: ['guild_leader'], @@ -208,7 +211,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with no search word and filter category that matches successfully against one guild category and filter role that matches successfully against guild role', () => { + test('returns true with no search word and filter category that matches successfully against one guild category and filter role that matches successfully against guild role', () => { const filter = { categories: ['hobbies_occupations'], roles: ['guild_leader'], @@ -217,7 +220,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup2, filter, search, user)).to.equal(true); }); - it('returns false with one search word that does not match against guild name and one filter category that matches successfully against guild categories', () => { + test('returns false with one search word that does not match against guild name and one filter category that matches successfully against guild categories', () => { const filter = { categories: ['hobbies_occupations'], }; @@ -225,7 +228,7 @@ describe('Groups Utilities Mixin', () => { expect(instance.filterGuild(testGroup, filter, search, user)).to.equal(false); }); - it('returns true with one search word that matches against guild name and one filter role that matches successfully against guild role', () => { + test('returns true with one search word that matches against guild name and one filter role that matches successfully against guild role', () => { const filter = { categories: ['hobbies_occupations'], }; diff --git a/website/client/tests/unit/store/actions/shops.spec.js b/website/client/tests/unit/store/actions/shops.spec.js index 9750c4e52b..30e8555c8b 100644 --- a/website/client/tests/unit/store/actions/shops.spec.js +++ b/website/client/tests/unit/store/actions/shops.spec.js @@ -1,11 +1,17 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import axios from 'axios'; import content from '@/../../common/script/content'; import getItemInfo from '@/../../common/script/libs/getItemInfo'; import getOfficialPinnedItems from '@/../../common/script/libs/getOfficialPinnedItems'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('shops actions', () => { let store; @@ -14,7 +20,7 @@ describe('shops actions', () => { }); describe('genericPurchase', () => { - it('buy gear', async () => { + test('buy gear', async () => { const user = { id: 1, stats: { diff --git a/website/client/tests/unit/store/actions/tasks.spec.js b/website/client/tests/unit/store/actions/tasks.spec.js index de6231a6b8..82c5ced938 100644 --- a/website/client/tests/unit/store/actions/tasks.spec.js +++ b/website/client/tests/unit/store/actions/tasks.spec.js @@ -1,6 +1,12 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import axios from 'axios'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('tasks actions', () => { let store; @@ -13,7 +19,7 @@ describe('tasks actions', () => { if (axios.get && axios.get.restore) axios.get.restore(); }); - it.skip('fetches user tasks', async () => { + test.skip('fetches user tasks', async () => { expect(store.state.tasks.loadingStatus).to.equal('NOT_LOADED'); const tasks = [{ _id: 1 }]; sandbox.stub(axios, 'get').withArgs('/api/v4/tasks/user').returns(Promise.resolve({ data: { data: tasks } })); @@ -24,7 +30,7 @@ describe('tasks actions', () => { expect(store.state.tasks.loadingStatus).to.equal('LOADED'); }); - it('does not reload tasks by default', async () => { + test('does not reload tasks by default', async () => { const originalTask = [{ _id: 1 }]; store.state.tasks = { loadingStatus: 'LOADED', @@ -40,7 +46,7 @@ describe('tasks actions', () => { expect(store.state.tasks.loadingStatus).to.equal('LOADED'); }); - it.skip('can reload tasks if forceLoad is true', async () => { + test.skip('can reload tasks if forceLoad is true', async () => { store.state.tasks = { loadingStatus: 'LOADED', data: [{ _id: 1 }], diff --git a/website/client/tests/unit/store/actions/user.spec.js b/website/client/tests/unit/store/actions/user.spec.js index e33078cce8..c1ffc50fe1 100644 --- a/website/client/tests/unit/store/actions/user.spec.js +++ b/website/client/tests/unit/store/actions/user.spec.js @@ -1,6 +1,12 @@ +import { + describe, expect, test, beforeEach, afterEach, +} from 'vitest'; import axios from 'axios'; +import sinon from 'sinon'; import generateStore from '@/store'; +const sandbox = sinon.createSandbox(); + describe('user actions', () => { let store; @@ -13,7 +19,7 @@ describe('user actions', () => { }); describe('fetch', () => { - it('loads the user', async () => { + test('loads the user', async () => { expect(store.state.user.loadingStatus).to.equal('NOT_LOADED'); const user = { _id: 1 }; sandbox.stub(axios, 'get').withArgs('/api/v4/user').returns(Promise.resolve({ data: { data: user } })); @@ -24,7 +30,7 @@ describe('user actions', () => { expect(store.state.user.loadingStatus).to.equal('LOADED'); }); - it('does not reload user by default', async () => { + test('does not reload user by default', async () => { const originalUser = { _id: 1 }; store.state.user = { loadingStatus: 'LOADED', @@ -40,7 +46,7 @@ describe('user actions', () => { expect(store.state.user.loadingStatus).to.equal('LOADED'); }); - it('can reload user if forceLoad is true', async () => { + test('can reload user if forceLoad is true', async () => { store.state.user = { loadingStatus: 'LOADED', data: { _id: 1 }, diff --git a/website/client/tests/unit/store/getters/members/hasClass.spec.js b/website/client/tests/unit/store/getters/members/hasClass.spec.js index 701e72f9ea..a6ca9eaa6b 100644 --- a/website/client/tests/unit/store/getters/members/hasClass.spec.js +++ b/website/client/tests/unit/store/getters/members/hasClass.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import { hasClass } from '@/store/getters/members'; describe('hasClass getter', () => { - it('returns false if level < 10', () => { + test('returns false if level < 10', () => { const member = { stats: { lvl: 5, @@ -16,7 +17,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns false if member has disabled classes', () => { + test('returns false if member has disabled classes', () => { const member = { stats: { lvl: 10, @@ -31,7 +32,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns false if member has not yet selected a class', () => { + test('returns false if member has not yet selected a class', () => { const member = { stats: { lvl: 10, @@ -46,7 +47,7 @@ describe('hasClass getter', () => { expect(hasClass()(member)).to.equal(false); }); - it('returns true when all conditions are met', () => { + test('returns true when all conditions are met', () => { const member = { stats: { lvl: 10, diff --git a/website/client/tests/unit/store/getters/tasks/canDelete.spec.js b/website/client/tests/unit/store/getters/tasks/canDelete.spec.js index 345fc35aac..395a3de398 100644 --- a/website/client/tests/unit/store/getters/tasks/canDelete.spec.js +++ b/website/client/tests/unit/store/getters/tasks/canDelete.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('canDelete getter', () => { @@ -33,40 +36,40 @@ describe('canDelete getter', () => { task = { userId: 1, challenge: { id: 2 } }; }); - it('cannot Delete challenge or group task in own dashboard', () => { + test('cannot Delete challenge or group task in own dashboard', () => { expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(false); expect(store.getters['tasks:canDelete'](task, 'group', true, group, null)).to.equal(false); }); - it('can Delete any challenge task as admin', () => { + test('can Delete any challenge task as admin', () => { store.state.user.data.permissions = { challengeAdmin: true }; expect(store.getters['tasks:canDelete'](task, 'challenge', true, null, challenge)).to.equal(true); }); - it('can Delete own challenge task if leader', () => { + test('can Delete own challenge task if leader', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('cannot Delete challenge task if non leader on challenge page', () => { + test('cannot Delete challenge task if non leader on challenge page', () => { expect(store.getters['tasks:canDelete'](task, 'challenge', false, null, challenge)).to.equal(false); }); - it('can Delete group task as leader on group page', () => { + test('can Delete group task as leader on group page', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true); }); - it('can Delete group task if manager on group page', () => { + test('can Delete group task if manager on group page', () => { store.state.user.data.id = 123984; expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(true); }); - it('cannot Delete group task if not a leader on group page', () => { + test('cannot Delete group task if not a leader on group page', () => { expect(store.getters['tasks:canDelete'](task, 'group', false, group)).to.equal(false); }); }); diff --git a/website/client/tests/unit/store/getters/tasks/canEdit.spec.js b/website/client/tests/unit/store/getters/tasks/canEdit.spec.js index 15962b7030..f0c93a30d0 100644 --- a/website/client/tests/unit/store/getters/tasks/canEdit.spec.js +++ b/website/client/tests/unit/store/getters/tasks/canEdit.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('canEdit getter', () => { @@ -33,45 +36,45 @@ describe('canEdit getter', () => { task = { userId: 1, challenge: { id: 2 } }; }); - it('can Edit task in own dashboard', () => { + test('can Edit task in own dashboard', () => { expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); }); - it('cannot Edit group task in own dashboard', () => { + test('cannot Edit group task in own dashboard', () => { expect(store.getters['tasks:canEdit'](task, 'group', true, group, null)).to.equal(false); }); - it('can Edit any challenge task if admin', () => { + test('can Edit any challenge task if admin', () => { store.state.user.data.permissions = { challengeAdmin: true }; expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('can Edit own challenge task if leader', () => { + test('can Edit own challenge task if leader', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canEdit'](task, 'challenge', true, null, challenge)).to.equal(true); expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(true); }); - it('cannot Edit challenge task if not leader on challenge page', () => { + test('cannot Edit challenge task if not leader on challenge page', () => { expect(store.getters['tasks:canEdit'](task, 'challenge', false, null, challenge)).to.equal(false); }); - it('can Edit group task as leader on group page', () => { + test('can Edit group task as leader on group page', () => { store.state.user.data.id = 123; expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true); }); - it('can Edit group task if manager on group page', () => { + test('can Edit group task if manager on group page', () => { store.state.user.data.id = 123984; expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(true); }); - it('cannot Edit group task if not leader on group page', () => { + test('cannot Edit group task if not leader on group page', () => { expect(store.getters['tasks:canEdit'](task, 'group', false, group)).to.equal(false); }); }); diff --git a/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js b/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js index 902e80d388..e198e4a2ad 100644 --- a/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTagsFor.spec.js @@ -1,7 +1,8 @@ +import { describe, expect, test } from 'vitest'; import generateStore from '@/store'; describe('getTagsFor getter', () => { - it('returns the tags for a task', () => { + test('returns the tags for a task', () => { const store = generateStore(); store.state.user.data = { tags: [ diff --git a/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js b/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js index ad05f73a6c..7c4c1530b2 100644 --- a/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTaskClasses.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('getTaskClasses getter', () => { @@ -14,92 +17,92 @@ describe('getTaskClasses getter', () => { getTaskClasses = store.getters['tasks:getTaskClasses']; }); - it('returns reward edit-modal-bg class', () => { + test('returns reward edit-modal-bg class', () => { const task = { type: 'reward' }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-purple-modal-bg'); }); - it('returns worst task edit-modal-bg class', () => { + test('returns worst task edit-modal-bg class', () => { const task = { type: 'todo', value: -21 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-worst-modal-bg'); }); - it('returns worse task edit-modal-bg class', () => { + test('returns worse task edit-modal-bg class', () => { const task = { type: 'todo', value: -11 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-worse-modal-bg'); }); - it('returns bad task edit-modal-bg class', () => { + test('returns bad task edit-modal-bg class', () => { const task = { type: 'todo', value: -6 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-bad-modal-bg'); }); - it('returns neutral task edit-modal-bg class', () => { + test('returns neutral task edit-modal-bg class', () => { const task = { type: 'todo', value: 0 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-neutral-modal-bg'); }); - it('returns good task edit-modal-bg class', () => { + test('returns good task edit-modal-bg class', () => { const task = { type: 'todo', value: 2 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-good-modal-bg'); }); - it('returns better task edit-modal-bg class', () => { + test('returns better task edit-modal-bg class', () => { const task = { type: 'todo', value: 6 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-better-modal-bg'); }); - it('returns best task edit-modal-bg class', () => { + test('returns best task edit-modal-bg class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-bg')).to.equal('task-best-modal-bg'); }); - it('returns best task edit-modal-text class', () => { + test('returns best task edit-modal-text class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-text')).to.equal('task-best-modal-text'); }); - it('returns best task edit-modal-icon class', () => { + test('returns best task edit-modal-icon class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-icon')).to.equal('task-best-modal-icon'); }); - it('returns best task edit-modal-option-disabled class', () => { + test('returns best task edit-modal-option-disabled class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-option-disabled')).to.equal('task-best-modal-option-disabled'); }); - it('returns best task edit-modal-control-disabled class', () => { + test('returns best task edit-modal-control-disabled class', () => { const task = { type: 'todo', value: 12 }; expect(getTaskClasses(task, 'edit-modal-habit-control-disabled')).to.equal('task-best-modal-habit-control-disabled'); }); - it('returns create-modal-bg class', () => { + test('returns create-modal-bg class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-bg')).to.equal('task-purple-modal-bg'); }); - it('returns create-modal-text class', () => { + test('returns create-modal-text class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-text')).to.equal('task-purple-modal-text'); }); - it('returns create-modal-icon class', () => { + test('returns create-modal-icon class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-icon')).to.equal('task-purple-modal-icon'); }); - it('returns create-modal-option-disabled class', () => { + test('returns create-modal-option-disabled class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-option-disabled')).to.equal('task-purple-modal-option-disabled'); }); - it('returns create-modal-habit-control-disabled class', () => { + test('returns create-modal-habit-control-disabled class', () => { const task = { type: 'todo' }; expect(getTaskClasses(task, 'create-modal-habit-control-disabled')).to.equal('task-purple-modal-habit-control-disabled'); }); - it('returns completed todo classes', () => { + test('returns completed todo classes', () => { const task = { type: 'todo', value: 2, completed: true }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-disabled-daily-todo-control-bg', @@ -109,7 +112,7 @@ describe('getTaskClasses getter', () => { }); }); - it('returns good todo classes', () => { + test('returns good todo classes', () => { const task = { type: 'todo', value: 2 }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-good-control-bg', @@ -119,14 +122,14 @@ describe('getTaskClasses getter', () => { }); }); - it('returns reward classes', () => { + test('returns reward classes', () => { const task = { type: 'reward' }; expect(getTaskClasses(task, 'control')).to.deep.equal({ bg: 'task-reward-control-bg', }); }); - it('returns habit up classes', () => { + test('returns habit up classes', () => { const task = { type: 'habit', value: 2, up: true }; expect(getTaskClasses(task, 'control')).to.deep.equal({ up: { @@ -142,7 +145,7 @@ describe('getTaskClasses getter', () => { }); }); - it('returns noninteractive classes and padlock icons for group board tasks', () => { + test('returns noninteractive classes and padlock icons for group board tasks', () => { const task = { type: 'todo', value: 2, diff --git a/website/client/tests/unit/store/getters/tasks/getTasks.spec.js b/website/client/tests/unit/store/getters/tasks/getTasks.spec.js index c0cfa6969b..7c49b8f9bd 100644 --- a/website/client/tests/unit/store/getters/tasks/getTasks.spec.js +++ b/website/client/tests/unit/store/getters/tasks/getTasks.spec.js @@ -1,3 +1,6 @@ +import { + describe, expect, test, beforeEach, +} from 'vitest'; import generateStore from '@/store'; describe('Store Getters for Tasks', () => { @@ -44,7 +47,7 @@ describe('Store Getters for Tasks', () => { }; }); - it('should returns all tasks by task type', () => { + test('should returns all tasks by task type', () => { let returnedTasks = store.getters['tasks:getUnfilteredTaskList']('habit'); expect(returnedTasks).to.eq(habits); @@ -80,7 +83,7 @@ describe('Store Getters for Tasks', () => { }; }); - it('should return weak habits', () => { + test('should return weak habits', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'habit', filterType: 'yellowred', @@ -89,7 +92,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(habits[0]); }); - it('should return strong habits', () => { + test('should return strong habits', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'habit', filterType: 'greenblue', @@ -98,7 +101,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(habits[1]); }); - it('should return scheduled todos', () => { + test('should return scheduled todos', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'todo', filterType: 'scheduled', @@ -107,7 +110,7 @@ describe('Store Getters for Tasks', () => { expect(returnedTasks[0]).to.eq(todos[0]); }); - it('should return completed todos', () => { + test('should return completed todos', () => { const returnedTasks = store.getters['tasks:getFilteredTaskList']({ type: 'todo', filterType: 'complete2', diff --git a/website/client/tests/unit/store/getters/user/user.spec.js b/website/client/tests/unit/store/getters/user/user.spec.js index 1bd84e20d4..af55cc21fe 100644 --- a/website/client/tests/unit/store/getters/user/user.spec.js +++ b/website/client/tests/unit/store/getters/user/user.spec.js @@ -1,10 +1,11 @@ +import { describe, expect, test } from 'vitest'; import { data, gems, buffs, preferences, tasksOrder, } from '@/store/getters/user'; -context('user getters', () => { +describe('user getters', () => { describe('data', () => { - it('returns the user\'s data', () => { + test('returns the user\'s data', () => { expect(data({ state: { user: { @@ -18,7 +19,7 @@ context('user getters', () => { }); describe('gems', () => { - it('returns the user\'s gems', () => { + test('returns the user\'s gems', () => { expect(gems({ state: { user: { @@ -30,7 +31,7 @@ context('user getters', () => { }); describe('buffs', () => { - it('returns the user\'s buffs', () => { + test('returns the user\'s buffs', () => { expect(buffs({ state: { user: { @@ -46,7 +47,7 @@ context('user getters', () => { }); describe('preferences', () => { - it('returns the user\'s preferences', () => { + test('returns the user\'s preferences', () => { expect(preferences({ state: { user: { @@ -60,7 +61,7 @@ context('user getters', () => { }); describe('tasksOrder', () => { - it('returns the user\'s tasksOrder', () => { + test('returns the user\'s tasksOrder', () => { expect(tasksOrder({ state: { user: { diff --git a/website/client/tests/unit/store/store.spec.js b/website/client/tests/unit/store/store.spec.js index f05690fcf4..11c5c9fd31 100644 --- a/website/client/tests/unit/store/store.spec.js +++ b/website/client/tests/unit/store/store.spec.js @@ -1,8 +1,9 @@ +import { describe, expect, test } from 'vitest'; import Store from '@/libs/store'; import generateStore from '@/store'; describe('Application store', () => { - it('is an instance of Store', () => { + test('is an instance of Store', () => { expect(generateStore()).to.be.an.instanceof(Store); }); }); diff --git a/website/client/vite.config.mjs b/website/client/vite.config.mjs new file mode 100644 index 0000000000..5044140053 --- /dev/null +++ b/website/client/vite.config.mjs @@ -0,0 +1,169 @@ +import nconf from 'nconf'; +import path from 'path'; +import { defineConfig } from 'vite' +import { ViteS3 } from '@froxz/vite-plugin-s3' +import { compression } from 'vite-plugin-compression2'; +import vue from '@vitejs/plugin-vue2' +import { fileURLToPath } from 'node:url' +import setupNconf from '../server/libs/setupNconf'; + +const configFile = path.join(path.resolve(__dirname, '../../config.json')); +setupNconf(configFile, nconf); +const DEV_BASE_URL = nconf.get('BASE_URL'); + +let S3_URL = nconf.get('S3_URL'); +if (S3_URL && !S3_URL.endsWith('/')) { + S3_URL += '/'; +} + +const ENABLE_S3 = S3_URL && nconf.get('S3_ACCESS_KEY') && nconf.get('S3_SECRET_KEY'); + + +const envVars = [ + 'AMAZON_PAYMENTS_SELLER_ID', + 'AMAZON_PAYMENTS_CLIENT_ID', + 'AMAZON_PAYMENTS_MODE', + 'EMAILS_COMMUNITY_MANAGER_EMAIL', + 'EMAILS_TECH_ASSISTANCE_EMAIL', + 'EMAILS_PRESS_ENQUIRY_EMAIL', + 'GA_ID', + 'STRIPE_PUB_KEY', + 'GOOGLE_CLIENT_ID', + 'APPLE_AUTH_CLIENT_ID', + 'AMPLITUDE_KEY', + 'LOGGLY_CLIENT_TOKEN', + 'TRUSTED_DOMAINS', + 'TIME_TRAVEL_ENABLED', + 'DEBUG_ENABLED', + 'CONTENT_SWITCHOVER_TIME_OFFSET', + // TODO necessary? if yes how not to mess up with vue cli? 'NODE_ENV' +]; + +const envObject = {}; + +envVars + .forEach(key => { + envObject[`import.meta.env.${key}`] = `'${nconf.get(key)}'`; + envObject[`process.env.${key}`] = `'${nconf.get(key)}'`; + }); +if (nconf.get('BASE_URL').indexOf('//habitica.com') !== -1) { + envObject['import.meta.env.DEBUG_ENABLED'] = `false`; + envObject['import.meta.env.TIME_TRAVEL_ENABLED'] = `false`; +} + +// https://vitejs.dev/config/ +export default defineConfig({ + define: envObject, + resolve: { + alias: [ + { find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) }, + { find: '~', replacement: fileURLToPath(new URL('./node_modules', import.meta.url)) }, + ], + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'], + dedupe: ['moment', 'lodash', 'moment-recur'], + }, + plugins: [ + vue(), + compression({ + filename: 'compressed/[base]', + compressionOptions: { level: 9 }, + skipIfLargerOrEqual: false, + }), + ViteS3(ENABLE_S3, { + include: [/compressed\/.*/], + basePath: nconf.get('S3_BASE_PATH'), + clientConfig: { + credentials: { + accessKeyId: nconf.get('S3_ACCESS_KEY'), + secretAccessKey: nconf.get('S3_SECRET_KEY'), + }, + region: nconf.get('S3_REGION'), + }, + uploadOptions: { + Bucket: nconf.get('S3_BUCKET_NAME'), + ContentEncoding: 'gzip', + } + }), + ViteS3(ENABLE_S3, { + include: [/\.png$/], + basePath: nconf.get('S3_BASE_PATH'), + clientConfig: { + credentials: { + accessKeyId: nconf.get('S3_ACCESS_KEY'), + secretAccessKey: nconf.get('S3_SECRET_KEY'), + }, + region: nconf.get('S3_REGION'), + }, + uploadOptions: { + Bucket: nconf.get('S3_BUCKET_NAME'), + } + }) + ], + experimental: { + renderBuiltUrl(filename, { hostType }) { + if (ENABLE_S3) { + if (hostType === 'js' && (filename.endsWith('.js') || filename.endsWith('.css'))) { + return { relative: true } + } else if (filename.endsWith('.js') || filename.endsWith('.css')) { + const name = filename.replace('assets/', 'compressed/') + return `${S3_URL}${name}` + } + return `${S3_URL}${filename}` + } else { + return { relative: true } + } + } + }, + optimizeDeps: { + include: ['moment-recur'] + }, + build: { + commonjsOptions: { + include: [/moment-recur/, /node_modules/] + }, + rollupOptions: { + output: { + experimentalMinChunkSize: 1000 + } + } + }, + base: '/', + server: { + headers: { 'Cache-Control': 'no-store' }, + proxy: { + // proxy all requests to the server at IP:PORT as specified in the top-level config + '^/api/v3': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/api/v4': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/stripe': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/amazon': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/paypal': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/logout-server': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/export': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + '^/analytics': { + target: DEV_BASE_URL, + changeOrigin: true, + }, + } + } +}) diff --git a/website/client/vitest.config.js b/website/client/vitest.config.js new file mode 100644 index 0000000000..d9ff697255 --- /dev/null +++ b/website/client/vitest.config.js @@ -0,0 +1,22 @@ +import { defineConfig, mergeConfig } from 'vitest/config'; +import viteConfig from './vite.config.mjs'; + +export default defineConfig(configEnv => mergeConfig( + viteConfig, + defineConfig({ + test: { + include: ['tests/**'], + environment: 'jsdom', + }, + browser: { + enabled: true, + headless: true, + provider: 'playwright', + instances: [ + { + browser: 'chromium', + }, + ], + }, + }), +)); diff --git a/website/client/vue.config.js b/website/client/vue.config.js deleted file mode 100644 index 8d3528b9db..0000000000 --- a/website/client/vue.config.js +++ /dev/null @@ -1,200 +0,0 @@ -/* eslint-disable import/no-commonjs */ -const path = require('path'); -const webpack = require('webpack'); -const nconf = require('nconf'); -const vueTemplateCompiler = require('vue-template-babel-compiler'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const setupNconf = require('../server/libs/setupNconf'); -const pkg = require('./package.json'); - -const configFile = path.join(path.resolve(__dirname, '../../config.json')); - -// TODO abstract from server -setupNconf(configFile, nconf); - -const DEV_BASE_URL = nconf.get('BASE_URL'); - -const envVars = [ - 'AMAZON_PAYMENTS_SELLER_ID', - 'AMAZON_PAYMENTS_CLIENT_ID', - 'AMAZON_PAYMENTS_MODE', - 'EMAILS_COMMUNITY_MANAGER_EMAIL', - 'EMAILS_TECH_ASSISTANCE_EMAIL', - 'EMAILS_PRESS_ENQUIRY_EMAIL', - 'BASE_URL', - 'GA_ID', - 'STRIPE_PUB_KEY', - 'GOOGLE_CLIENT_ID', - 'APPLE_AUTH_CLIENT_ID', - 'AMPLITUDE_KEY', - 'LOGGLY_CLIENT_TOKEN', - 'TRUSTED_DOMAINS', - 'TIME_TRAVEL_ENABLED', - 'DEBUG_ENABLED', - 'CONTENT_SWITCHOVER_TIME_OFFSET', - // TODO necessary? if yes how not to mess up with vue cli? 'NODE_ENV' -]; - -const envObject = {}; - -envVars - .forEach(key => { - envObject[`process.env.${key}`] = `'${nconf.get(key)}'`; - }); - -const webpackPlugins = [ - new webpack.ProvidePlugin({ 'window.jQuery': 'jquery' }), - new webpack.DefinePlugin(envObject), - new MomentLocalesPlugin({ - localesToKeep: ['bg', - 'cs', - 'da', - 'de', - 'en', - 'es', - 'fr', - 'he', - 'hu', - 'id', - 'it', - 'ja', - 'nl', - 'pl', - 'pt', - 'pt-br', - 'ro', - 'ru', - 'sk', - 'sv', - 'tr', - 'uk', - 'zh-cn', - 'zh-tw', - ], - }), - new webpack.IgnorePlugin({ - checkResource (resource, context) { - if ((context.includes('sinon') || resource.includes('sinon') || context.includes('nise')) && nconf.get('TIME_TRAVEL_ENABLED') !== 'true') { - return true; - } - if (context.includes('yargs')) { - return true; - } - return false; - }, - }), -]; - -module.exports = { - assetsDir: 'static', - configureWebpack: { - module: { - rules: [ - { - test: /\.svg/, - dependency: { not: ['url'] }, - type: 'asset/source', - }, - { - test: /\.js$/, - // Exclude transpiling `node_modules`, except `bootstrap-vue/src` - exclude: /node_modules\/(?!bootstrap-vue\/src\/)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - }, - }, - }, - { - test: /\.js$/, - // Exclude transpiling `node_modules`, except `bootstrap-vue/src` - exclude: /node_modules\/(?!validator)/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], - }, - }, - }, - ], - }, - resolve: { - fallback: { - crypto: false, - fs: false, - os: false, - path: false, - stream: false, - timers: require.resolve('timers-browserify'), - }, - alias: { - // Alias for using source of BootstrapVue - 'bootstrap-vue$': 'bootstrap-vue/src/index.js', - }, - }, - plugins: webpackPlugins, - }, - chainWebpack: config => { - // Fix issue with duplicated deps in monorepos - // https://getpocket.com/redirect?url=https%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack%2Fissues%2F8886 - // Manually resolve each dependency - Object.keys(pkg.dependencies).forEach(dep => { - config.resolve.alias - .set(dep, path.resolve(__dirname, `./node_modules/${dep}`)); - }); - - // Fix issue with Safari cache, see https://github.com/vuejs/vue-cli/issues/2509 - if (process.env.NODE_ENV === 'development') { - config.plugins.delete('preload'); - } - - // enable optional chaining in templates - config.module - .rule('vue') - .use('vue-loader') - .tap(options => { - options.compiler = vueTemplateCompiler; - return options; - }); - }, - - devServer: { - headers: { 'Cache-Control': 'no-store' }, - proxy: { - // proxy all requests to the server at IP:PORT as specified in the top-level config - '^/api/v3': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/api/v4': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/stripe': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/amazon': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/paypal': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/logout-server': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/export': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - '^/analytics': { - target: DEV_BASE_URL, - changeOrigin: true, - }, - }, - }, -}; diff --git a/website/client/webpack.webstorm.config b/website/client/webpack.webstorm.config deleted file mode 100644 index 729c3d2a88..0000000000 --- a/website/client/webpack.webstorm.config +++ /dev/null @@ -1,9 +0,0 @@ -const path = require('path'); - -module.exports = { - resolve: { - alias: { - '@': path.join(__dirname, 'src'), - } - }, -}; diff --git a/website/common/script/content/constants/schedule.js b/website/common/script/content/constants/schedule.js index 80d60cbd65..b69d9d1deb 100644 --- a/website/common/script/content/constants/schedule.js +++ b/website/common/script/content/constants/schedule.js @@ -1,5 +1,4 @@ import moment from 'moment'; -import nconf from 'nconf'; import SEASONAL_SETS from './seasonalSets'; import { getRepeatingEvents } from './events'; @@ -794,7 +793,7 @@ export const GALA_SCHEDULE = { }, }; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; export const TYPE_SCHEDULE = { timeTravelers: FIRST_RELEASE_DAY, diff --git a/website/common/script/content/hatching-potions.js b/website/common/script/content/hatching-potions.js index c7e11fc17c..7572666c05 100644 --- a/website/common/script/content/hatching-potions.js +++ b/website/common/script/content/hatching-potions.js @@ -1,6 +1,6 @@ import defaults from 'lodash/defaults'; import each from 'lodash/each'; -import { assign } from 'lodash'; +import assign from 'lodash/assign'; import t from './translation'; import datedMemoize from '../fns/datedMemoize'; import { filterReleased } from './is_released'; diff --git a/website/common/script/content/is_released.js b/website/common/script/content/is_released.js index e1b4f69cef..4f3f4d415d 100644 --- a/website/common/script/content/is_released.js +++ b/website/common/script/content/is_released.js @@ -1,9 +1,8 @@ import moment from 'moment'; import filter from 'lodash/filter'; -import { pickBy } from 'lodash'; -import nconf from 'nconf'; +import pickBy from 'lodash/pickBy'; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; const releaseDateEndPart = `T${String(SWITCHOVER_TIME).padStart(2, '0')}:00-0000`; diff --git a/website/common/script/fns/datedMemoize.js b/website/common/script/fns/datedMemoize.js index c71ab59248..44c023539b 100644 --- a/website/common/script/fns/datedMemoize.js +++ b/website/common/script/fns/datedMemoize.js @@ -1,7 +1,6 @@ import moment from 'moment'; -import nconf from 'nconf'; -const SWITCHOVER_TIME = nconf.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +const SWITCHOVER_TIME = process.env.CONTENT_SWITCHOVER_TIME_OFFSET || 0; function getDay (date) { if (date === undefined) { diff --git a/website/server/index.js b/website/server/index.js index c1288e4b20..6434ee31a0 100644 --- a/website/server/index.js +++ b/website/server/index.js @@ -9,7 +9,7 @@ if (process.env.NODE_ENV !== 'production') { const cluster = require('cluster'); -const setupNconf = require('./libs/setupNconf'); +const setupNconf = require('./libs/setupNconf').default; // Initialize configuration BEFORE anything setupNconf(); diff --git a/website/server/libs/setupNconf.js b/website/server/libs/setupNconf.js index 073f499687..d37bf07d14 100644 --- a/website/server/libs/setupNconf.js +++ b/website/server/libs/setupNconf.js @@ -1,11 +1,11 @@ /* eslint-disable import/no-commonjs */ // NOTE es5 requires/exports to allow import from webpack -const nconfDefault = require('nconf'); -const { join, resolve } = require('path'); +import nconfDefault from 'nconf'; +import { join, resolve } from 'path'; const PATH_TO_CONFIG = join(resolve(__dirname, '../../../config.json')); -module.exports = function setupNconf (file, nconfInstance = nconfDefault) { +export default function setupNconf (file, nconfInstance = nconfDefault) { const configFile = file || PATH_TO_CONFIG; nconfInstance @@ -16,4 +16,7 @@ module.exports = function setupNconf (file, nconfInstance = nconfDefault) { nconfInstance.set('IS_PROD', nconfInstance.get('NODE_ENV') === 'production'); nconfInstance.set('IS_DEV', nconfInstance.get('NODE_ENV') === 'development'); nconfInstance.set('IS_TEST', nconfInstance.get('NODE_ENV') === 'test'); -}; + + // we need this in common and can't use nconf on the client. + process.env.CONTENT_SWITCHOVER_TIME_OFFSET = nconfInstance.get('CONTENT_SWITCHOVER_TIME_OFFSET') || 0; +} diff --git a/website/server/middlewares/static.js b/website/server/middlewares/static.js index 757e942fe1..e1ae9b6c23 100644 --- a/website/server/middlewares/static.js +++ b/website/server/middlewares/static.js @@ -17,6 +17,7 @@ export default function staticMiddleware (expressApp) { expressApp.use('/static/css', express.static(`${BASE_DIR}/website/client/dist/static/css`, { maxAge: ONE_YEAR })); expressApp.use('/static/svg', express.static(`${BASE_DIR}/website/client/dist/static/svg`, { maxAge: ONE_YEAR })); expressApp.use('/static/img', express.static(`${BASE_DIR}/website/client/dist/static/img`, { maxAge: ONE_YEAR })); + expressApp.use('/assets', express.static(`${BASE_DIR}/website/client/dist/assets`, { maxAge: ONE_YEAR })); /* Expose other static files (audio, emails images, ...) These files are not processed by Webpack but they change very rarely. From ebbcbef6d5d9e6b80bbf367662e69e82d770bf31 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Thu, 12 Jun 2025 17:24:24 +0200 Subject: [PATCH 02/38] Fix deploying static files to S3 (#15450) * upload all image types to s3 * fix __dirname not existing --- website/client/src/router/index.js | 2 +- website/client/vite.config.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index cbb0efa1ce..5c02b358d5 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -69,7 +69,7 @@ Vue.use(VueRouter); const router = new VueRouter({ mode: 'history', - base: process.env.NODE_ENV === 'production' ? '/' : __dirname, // eslint-disable-line no-process-env + base: '/', linkActiveClass: 'active', // When navigating to another route always scroll to the top // To customize the behavior see https://router.vuejs.org/en/advanced/scroll-behavior.html diff --git a/website/client/vite.config.mjs b/website/client/vite.config.mjs index 5044140053..c67a085fbf 100644 --- a/website/client/vite.config.mjs +++ b/website/client/vite.config.mjs @@ -85,7 +85,7 @@ export default defineConfig({ } }), ViteS3(ENABLE_S3, { - include: [/\.png$/], + include: [/.*\.(png|jpg|jpeg|gif|svg|webp|ico)/], basePath: nconf.get('S3_BASE_PATH'), clientConfig: { credentials: { From 836807aa1e925d41bd9ce30664abbc818d32bf25 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Thu, 12 Jun 2025 13:11:16 -0500 Subject: [PATCH 03/38] Update static features pages (#15451) * update images on static features page * small layout changes * Update feature texts * layout tweaks * refactor(client): move to Vite by @phillipthelen * update images on static features page * make text more comfortable to read * update capitalization * fix(whitespace): add EOF CR --------- Co-authored-by: Phillip Thelen --- website/client/src/assets/scss/button.scss | 6 + .../client/src/components/static/features.vue | 139 ++++++++++-------- website/common/locales/en/front.json | 52 +++---- website/common/locales/en_GB/front.json | 44 +++--- 4 files changed, 135 insertions(+), 106 deletions(-) diff --git a/website/client/src/assets/scss/button.scss b/website/client/src/assets/scss/button.scss index 837cb89967..a86354a6f7 100644 --- a/website/client/src/assets/scss/button.scss +++ b/website/client/src/assets/scss/button.scss @@ -316,3 +316,9 @@ line-height: 2; padding: 2px 2px; } + +.btn-lg { + font-size: 1.25rem; + line-height: 1.5; + padding: .5rem 1rem; +} diff --git a/website/client/src/components/static/features.vue b/website/client/src/components/static/features.vue index 82af35313d..868d58ee71 100644 --- a/website/client/src/components/static/features.vue +++ b/website/client/src/components/static/features.vue @@ -6,127 +6,145 @@

-
- +
+

{{ $t('marketing1Lead1Title') }}

-

{{ $t('marketing1Lead1') }}

+
+

{{ $t('marketing1Lead1') }}

+
-
- +
+
+
+

{{ $t('marketing1Lead2Title') }}

-

{{ $t('marketing1Lead2') }}

- +

{{ $t('marketing1Lead2') }}

+
+
+

{{ $t('marketing1Lead3Title') }}

-

{{ $t('marketing1Lead3') }}

+

{{ $t('marketing1Lead3') }}


-
+

{{ $t('marketing2Header') }}

-
-
+
+

{{ $t('marketing2Lead1Title') }}

-

{{ $t('marketing2Lead1') }}

- -

{{ $t('marketing2Lead2Title') }}

-

+

{{ $t('marketing2Lead1') }}

-
- +
+
+
+ +

{{ $t('marketing2Lead2Title') }}

+

+
+
+

{{ $t('marketing2Lead3Title') }}

-

{{ $t('marketing2Lead3') }}

+

{{ $t('marketing2Lead3') }}


-
+

{{ $t('marketing3Header') }}

-
- -

{{ $t('footerMobile') }}

-

+
+ +

{{ $t('marketing3Lead1Title') }}

+

-
- +
+

{{ $t('marketing3Lead2Title') }}

-

+


-
+

{{ $t('marketing4Header') }}

-
+

{{ $t('marketing4Lead1Title') }}

-

{{ $t('marketing4Lead1') }}

+

{{ $t('marketing4Lead1') }}

-
+

{{ $t('marketing4Lead2Title') }}

-

{{ $t('marketing4Lead2') }}

+

{{ $t('marketing4Lead2') }}

-
-
-

{{ $t('marketing4Lead3Title') }}

- -

- {{ $t('marketing4Lead3-1') }} +

+
+

{{ $t('marketing4Lead3Title') }}

+ +
+

{{ $t('marketing4Lead3-1') }}

-

-

- {{ $t('marketing4Lead3-2') }} - {{ $t('contactUs') }} -

+
diff --git a/website/common/locales/en/front.json b/website/common/locales/en/front.json index 003a6f0247..ba87f0a80e 100644 --- a/website/common/locales/en/front.json +++ b/website/common/locales/en/front.json @@ -26,32 +26,34 @@ "invalidEmail": "A valid email address is required in order to perform a password reset.", "login": "Login", "logout": "Log Out", - "marketing1Header": "Improve Your Habits by Playing a Game", - "marketing1Lead1Title": "Your Life, the Role Playing Game", - "marketing1Lead1": "Habitica is a video game to help you improve real life habits. It \"gamifies\" your life by turning all your tasks (Habits, Dailies, and To Do's) into little monsters you have to conquer. The better you are at this, the more you progress in the game. If you slip up in life, your character starts backsliding in the game.", - "marketing1Lead2Title": "Get Sweet Gear", - "marketing1Lead2": "Improve your habits to build up your avatar. Show off the sweet gear you've earned!", - "marketing1Lead3Title": "Find Random Prizes", - "marketing1Lead3": "For some, it's the gamble that motivates them: a system called \"stochastic rewards.\" Habitica accommodates all reinforcement and punishment styles: positive, negative, predictable, and random.", - "marketing2Header": "Compete with Friends", - "marketing2Lead1Title": "Social Productivity", - "marketing2Lead1": "While you can play Habitica solo, the lights really turn on when you start collaborating, competing, and holding each other accountable. The most effective part of any self-improvement program is social accountability, and what better an environment for accountability and competition than a video game?", - "marketing2Lead2Title": "Fight Monsters", - "marketing2Lead2": "What's a Role Playing Game without battles? Fight monsters with your party. Monsters are \"super accountability mode\" - a day you miss the gym is a day the monster hurts *everyone!*", - "marketing2Lead3Title": "Challenge Each Other", - "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", - "marketing3Header": "Apps and Extensions", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realize that logging into the website to click buttons can be a drag.", - "marketing3Lead2Title": "Integrations", - "marketing3Lead2": "Other **3rd Party Tools** tie Habitica into various aspects of your life. Our API provides easy integration for things like the [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), for which you lose points when browsing unproductive websites, and gain points when on productive ones. [See more here](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Organizational Use", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", - "marketing4Lead1Title": "Gamification In Education", - "marketing4Lead2": "Health care costs are on the rise, and something's gotta give. Hundreds of programs are built to reduce costs and improve wellness. We believe Habitica can pave a substantial path towards healthy lifestyles.", - "marketing4Lead2Title": "Gamification In Health and Wellness", - "marketing4Lead3-1": "Want to gamify your life?", + "marketing1Header": "Build better habits one level at a time!", + "marketing1Lead1Title": "Gamify your life", + "marketing1Lead1": "Habitica is the perfect app for anyone who struggles with to-do lists. We use familiar game mechanics like rewarding you with Gold, Experience, and items to help you feel productive and boost your sense of accomplishment when you complete tasks. The better you are at your tasks, the more you progress in the game.", + "marketing1Lead2Title": "Gear up in style", + "marketing1Lead2": "Collect swords, armor, and much more with the Gold you earn from completing tasks. With hundreds of pieces to collect and choose from, you'll never run out of combinations to try. Optimize for stats, style, or both! ", + "marketing1Lead3Title": "Get rewarded for your effort", + "marketing1Lead3": "Having something to look forward to can be the difference between getting a task done, or having it taunt you for weeks. When life doesn't offer a reward, Habitica has you covered! You’ll be rewarded for every task, but surprises are around every corner–so keep up your progress! ", + "marketing2Header": "Team up with friends", + "marketing2Lead1Title": "Social productivity", + "marketing2Lead1": "Get a boost of motivation by collaborating, competing, and interacting with others! Habitica is built to harness the most effective part of any self-improvement program: social accountability.", + "marketing2Lead2Title": "Battle monsters on Quests", + "marketing2Lead2": "Take on one of our hundreds of Quests with a Party of friends to enter the fray. Quest monsters push your accountability to the max. Forgetting to floss means damage done to everyone!", + "marketing2Lead3Title": "Challenge each other", + "marketing2Lead3": "Join Challenges made by our community to get curated task lists that fit your interests and goals. Do your best to compete for the Gem prize awarded to the winner!", + "marketing3Header": "More ways to use Habitica", + "marketing3Lead1Title": "Android & iOS apps", + "marketing3Lead1": "You can get Habitica on your Android or iOS device to check off tasks anywhere. Check out our award winning apps for a fresh approach to getting things done.", + "marketing3Lead2Title": "Open-Source community", + "marketing3Lead2": "We're proud to be an open-source project that welcomes contributions from our dedicated community. Make Habitica fit your own needs or contribute to improve the experience of all players around the world. Visit us on [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) to learn more!", + "marketing4Header": "Beyond household chores", + "marketing4Lead1": "Education is one of the best places for a little gamification! Break through the monotony of everyday classwork by adding some game play into the mix. Habitica can be a fun way to track homework, make classroom Challenges, and let your students show off their accomplishments.", + "marketing4Lead1Title": "Gamification in education", + "marketing4Lead2": "Building a healthier lifestyle can easily become an overwhelming endeavor. Habitica helps you track all aspects of your fitness goals with flexible scheduling and intensity to meet you where you are. So have some fun while you work your way towards better health!", + "marketing4Lead2Title": "Gamification In health and wellness", + "marketing4Lead3-1": "Ready to have fun getting things done?", "marketing4Lead3-2": "Interested in running a group in education, wellness, and more?", - "marketing4Lead3Title": "Gamify Everything", + "marketing4Lead3Title": "Start your journey!", + "marketing4Lead3Button": "Get Started Today", "mobileAndroid": "Android App", "mobileIOS": "iOS App", "oldNews": "News", diff --git a/website/common/locales/en_GB/front.json b/website/common/locales/en_GB/front.json index 4190009446..ab3f9f0cf0 100644 --- a/website/common/locales/en_GB/front.json +++ b/website/common/locales/en_GB/front.json @@ -25,32 +25,32 @@ "invalidEmail": "A valid email address is required in order to perform a password reset.", "login": "Login", "logout": "Log Out", - "marketing1Header": "Improve Your Habits by Playing a Game", - "marketing1Lead1Title": "Your Life, the Role Playing Game", - "marketing1Lead1": "Habitica is a video game to help you improve real life habits. It \"gamifies\" your life by turning all your tasks (Habits, Dailies, and To Do's) into little monsters you have to conquer. The better you are at this, the more you progress in the game. If you slip up in life, your character starts backsliding in the game.", - "marketing1Lead2Title": "Get Sweet Gear", - "marketing1Lead2": "Improve your habits to build up your avatar. Show off the sweet gear you've earned!", - "marketing1Lead3Title": "Find Random Prizes", - "marketing1Lead3": "For some, it's the gamble that motivates them: a system called \"stochastic rewards.\" Habitica accommodates all reinforcement and punishment styles: positive, negative, predictable, and random.", - "marketing2Header": "Compete with Friends", + "marketing1Header": "Build better habits one level at a time!", + "marketing1Lead1Title": "Gamify your life", + "marketing1Lead1": "Habitica is the perfect app for anyone who struggles with to-do lists. We use familiar game mechanics like rewarding you with Gold, Experience, and items to help you feel productive and boost your sense of accomplishment when you complete tasks. The better you are at your tasks, the more you progress in the game.", + "marketing1Lead2Title": "Gear up in style", + "marketing1Lead2": "Collect swords, armor, and much more with the Gold you earn from completing tasks. With hundreds of pieces to collect and choose from, you'll never run out of combinations to try. Optimize for stats, style, or both! ", + "marketing1Lead3Title": "Get rewarded for your effort", + "marketing1Lead3": "Having something to look forward to can be the difference between getting a task done, or having it taunt you for weeks. When life doesn't offer a reward, Habitica has you covered! You’ll be rewarded for every task, but surprises are around every corner–so keep up your progress! ", + "marketing2Header": "Team up with friends", "marketing2Lead1Title": "Social Productivity", - "marketing2Lead1": "While you can play Habitica solo, the lights really turn on when you start collaborating, competing, and holding each other accountable. The most effective part of any self-improvement program is social accountability, and what better an environment for accountability and competition than a video game?", - "marketing2Lead2Title": "Fight Monsters", - "marketing2Lead2": "What's a Role Playing Game without battles? Fight monsters with your party. Monsters are \"super accountability mode\" - a day you miss the gym is a day the monster hurts *everyone!*", + "marketing2Lead1": "Get a boost of motivation by collaborating, competing, and interacting with others! Habitica is built to harness the most effective part of any self-improvement program: social accountability.", + "marketing2Lead2Title": "Battle monsters on Quests", + "marketing2Lead2": "Take on one of our hundreds of Quests with a Party of friends to enter the fray. Quest monsters push your accountability to the max. Forgetting to floss means damage done to everyone!", "marketing2Lead3Title": "Challenge Each Other", - "marketing2Lead3": "Challenges let you compete with friends and strangers. Whoever does the best at the end of a challenge wins special prizes.", - "marketing3Header": "Apps and Extensions", - "marketing3Lead1": "The **iPhone & Android** apps let you take care of business on the go. We realise that logging into the website to click buttons can be a drag.", - "marketing3Lead2Title": "Integrations", - "marketing3Lead2": "Other **3rd Party Tools** tie Habitica into various aspects of your life. Our API provides easy integration for things like the [Chrome Extension](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), for which you lose points when browsing unproductive websites, and gain points when on productive ones. [See more here](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Organisational Use", - "marketing4Lead1": "Education is one of the best sectors for gamification. We all know how glued to phones and games students are these days; harness that power! Pit your students against each other in friendly competition. Reward good behavior with rare prizes. Watch their grades and behavior soar.", + "marketing2Lead3": "Join Challenges made by our community to get curated task lists that fit your interests and goals. Do your best to compete for the Gem prize awarded to the winner!", + "marketing3Header": "Android & iOS Apps", + "marketing3Lead1": "You can get Habitica on your Android or iOS device to check off tasks anywhere. Check out our award winning apps for a fresh approach to getting things done.", + "marketing3Lead2Title": "Open-Source Community", + "marketing3Lead2": "We're proud to be an open-source project that welcomes contributions from our dedicated community. Make Habitica fit your own needs or contribute to improve the experience of all players around the world. Visit us on [GitHub](https://github.com/habitrpg) to learn more!", + "marketing4Header": "Beyond household chores", + "marketing4Lead1": "Education is one of the best places for a little gamification! Break through the monotony of everyday classwork by adding some game play into the mix. Habitica can be a fun way to track homework, make classroom Challenges, and let your students show off their accomplishments.", "marketing4Lead1Title": "Gamification In Education", - "marketing4Lead2": "Health care costs are on the rise, and something's gotta give. Hundreds of programmes are built to reduce costs and improve wellness. We believe Habitica can pave a substantial path towards healthy lifestyles.", - "marketing4Lead2Title": "Gamification In Health And Wellness", - "marketing4Lead3-1": "Want to gamify your life?", + "marketing4Lead2": "Building a healthier lifestyle can easily become an overwhelming endeavor. Habitica helps you track all aspects of your fitness goals with flexible scheduling and intensity to meet you where you are. So have some fun while you work your way towards better health!", + "marketing4Lead2Title": "Gamification In Health and Wellness", + "marketing4Lead3-1": "Ready to have fun getting things done?", "marketing4Lead3-2": "Interested in running a group in education, wellness, and more?", - "marketing4Lead3Title": "Gamify Everything", + "marketing4Lead3Title": "Start Your Journey", "mobileAndroid": "Android App", "mobileIOS": "iOS App", "oldNews": "News", From bce07ec357722d3c519c0cd6591d56b100cfeb6d Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Mon, 16 Jun 2025 18:48:37 +0200 Subject: [PATCH 04/38] wait for vue router to be ready (#15456) * wait for vue router to be ready * fix(lint): whitespace --------- Co-authored-by: Kalista Payne --- website/client/src/app.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/website/client/src/app.vue b/website/client/src/app.vue index 245e75706f..2b1215b6df 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -269,9 +269,11 @@ export default { const loadingScreen = document.getElementById('loading-screen'); if (loadingScreen) document.body.removeChild(loadingScreen); - if (this.isStaticPage || !this.isUserLoggedIn) { - this.hideLoadingScreen(); - } + this.$router.onReady(() => { + if (this.isStaticPage || !this.isUserLoggedIn) { + this.hideLoadingScreen(); + } + }); }, methods: { hideLoadingScreen () { From 9948e8ee44d087c8d3bf0651d76c9783aedbf357 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Wed, 4 Jun 2025 14:28:27 -0500 Subject: [PATCH 05/38] fix(mobile): provide Challenge categories via API --- website/common/script/content/index.js | 4 +++- website/server/controllers/api-v3/content.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/website/common/script/content/index.js b/website/common/script/content/index.js index 861fefb08d..779b7c1700 100644 --- a/website/common/script/content/index.js +++ b/website/common/script/content/index.js @@ -17,7 +17,7 @@ import { } from './constants'; import achievements from './achievements'; - +import categoryOptions from './categoryOptions'; import eggs from './eggs'; import hatchingPotions from './hatching-potions'; import stable from './stable'; @@ -85,6 +85,8 @@ api.officialPinnedItems = officialPinnedItems; api.bundles = bundles; +api.categoryOptions = categoryOptions; + /* --------------------------------------------------------------- Unique Rewards: Potion and Armoire diff --git a/website/server/controllers/api-v3/content.js b/website/server/controllers/api-v3/content.js index ed8a79d782..b2f8b959b1 100644 --- a/website/server/controllers/api-v3/content.js +++ b/website/server/controllers/api-v3/content.js @@ -10,7 +10,7 @@ const MOBILE_FILTER = ['achievements', 'questSeriesAchievements', 'animalColorAc 'stableAchievements', 'bundles', 'loginIncentives', 'pets', 'premiumPets', 'specialPets', 'questPets', 'wackyPets', 'mounts', 'premiumMounts,specialMounts,questMounts', 'events', 'dropEggs', 'questEggs', 'dropHatchingPotions', 'premiumHatchingPotions', 'wackyHatchingPotions', 'backgroundsFlat', 'questsByLevel', 'gear.tree', 'tasksByCategory', - 'userDefaults', 'timeTravelStable', 'gearTypes', 'cardTypes']; + 'userDefaults', 'timeTravelStable', 'gearTypes', 'cardTypes', 'categoryOptions']; const ANDROID_FILTER = [...MOBILE_FILTER, 'appearances.background'].join(','); const IOS_FILTER = [...MOBILE_FILTER, 'backgrounds'].join(','); From 98a6535dc3c44ac56fd2f60c0b5bb75f45f98fb0 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Mon, 16 Jun 2025 16:43:56 -0500 Subject: [PATCH 06/38] fix(content): don't filter out the thing we want --- website/server/controllers/api-v3/content.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/server/controllers/api-v3/content.js b/website/server/controllers/api-v3/content.js index b2f8b959b1..ed8a79d782 100644 --- a/website/server/controllers/api-v3/content.js +++ b/website/server/controllers/api-v3/content.js @@ -10,7 +10,7 @@ const MOBILE_FILTER = ['achievements', 'questSeriesAchievements', 'animalColorAc 'stableAchievements', 'bundles', 'loginIncentives', 'pets', 'premiumPets', 'specialPets', 'questPets', 'wackyPets', 'mounts', 'premiumMounts,specialMounts,questMounts', 'events', 'dropEggs', 'questEggs', 'dropHatchingPotions', 'premiumHatchingPotions', 'wackyHatchingPotions', 'backgroundsFlat', 'questsByLevel', 'gear.tree', 'tasksByCategory', - 'userDefaults', 'timeTravelStable', 'gearTypes', 'cardTypes', 'categoryOptions']; + 'userDefaults', 'timeTravelStable', 'gearTypes', 'cardTypes']; const ANDROID_FILTER = [...MOBILE_FILTER, 'appearances.background'].join(','); const IOS_FILTER = [...MOBILE_FILTER, 'backgrounds'].join(','); From 407e1bb560051cc97279e38fb50919c02ca4dccc Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 17 Jun 2025 12:58:03 +0200 Subject: [PATCH 07/38] Translated using Weblate (Italian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (91 of 91 strings) Translated using Weblate (Italian) Currently translated at 98.8% (898 of 908 strings) Translated using Weblate (Italian) Currently translated at 90.1% (82 of 91 strings) Translated using Weblate (Italian) Currently translated at 86.3% (2907 of 3367 strings) Translated using Weblate (German) Currently translated at 99.1% (3340 of 3367 strings) Translated using Weblate (Italian) Currently translated at 84.6% (77 of 91 strings) Translated using Weblate (Italian) Currently translated at 20.4% (50 of 245 strings) Translated using Weblate (Italian) Currently translated at 72.5% (66 of 91 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 86.5% (786 of 908 strings) Translated using Weblate (French) Currently translated at 88.5% (163 of 184 strings) Translated using Weblate (German) Currently translated at 99.1% (3338 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 86.4% (159 of 184 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (134 of 134 strings) Translated using Weblate (Spanish) Currently translated at 95.6% (176 of 184 strings) Translated using Weblate (Italian) Currently translated at 18.3% (45 of 245 strings) Translated using Weblate (Spanish) Currently translated at 86.4% (159 of 184 strings) Translated using Weblate (German) Currently translated at 86.4% (159 of 184 strings) Translated using Weblate (Polish) Currently translated at 29.7% (73 of 245 strings) Translated using Weblate (Polish) Currently translated at 28.9% (71 of 245 strings) Translated using Weblate (Polish) Currently translated at 100.0% (182 of 182 strings) Translated using Weblate (Polish) Currently translated at 28.9% (71 of 245 strings) Translated using Weblate (Polish) Currently translated at 96.3% (106 of 110 strings) Translated using Weblate (Dutch) Currently translated at 30.6% (75 of 245 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (245 of 245 strings) Translated using Weblate (German) Currently translated at 99.0% (3336 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (3367 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.8% (3361 of 3367 strings) Translated using Weblate (Italian) Currently translated at 17.9% (44 of 245 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.5% (3353 of 3367 strings) Translated using Weblate (Italian) Currently translated at 17.5% (43 of 245 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.2% (3343 of 3367 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.7% (429 of 430 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.5% (406 of 412 strings) Translated using Weblate (Korean) Currently translated at 96.4% (110 of 114 strings) Translated using Weblate (Korean) Currently translated at 100.0% (134 of 134 strings) Translated using Weblate (Korean) Currently translated at 22.8% (56 of 245 strings) Translated using Weblate (German) Currently translated at 99.0% (3334 of 3367 strings) Translated using Weblate (Korean) Currently translated at 13.0% (32 of 245 strings) Translated using Weblate (Korean) Currently translated at 9.7% (24 of 245 strings) Translated using Weblate (Korean) Currently translated at 7.3% (18 of 245 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.2% (3341 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.0% (3334 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 99.0% (3334 of 3367 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 92.7% (382 of 412 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.7% (3325 of 3367 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (56 of 56 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.7% (3324 of 3367 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 85.4% (776 of 908 strings) Translated using Weblate (Polish) Currently translated at 87.5% (7 of 8 strings) Translated using Weblate (Polish) Currently translated at 52.5% (1768 of 3367 strings) Translated using Weblate (Polish) Currently translated at 66.4% (573 of 862 strings) Translated using Weblate (German) Currently translated at 98.9% (3332 of 3367 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.5% (406 of 412 strings) Translated using Weblate (German) Currently translated at 98.9% (3330 of 3367 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 97.6% (842 of 862 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.5% (406 of 412 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.3% (405 of 412 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.6% (3322 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (266 of 266 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (280 of 280 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (430 of 430 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.1% (3305 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 98.1% (3305 of 3367 strings) Translated using Weblate (French) Currently translated at 100.0% (3367 of 3367 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (3367 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (245 of 245 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (845 of 845 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (908 of 908 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (94 of 94 strings) Translated using Weblate (Dutch) Currently translated at 28.5% (70 of 245 strings) Translated using Weblate (Dutch) Currently translated at 97.8% (46 of 47 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 97.9% (3297 of 3367 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 97.5% (239 of 245 strings) Co-authored-by: Alexandre Le Mercier Co-authored-by: Céu Co-authored-by: Dawid Wodyk Co-authored-by: Filip Betko Co-authored-by: FingerTiao <787170918@qq.com> Co-authored-by: Jaime Martí Co-authored-by: Jan P Co-authored-by: LaiYi Co-authored-by: Nik Co-authored-by: Pasquale Bosso Co-authored-by: Saalima Aaseman Co-authored-by: Sam Hou Co-authored-by: Sophie LE MASLE Co-authored-by: Summer_GUI Co-authored-by: Tetiana Co-authored-by: Toro Mor Co-authored-by: Weblate Co-authored-by: helianlouchen Co-authored-by: luckycc <806009164@qq.com> Co-authored-by: luckycccc <806009164@qq.com> Co-authored-by: sein Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/challenge/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/ Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/ Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/contrib/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/ko/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/front/de/ Translate-URL: https://translate.habitica.com/projects/habitica/front/es/ Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/front/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/groups/pt_BR/ Translate-URL: https://translate.habitica.com/projects/habitica/groups/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/limited/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/ko/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/sk/ Translate-URL: https://translate.habitica.com/projects/habitica/overview/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/pets/ko/ Translate-URL: https://translate.habitica.com/projects/habitica/quests/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/pt_BR/ Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/spells/uk/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/ Translation: Habitica/Backgrounds Translation: Habitica/Challenge Translation: Habitica/Communityguidelines Translation: Habitica/Content Translation: Habitica/Contrib Translation: Habitica/Faq Translation: Habitica/Front Translation: Habitica/Gear Translation: Habitica/Groups Translation: Habitica/Limited Translation: Habitica/Npc Translation: Habitica/Overview Translation: Habitica/Pets Translation: Habitica/Quests Translation: Habitica/Questscontent Translation: Habitica/Spells Translation: Habitica/Subscriber --- website/common/locales/de/front.json | 4 +- website/common/locales/de/gear.json | 14 ++- website/common/locales/es/front.json | 52 +++++------ website/common/locales/es/gear.json | 2 +- website/common/locales/fr/front.json | 12 +-- website/common/locales/fr/gear.json | 2 +- website/common/locales/it/backgrounds.json | 9 +- .../locales/it/communityguidelines.json | 56 ++++++------ website/common/locales/it/faq.json | 11 ++- website/common/locales/it/gear.json | 6 +- website/common/locales/ko/faq.json | 73 ++++++++++++--- website/common/locales/ko/npc.json | 39 ++++---- website/common/locales/ko/pets.json | 6 +- website/common/locales/nl/contrib.json | 6 +- website/common/locales/nl/faq.json | 8 +- website/common/locales/pl/challenge.json | 12 ++- website/common/locales/pl/faq.json | 8 +- website/common/locales/pl/front.json | 4 +- website/common/locales/pl/gear.json | 6 +- website/common/locales/pl/overview.json | 3 +- website/common/locales/pl/questscontent.json | 2 +- website/common/locales/pt_BR/content.json | 13 +-- website/common/locales/pt_BR/groups.json | 2 +- .../common/locales/pt_BR/questscontent.json | 74 +++++++-------- website/common/locales/sk/npc.json | 22 ++--- website/common/locales/uk/spells.json | 2 +- website/common/locales/zh/backgrounds.json | 7 +- website/common/locales/zh/faq.json | 8 +- website/common/locales/zh/front.json | 48 +++++----- website/common/locales/zh/gear.json | 90 +++++++++++++++++-- website/common/locales/zh/groups.json | 14 +-- website/common/locales/zh/limited.json | 8 +- website/common/locales/zh/quests.json | 2 +- website/common/locales/zh/questscontent.json | 4 +- website/common/locales/zh/subscriber.json | 29 +++--- website/common/locales/zh_TW/backgrounds.json | 15 +++- website/common/locales/zh_TW/content.json | 12 ++- 37 files changed, 449 insertions(+), 236 deletions(-) diff --git a/website/common/locales/de/front.json b/website/common/locales/de/front.json index 0f971bea70..af0cb23708 100644 --- a/website/common/locales/de/front.json +++ b/website/common/locales/de/front.json @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "z.B., habitrabbit oder gryphon@beispiel.com", "footerProduct": "Produkt", "incorrectResetPhrase": "Bitte tippe <%= magicWord %> in Großbuchstaben um deinen Account zurückzusetzen.", - "translateHabitica": "Habitica übersetzen" + "translateHabitica": "Habitica übersetzen", + "marketing3Lead1Title": "Android & iOS Apps", + "marketing4Lead3Button": "Starte noch heute" } diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index 5f907848f3..0e93d2ffbd 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -3329,5 +3329,17 @@ "weaponSpecialSummer2025RogueText": "Tintenfisch Tentakel", "weaponSpecialSummer2025RogueNotes": "Dieser Tentakel wird deine Ziele eng umklammern, so dass du den Schwung nicht verlierst, wenn du deine Aufgaben erledigst. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.", "weaponSpecialSummer2025HealerText": "Ruderschnecken Flügelpaddel", - "weaponSpecialSummer2025HealerNotes": "Beschreibe rudernd einen Doppelkreis, während du dich vorwärts bewegst, und bei deinen Aufgaben tolle Fortschritte machst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025." + "weaponSpecialSummer2025HealerNotes": "Beschreibe rudernd einen Doppelkreis, während du dich vorwärts bewegst, und bei deinen Aufgaben tolle Fortschritte machst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "weaponArmoireBeekeepersSmokerNotes": "Benutze dies, um deine Bienen zu beruhigen, damit du den Honig besser holen kannst. Die Bienen wird es nicht stören. Ehrlich, wir alle könnten von Zeit zu Zeit ein paar extra Minuten Ruhe gebrauchen. Erhöht Intelligenz um <%= int %>. Verzauberter Schrank: Imker Set (Gegenstand 3 von 4)", + "weaponArmoireBeekeepersSmokerText": "Smoker", + "armorSpecialSummer2025WarriorText": "Kammmuschel Rüstung", + "armorSpecialSummer2025WarriorNotes": "Diese Rüstung macht dich nicht nur robust, sondern auch schnell. Kampf oder Flucht - es ist deine Wahl! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025RogueNotes": "Dieser Anzug ändert nicht nur nach Lust und Laune seine Farbe, sondern kann auch eine Tintenwolke ausstoßen. Ablenken oder Tarnen - du hast die Wahl! Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025RogueText": "Tintenfisch Anzug", + "armorSpecialSummer2025HealerText": "Ruderschnecken Anzug", + "armorSpecialSummer2025HealerNotes": "Dieser Anzug macht dich nicht nur anmutig, sondern auch stromlinienförmig. Treibe oder schwimme - du hast die Wahl! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorSpecialSummer2025MageText": "Zwerglippfisch Anzug", + "armorSpecialSummer2025MageNotes": "Dieser Anzug hat nicht nur atemberaubende Farben, sondern ermöglicht dir auch, anmutig durch's Wasser zu gleiten. Schwimmen oder Tanzen - du hast die Wahl! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.", + "armorArmoireBeekeepersSuitText": "Imkeranzug", + "armorArmoireBeekeepersSuitNotes": "Schütze dich, während du nach deinen fleißigen Hummeln schaust. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Imker Set (Gegenstand 2 von 4)" } diff --git a/website/common/locales/es/front.json b/website/common/locales/es/front.json index 37a19d0830..9ff8107133 100644 --- a/website/common/locales/es/front.json +++ b/website/common/locales/es/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Para restablecer la contraseña, se necesita una dirección de correo electrónico válida.", "login": "Iniciar sesión", "logout": "Cerrar sesión", - "marketing1Header": "Mejora tus hábitos al jugar un juego", - "marketing1Lead1Title": "Tu vida, el Juego de Rol", - "marketing1Lead1": "Habitica es un videojuego pensado para mejorar tus hábitos en la vida real que \"gamifica\" tu vida, convirtiendo todas tus tareas (hábitos, tareas diarias y pendientes) en pequeños monstruos a los que debes vencer. Cuanto mejor lo hagas, más progresarás en el juego. Si no cumples algo en la vida real, tu personaje empezará a sufrir las consecuencias en el juego.", - "marketing1Lead2Title": "Consigue artículos de equipamiento increíbles", - "marketing1Lead2": "Mejora tus hábitos para dar forma a tu avatar. ¡Presume de la gran equipación que has obtenido!", - "marketing1Lead3Title": "Encuentra Premios Aleatorios", - "marketing1Lead3": "Para algunos, es el juego lo que los motiva: un sistema llamado \"recompensas estocásticas.\" Habitica integra todos los estilos de refuerzo y castigo: positivo, negativo, predecible, y aleatorio.", - "marketing2Header": "Compite con Amigos", + "marketing1Header": "¡Adquiere mejores hábitos nivel a nivel!", + "marketing1Lead1Title": "Traslada tu vida al juego", + "marketing1Lead1": "Habitica es la aplicación perfecta para aquellos que les cuesta completar su lista de tareas pendientes. Usamos mecánicas conocidas en los juegos como recompensar con monedas de Oro, Experiencia, y artículos, para ayudarte a sentirte productivo y fortalecer tu sentido de logro cuando completes tus tareas. Cuando mejor y más eficazmente logres tu tareas, más progresarás en el juego.", + "marketing1Lead2Title": "Equípate con estilo", + "marketing1Lead2": "Colecciona espadas, armaduras, y mucho más con las monedas de Oro que vas a obtener por completar tus tareas. Con cientos de piezas que coleccionar y que seleccionar, nunca se te acabarán las combinaciones a probar. ¡Optimiza tus estadísticas, tu estilo, o ambas! ", + "marketing1Lead3Title": "Obtén recompensas por tus esfuerzos", + "marketing1Lead3": "Tener un objetivo hacia el que encaminar tus esfuerzos puede significar una clara diferencia entre hacer una tarea, o posponerla por semanas. ¡Cuando en la vida real no hay una recompensa clara, Habitica te la ofrece! Obtendrás recompensas por cada tarea, además hay sorpresas esperándote en cada esquina, así que ¡mantén un buen ritmo de progreso! ", + "marketing2Header": "Haz un grupo con tus amigos", "marketing2Lead1Title": "Productividad social", - "marketing2Lead1": "Aunque puedes jugar en solitario a Habitica, la gracia realmente está en colaborar, competir y ser responsable de otras personas. La parte más efectiva de cualquier programa de automejora es la responsabilidad social, ¿y qué mejor que un entorno preparado para que puedas competir con tus responsabilidades que un videojuego?", - "marketing2Lead2Title": "Lucha contra monstruos", - "marketing2Lead2": "¿Qué es un Juego de Rol sin las batallas? Lucha contra monstruos con tu equipo. Los monstruos son \"modo súper-responsable\" - ¡Un día que no vayas al gimnasio es un día que el monstruo hiere a *todos!*", - "marketing2Lead3Title": "Retaos uno a otro", - "marketing2Lead3": "Los Desafíos te permiten competir con amigos y desconocidos. Quien lo haya hecho mejor al final del desafío gana un premio especial.", - "marketing3Header": "Aplicaciones y extensiones", - "marketing3Lead1": "Las apps **iPhone & Android** te permiten encargarte de tus cosas sobre la marcha. Sabemos que iniciar sesión en la web para pulsar botones puede ser un fastidio.", - "marketing3Lead2Title": "Integraciones", - "marketing3Lead2": "Otras **Herramientas de Terceros** unen Habitica a otros aspectos de tu vida. Nuestra API ofrece una integración sencilla a cosas como la [Extensión de Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), con la que pierdes puntos cuando visitas webs improductivas, y los ganas cuando visitas webs productivas. [Más información aquí](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Uso Organizacional", - "marketing4Lead1": "La educación es uno de los mejores sectores para la gamificación. Todos sabemos lo enganchados que están los estudiantes a los teléfonos y a los juegos hoy en día; ¡Aprovechemos ese poder! Enfrenta a tus estudiantes en competiciones amistosas. Recompensa el buen comportamiento con premios excepcionales. Observa cómo sus notas y su comportamiento se elevan.", - "marketing4Lead1Title": "Juegos en la Educación", - "marketing4Lead2": "Los cuidados de salud actualmente cuestan mucho dinero, y algo hay que hacer. Cientos de programas se crean para reducir costes y aumentar el bienestar. Nosotros creemos que Habitica puede pavimentar un camino hacia estilos de vida más sanos.", - "marketing4Lead2Title": "Juegos en la Salud y el Bienestar", - "marketing4Lead3-1": "¿Quieres convertir tu vida en un juego?", + "marketing2Lead1": "¡Fortalece tu motivación al colaborar, competir, y interactuar con otros! Habitica está diseñado para aprovechar la parte más efectiva de cualquier programa de superación personal: la responsabilidad social.", + "marketing2Lead2Title": "Ve a la batalla contra poderosos monstruos en las Misiones", + "marketing2Lead2": "Elige una de entre las cientos de Misiones con tu Equipo de amigos para comenzar la refriega. Los monstruos de la Misiones forzarán tu responsabilidad hacia tu Equipo al máximo. ¡No cumplir con las tareas se traducirá en daño colectivo a tu Equipo!", + "marketing2Lead3Title": "Retaos el uno al otro", + "marketing2Lead3": "Únete a los Desafíos creados por nuestra comunidad para obtener una variedad de listas de tareas que encajen con tus intereses y objetivos. ¡Dalo todo y completa lo que te pide para así ser merecedor del premio en Gemas para el ganador!", + "marketing3Header": "Más maneras de usar Habitica", + "marketing3Lead1": "Puedes descargarte Habitica en tu dispositivo Android o iOS, y así marcar tus tareas completadas donde quiera que estés. Pueba nuestras aplicaciones premiadas para darle un giro refrescante a tu forma de hacer las cosas.", + "marketing3Lead2Title": "Comunidad de Código-Abierto", + "marketing3Lead2": "Estamos orgullosos de ser un proyecto de código-abierto donde todos los colaboradores de nuestra comunidad entregada son bienvenidos. Haz que Habitica se adapte a tus propias necesidades o colabora para mejorar la experiencia de todos nuestros jugadores alrededor del mundo. ¡Visítanos en [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) para saber más!", + "marketing4Header": "Más allá de las tareas del hogar", + "marketing4Lead1": "¡La educación es uno de los mejores sectores que transformar en un juego! Rompe con la monotonía del día a día en clase, añadiendo un componente lúdico. Habitica puede ser una forma divertida de realizar un seguimiento de las tareas, crear Desafíos en el aula y permitir que tus estudiantes muestren sus logros.", + "marketing4Lead1Title": "Juegos como forma de educación", + "marketing4Lead2": "Llevar un estilo de vida más saludable puede convertirse en algo abrumador. Habitica te ayuda a hacer un seguimiento de todos los aspectos de tus objetivos deportivos con horarios e intensidades flexibles que se adaptan a tus necesidades. ¡Así que diviértete mientras te esfuerzas por mejorar tu salud!", + "marketing4Lead2Title": "Juegos adaptados a la salud y el bienestar", + "marketing4Lead3-1": "¿Estás dispuesto a divertirte mientras consigues tus objetivos?", "marketing4Lead3-2": "¿Estás interesado en llevar un grupo de educación, bienestar y mucho más?", - "marketing4Lead3Title": "Juega con Todo", + "marketing4Lead3Title": "¡Comienza tu aventura!", "mobileAndroid": "Aplicación de Android", "mobileIOS": "Aplicación de iOS", "oldNews": "Noticias", @@ -180,5 +180,7 @@ "socialAlreadyExists": "Esta identificación social ya está vinculado a una cuenta Habitica existente.", "footerProduct": "Producto", "translateHabitica": "Traduce Habitica", - "incorrectResetPhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para reiniciar tu cuenta." + "incorrectResetPhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para reiniciar tu cuenta.", + "marketing3Lead1Title": "Aplicaciones para Android y iOS", + "marketing4Lead3Button": "Empieza Hoy Mismo" } diff --git a/website/common/locales/es/gear.json b/website/common/locales/es/gear.json index fa5e6027a0..4aead5802f 100644 --- a/website/common/locales/es/gear.json +++ b/website/common/locales/es/gear.json @@ -2991,7 +2991,7 @@ "shieldSpecialFall2023HealerText": "Roca Musgosa", "weaponArmoireHattersShearsText": "Tijeras Afiladas", "weaponArmoireHattersShearsNotes": "Dale un buen corte al agobio y las complicaciones. También puedes usar estas tijeras para cortar tela por supuesto. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto de Sombrerero (Artículo 3 de 4).", - "armorArmoireSoftWhiteSuitNotes": "El blanco es el color de la paz. Ya sea que estés a punto de meterte en la cama o de pisar un hermoso y terrorífico manto de nieve recién caída, tendrás la mente despejada y lista. Aumenta la Constitución en <% con %> y la Percepción en <%= per %>. Armario Encantado: Conjunto Ropa de Casa Blanca (Artículo 2 de 3).", + "armorArmoireSoftWhiteSuitNotes": "El blanco es el color de la paz. Ya sea que estés a punto de meterte en la cama o de pisar un hermoso y terrorífico manto de nieve recién caída, tendrás la mente despejada y lista. Aumenta la Constitución en <%= con %> y la Percepción en <%= per %>. Armario Encantado: Conjunto Ropa de Casa Blanca (Artículo 2 de 3).", "weaponMystery202403Text": "Espadón Esmeralda Afortunada", "weaponMystery202403Notes": "¡Empuñar el espadón más grande es una buena manera de crear tu propia buena suerte! No otorga ningún beneficio. Artículo de Suscriptor Marzo 2024.", "armorArmoireSoftWhiteSuitText": "Ropa Mullidita Blanca", diff --git a/website/common/locales/fr/front.json b/website/common/locales/fr/front.json index bccd1b91b7..adb3b83cc6 100644 --- a/website/common/locales/fr/front.json +++ b/website/common/locales/fr/front.json @@ -25,12 +25,12 @@ "invalidEmail": "Une adresse courriel valide est nécessaire pour lancer une réinitialisation du mot de passe.", "login": "Connexion", "logout": "Déconnexion", - "marketing1Header": "Améliorez vos habitudes de manière ludique", - "marketing1Lead1Title": "Votre vie, le jeu de rôle", - "marketing1Lead1": "Habitica est un jeu vidéo qui vous aide à améliorer vos habitudes dans la vraie vie. Il \"ludifie\" votre vie en transformant toutes vos tâches (habitudes, quotidiennes ou à faire) en petits monstres que vous devez vaincre. Plus vous êtes doué pour cela, plus vous progressez dans le jeu. Si vous dérapez dans la vraie vie, votre personnage commence à rétrograder dans le jeu.", - "marketing1Lead2Title": "Obtenez un super équipement", - "marketing1Lead2": "Améliorez vos habitudes pour développer votre avatar. Frimez avec l'équipement que vous avez obtenu !", - "marketing1Lead3Title": "Gagnez des prix aléatoires", + "marketing1Header": "Adoptez de nouvelles habitudes, un niveau à la fois !", + "marketing1Lead1Title": "Ludifiez votre vie", + "marketing1Lead1": "Habitica est l'application idéale pour ce·ux·lles dépassées par leurs listes de tâches. Nous utilisons des mécaniques de jeu connues comme vous offrir des récompenses en Or, Expérience, et des objets pour vous aider à vous sentir producti·f·ve et cultiver un sentiment d'accomplissement en effectuant des tâches. Plus vous êtes efficace dans vos tâches, plus vous évoluez en jeu.", + "marketing1Lead2Title": "Équipez-vous avec classe", + "marketing1Lead2": "Collectez des armes, des armures et bien plus encore avec l'Or que vous obtenez en accomplissant vos tâches. Avec des centaines d'objets à collectionner et à essayer, vous ne serez jamais à court de combinaisons à tester. Optimisez vos choix pour les stats, le style, ou les deux ! ", + "marketing1Lead3Title": "Obtenez des récompenses pour vos efforts", "marketing1Lead3": "Certains trouvent leur motivation dans le jeu et le hasard : un système appelé \"récompense stochastique\". Habitica accueille touts les styles de consolidations et de punitions : positives, négatives, prévisibles et aléatoires.", "marketing2Header": "Soyez en compétition avec vos amis", "marketing2Lead1Title": "Productivité sociale", diff --git a/website/common/locales/fr/gear.json b/website/common/locales/fr/gear.json index cc5b1524fe..5a6002c959 100644 --- a/website/common/locales/fr/gear.json +++ b/website/common/locales/fr/gear.json @@ -2979,7 +2979,7 @@ "weaponArmoireScholarlyTextbooksText": "Livres d'École", "headSpecialNye2023Notes": "Vous avez reçu un Chapeau Ridicule de Fête ! Portez le avec fierté en clochetant vers la nouvelle année. Ne confère aucun avantage.", "armorArmoireSoftWhiteSuitText": "Costard Blanc Doux", - "armorArmoireSoftWhiteSuitNotes": "Le blanc est une couleur apaisante. Que vous soyez en face d'un drap de lit d'un blanc frais ou de la couverture d'une récente neige fraîche, vous aurez un esprit clair et apprêté. Augmente la Constitution de <%= con %> et la Perception de <%= per %>. Armoire Enchantée : Ensemble de Costard Blanc (objet 2 sur 3).", + "armorArmoireSoftWhiteSuitNotes": "Le blanc est une couleur apaisante. Que vous soyez en face d'un drap de lit d'un blanc frais ou d'un manteau de neige immaculée, vous aurez l'esprit clair et apprêté. Augmente la Constitution de <%= con %> et la Perception de <%= per %>. Armoire Enchantée : Ensemble de Costard Blanc (Objet 2 sur 3).", "armorSpecialWinter2024RogueText": "Toges de la Chouette des Neiges", "armorSpecialWinter2024RogueNotes": "Oùùùù iras tu quand tu porteras cette toge ? Recouverte de plumes et de duvet, tu seras à la fois au chaud et discret ! Augmente la Perception de <%= per %>. Édition Limitée 2023-2024 Équipement Hivernal.", "armorSpecialWinter2024WarriorNotes": "Il se trouve que du chocolat, de la menthe et un glaçage forment une matière plus résistante que tu ne le pense ! Augmente la Constitution de <%= con %>. Édition Limitée 2023-2024 Équipement Hivernal.", diff --git a/website/common/locales/it/backgrounds.json b/website/common/locales/it/backgrounds.json index 6ce3e6e3f0..d6ac6009df 100644 --- a/website/common/locales/it/backgrounds.json +++ b/website/common/locales/it/backgrounds.json @@ -889,5 +889,12 @@ "backgroundContainerGardenText": "Giardino in vaso", "backgroundContainerGardenNotes": "Sporcati le mani con il Giardino in Vaso.", "backgroundCastleHallWithHearthText": "Sala del Castello con Focolare", - "backgroundCastleHallWithHearthNotes": "Immergetevi nel calore di una Sala del Castello con il Focolare." + "backgroundCastleHallWithHearthNotes": "Immergetevi nel calore di una Sala del Castello con il Focolare.", + "backgrounds022025": "SET 129: rilasciato a febbraio 2025", + "backgroundOldFashionedTeaShopText": "Antico Negozio di Tè", + "backgroundOldFashionedTeaShopNotes": "Gustati una piacevole bevanda nell'Antico Negozio di Tè.", + "backgroundWinterLandscapeWithCabinNotes": "Rimani comodo/a nel Paesaggio Invernale con una Baita.", + "backgroundWinterLandscapeWithCabinText": "Paesaggio Invernale con Baita", + "backgrounds032025": "SET 130: rilasciato a marzo 2025", + "backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori" } diff --git a/website/common/locales/it/communityguidelines.json b/website/common/locales/it/communityguidelines.json index ffa285fdab..2ce76f4fa9 100644 --- a/website/common/locales/it/communityguidelines.json +++ b/website/common/locales/it/communityguidelines.json @@ -2,7 +2,7 @@ "tavernCommunityGuidelinesPlaceholder": "Nota amichevole: questa è una chat per utenti di ogni età, quindi per favore assicurati che il tuo linguaggio e i contenuti che pubblichi siano appropriati. Consulta le Linee guida della community nella sezione \"Link utili\" qui a lato se hai qualche domanda.", "lastUpdated": "Ultimo aggiornamento:", "commGuideHeadingWelcome": "Benvenuto ad Habitica!", - "commGuidePara001": "Salute, avventuriero! Benvenuto ad Habitica, la terra della produttività, della vita sana, e occasionalmente di grifoni infuriati.", + "commGuidePara001": "Salve avventuriero! Benvenuto ad Habitica, la terra della produttività, della vita sana, e occasionalmente di grifoni infuriati.", "commGuidePara002": "Per aiutare a mantenere la sicurezza, la felicità e la produttività nella community, abbiamo alcune linee guida per Sfide, profili dei Giocatori e chat, sia pubbliche, sia private. Le abbiamo stilate accuratamente per renderle il più semplici possibile. Per favore, leggile con attenzione prima di interfacciarti con gli altri Utenti.", "commGuidePara003": "Queste regole potrebbero cambiare di tanto in tanto. Quando ci saranno cambiamenti sostanziali nelle regole della community qui elencate, verrai avvertito con un annuncio di Bailey e/o sui nostri social media!", "commGuideHeadingInteractions": "Interazioni su Habitica", @@ -13,68 +13,68 @@ "commGuideList02D": "Tieni presente che gli Habitanti sono di tutte le età e provenienze. Le sfide e i profili dei giocatori non devono menzionare argomenti per adulti, usare parolacce o promuovere contese o conflitti.", "commGuideList02E": "Se un membro dello staff dice che un termine non è permesso in Habitica (anche se si trattasse di un termine di cui non avessi considerato la potenzialità problematica) tale decisione è definitiva. Inoltre, le denigrazioni saranno punite severamente poiché anch'esse sono una violazione dei Termini di Servizio.", "commGuideList02G": "Conformati immediatamente a qualsiasi richiesta di un membro dello Staff. Ciò può includere, ma non si limita a richieste di restrizioni sui tuoi post in un particolare spazio, di modificare il tuo profilo per rimuovere contenuto inadatto, ecc. Non discutere con lo Staff. Se hai dubbi o commenti sulle azioni dello Staff, invia un'email a admin@habitica.com per contattare il nostro responsabile per la community.", - "commGuideList02J": "Non spammare. Per spam s'intende (ma non solo): postare lo stesso commento o domanda in posti diversi, postare link senza contesto o alcuna spiegazione, postare messaggi senza senso, pubblicizzare ripetutamente messaggi di reclutamento per Gilde, Squadre o Sfide, oppure postare molti messaggi consecutivamente. Se cliccare un link provveduto da te, ti porta vantaggi da parte di chi clicca, dovrai indicarlo nel testo del tuo messaggio, altrimenti sarà considerato spam. Lo Staff può decidere cosa costituisce essere spam a propria discrezione.", - "commGuideList02K": "Evita di pubblicare grossi titoli negli spazi pubblici di chat, in particolare nella Taverna. Nella stessa maniera delle MAIUSCOLE, sembra tu stia urlando, e può interferire con l'atmosfera confortevole.", + "commGuideList02J": "Non spammare. Per spam s'intende (ma non solo): mandare più messaggi privati non richiesti, inviare messaggi insensati, inviare molteplici messaggi promozionali riguardo a una Squadra o una Sfida, o creare più Sfide simili o di bassa qualità di fila. Lo Staff può determinare a sua discrezione cosa è considerato spam.", + "commGuideList02K": "Non inviare link senza spiegazione o contesto. Se il fatto che un giocatore clicchi sul link ti beneficia in alcun modo devi esplicitarlo. Questa regola si applica sia ai messaggi che alle Sfide.", "commGuideList02L": "Scoraggiamo fortemente lo scambio di informazioni personali nelle chat pubbliche, in particolare quelle che possono essere usate per identificarti.. Le informazioni di questo tipo possono essere (ma non solo): il tuo indirizzo fisico, il tuo indirizzo email e la tua Chiave API/password. Se ti vengono chieste informazioni personali in una chat della Squadra o tramite messaggio privato, ti consigliamo caldamente di non rispondere ed informare lo Staff segnalando il messaggio, oppure contattando admin@habitica.com ed allegando gli screenshot dei messaggi nel caso in cui sia necessario approfondire il contesto.", "commGuidePara037": "Nessuna Squadra o Gruppo dev'essere creato allo scopo di attaccare qualsiasi gruppo o individuo. Combatti le cattive abitudini, non i tuoi compagni di avventura !", "commGuideHeadingInfractionsEtc": "Infrazioni, sanzioni e riabilitazione", "commGuideHeadingInfractions": "Infrazioni", - "commGuidePara050": "La stragrande maggioranza degli Habitanti si assistono l'un l'altro, sono rispettosi e fanno del proprio meglio per rendere la community allegra e piacevole. Tuttavia, molto raramente, un'azione di un Habitante potrebbe violare una delle linee guida sopra descritte. Quando succede, lo Staff compie qualunque azione ritengano necessaria per mantenere Habitica sicura e piacevole per tutti.", + "commGuidePara050": "La stragrande maggioranza degli Habitanti si assistono l'un l'altro, sono rispettosi e fanno del proprio meglio per rendere l'atmosfera allegra e piacevole. Tuttavia, molto raramente, un'azione di un Habitante potrebbe violare una delle Linee Guida sopra descritte. Quando succede, lo Staff compie qualunque azione ritenga necessaria per mantenere Habitica sicura e piacevole per tutti.", "commGuidePara051": "Ci sono diverse infrazioni, e sono gestite a seconda della gravità. Queste liste non sono esaustive, e lo Staff può prendere decisioni sugli argomenti non affrontati qui a loro discrezione. Lo Staff considererà il contesto quando valuteranno le infrazioni.", "commGuideHeadingSevereInfractions": "Infrazioni gravi", "commGuidePara052": "Le infrazioni gravi danneggiano la serenità della community di Habitica e degli utenti, e hanno quindi come risultato delle sanzioni gravi.", "commGuidePara053": "Questa è una lista di infrazioni gravi. Non è una lista esaustiva.", - "commGuideList05A": "Violazione dei Termini e condizioni d'uso", + "commGuideList05A": "Altre violazioni dei Termini e Condizioni qui non specificati", "commGuideList05B": "Incitamento all'odio, molestie/stalking, cyber-bullismo, pubblicazione di contenuti provocatori o irritanti nei confronti di altri utenti", "commGuideList05C": "Violazione della prova (utenti in prova)", - "commGuideList05D": "", + "commGuideList05D": "Impersonare lo Staff - include sostenere che spazi creati dai giocatori e non affiliati ad Habitica siano ufficiali e/o moderati da Habitica o dal suo Staff", "commGuideList05E": "Ripetere infrazioni lievi", - "commGuideList05F": "Creare un secondo account per evitare i provvedimenti (per esempio, creare un nuovo account per chattare dopo che sono stati revocati i privilegi di chat)", + "commGuideList05F": "Creare un secondo account per evitare i provvedimenti", "commGuideList05G": "Ingannare intenzionalmente lo Staff in modo da evitare sanzioni o mettere nei guai un altro utente", "commGuideHeadingModerateInfractions": "Infrazioni lievi", - "commGuidePara054": "Le infrazioni medie non mettono a rischio la nostra community, ma la rendono spiacevole. Queste infrazioni avranno sanzioni medie. Quando avvengono insieme ad altre infrazioni, le conseguenze potrebbero diventare più gravi.", + "commGuidePara054": "Queste infrazioni avranno sanzioni medie. Quando avvengono insieme ad altre infrazioni, le conseguenze potrebbero diventare più gravi.", "commGuidePara055": "Qui ci sono alcuni esempi di infrazioni lievi. Non è una lista esaustiva.", - "commGuideList06A": "Ignorare, mancare di rispetto o discutere con lo staff. Include lamentarsi pubblicamente dello staff o altri utenti, glorificare pubblicamente o difendere utenti bannati, o discutere se l'azione dello staff fosse appropriata o no. Se si è preoccupato/a per una o più delle regole o per il comportamento di un membro dello staff, si prega di contattarci tramite email (admin@habitica.com).", - "commGuideList06C": "Segnalare intenzionalmente pubblicazioni innocenti.", + "commGuideList06A": "Ignorare, mancare di rispetto o discutere con lo Staff. Se si è preoccupati per una o più regole o per il comportamento di un membro dello staff, si prega di contattarci tramite admin@habitica.com.", + "commGuideList06C": "Segnalare intenzionalmente Sfide, profili o messaggi innocenti.", "commGuideList06E": "Commettere Ripetutatemente Infrazioni Minori", "commGuideHeadingMinorInfractions": "Infrazioni minori", - "commGuidePara056": "Infrazioni lievi, anche se scoraggiate, hanno comunque conseguenze lievi. Se continuano a verificarsi, potranno essere trattate con maggiore severità.", + "commGuidePara056": "Infrazioni lievi, anche se scoraggiate, hanno comunque conseguenze lievi. Se continuano a verificarsi, potranno essere trattate con maggiore severità. Infrazioni lievi sono tipicamente la violazione di queste Linee Guida per la prima volta, ma possono includere anche altre circostanze.", "commGuidePara057": "Questa è una lista di infrazioni minori. Non è una lista esaustiva.", "commGuideList07A": "Prima violazione delle linee guida per gli spazi pubblici", - "commGuideList07B": "Qualsiasi dichiarazione che suscita un \"Per Favore, No\". Quando ti è chiesto di non fare qualcosa pubblicamente, questa può essere essa stessa una conseguenza. Se i Moderatori devono dare molte di queste correzioni alla stessa persona, potrebbe contare come una infrazione più grave", + "commGuideList07B": "Qualsiasi dichiarazione che suscita un \"Per Favore, No\" da un membro dello Staff. Quando ti è chiesto di non fare qualcosa pubblicamente, questa può essere essa stessa una conseguenza. Se lo Staff deve dare molte di queste correzioni alla stessa persona, potrebbe contare come un'infrazione più grave", "commGuidePara057A": "Alcuni messaggi possono essere nascosti perché contengono informazioni sensibili o possono dare ad altri utenti l'idea sbagliata. In genere questo non conta come infrazione, in particolare non la prima volta che accade!", "commGuideHeadingConsequences": "Sanzioni e conseguenze", - "commGuidePara059": " Similmente, ogni infrazione ha una conseguenza diretta. Alcuni esempi di conseguenze sono elencati di seguito.", + "commGuidePara059": "Infrazioni della Comunità hanno conseguenze dirette. Alcuni esempi di conseguenze sono elencati di seguito.", "commGuideHeadingSevereConsequences": "Esempi di sanzioni gravi", - "commGuideList09A": "Ban dell'account (vedi sopra)", - "commGuideList09C": "Blocco permanente (\"freezing\") della progressione del livello di sostenitore", + "commGuideList09A": "Ban dell'account", + "commGuideList09C": "Blocco permanente della progressione attraverso i Livelli Sostenitore", "commGuideHeadingModerateConsequences": "Esempio di sanzioni medie", - "commGuideList10D": "Blocco temporaneo (\"congelamento\") della progressione del grado di sostenitore", + "commGuideList10D": "Blocco temporaneo della progressione attraverso i Livelli Sostenitore", "commGuideHeadingMinorConsequences": "Esempi di sanzioni lievi", - "commGuideList11A": "Promemoria delle linee guida per gli spazi pubblici", + "commGuideList11A": "Promemoria delle Linee Guida", "commGuideList11B": "Avvertimenti", "commGuideList11C": "Richieste", - "commGuideList11D": "Eliminazioni (moderatori/staff possono eliminare contenuti problematici)", - "commGuideList11E": "Modifiche (moderatori/staff possono modificare contenuti problematici)", + "commGuideList11D": "Eliminazione dei contenuti problematici da parte dello Staff", + "commGuideList11E": "Modifiche di contenuti problematici da parte dello Staff", "commGuideHeadingRestoration": "Riabilitazione", - "commGuidePara061": "Habitica è un regno dedicato al miglioramento personale, e crediamo nelle seconde possibilità. Se tu hai commesso una infrazione e hai ricevuto una conseguenza, vedila come una possibilità di evaluare le tue azioni e di cercare di diventare un miglior membro della comunità.", - "commGuidePara062": "L'annuncio, messaggio, e/o mail che ricevi con la spiegazione delle conseguenze delle tue azioni è una buona fonte di informazioni. Coopera con qualunque restrizione sia stata imposta, e impegnati per raggiungere i requisiti per avere le sanzioni revocate.", - "commGuidePara063": "Se non capisci la tua sanzione, o la natura della tua infrazione, chiedi aiuto a Staff/Moderatori, così puoi evitare di commettere infrazioni in futuro. Se pensi che una decisione in particolare sia ingiusta, puoi contattare lo staff per discuterne a admin@habitica.com.", + "commGuidePara061": "Habitica è dedicata al miglioramento personale, e crediamo nelle seconde possibilità. Se tu hai commesso una infrazione e hai ricevuto una conseguenza, vedila come una possibilità di rivalutare le tue azioni e cercare di diventare un membro migliore della comunità.", + "commGuidePara062": "Se vuoi fare una domanda riguardo alla tua infrazione o alle sue conseguenze, scusarti, o chiedere il reinserimento, puoi contattarci tramite admin@habitica.com con il tuo User ID o @username. La responsabilità di contattarci è tua.", + "commGuidePara063": "Se non capisci la tua sanzione, o la natura della tua infrazione, o se hai altre domande correlate, puoi contattare lo staff per discuterne a admin@habitica.com. Coopera con le restrizioni imposte e sforzati di soddisfare i requisiti per ottenere la rimozione delle penalità.", "commGuideHeadingMeet": "Incontra lo Staff", - "commGuidePara007": "I membri dello Staff hanno etichette viola contrassegnate da una corona. Il loro titolo è \"Eroico\".", + "commGuidePara007": "Lo Staff di Habitica mantiene l'app e il sito funzionanti, e possono agire come moderatori delle chat. Hanno etichette viola contrassegnate da una corona. Il loro titolo è \"Eroico\".", "commGuidePara009": "L'attuale gruppo dello staff è composto da (partendo da sinistra verso destra):", "commGuideAKA": "<%= realName %> alias <%= habitName %>", "commGuideOnGitHub": "<%= gitHubName %> su GitHub", "commGuidePara011b": "su GitHub/Fandom", "commGuidePara011c": "sulla Wiki", "commGuidePara011d": "su GitHub", - "commGuidePara013": "In una comunità grande come Habitica, utenti vanno e vengono, e a volte membri dello staff e moderatori hanno bisogno di posare il loro nobile mantello e rilassarsi. Questi sono Membri dello Staff e Moderatori Emeriti. Non agiscono più con il potere di un membro dello Staff o Moderatore, ma vorremmo onorare il loro lavoro!", + "commGuidePara013": "In una comunità grande come Habitica, utenti vanno e vengono, e a volte membri dello Staff e moderatori hanno bisogno di posare il loro nobile mantello e rilassarsi. Questi sono Membri dello Staff e Moderatori Emeriti. Non agiscono più con il potere di un membro dello Staff o Moderatore, ma vorremmo ancora onorare il loro lavoro!", "commGuidePara014": "Staff e Moderatori emeriti:", "commGuideHeadingFinal": "La sezione finale", - "commGuidePara067": "Questo è quello che devi sapere, da bravo Habitante - le linee guida della comunità! Asciugati il sudore dalla fronte e prendi un po' di punti esperienza per averla letta tutta. Se hai dubbi o domande riguardo leLinee Guida della Comunità, per favore scrivici una mail a admin@habitica.com e saremo felici di chiarire ogni cosa.", + "commGuidePara067": "Questo è quello che devi sapere, coraggioso Habitante - le Linee Guida della comunità! Asciugati il sudore dalla fronte e prendi un po' di punti esperienza per averla letta tutta. Se hai dubbi o domande riguardo queste Linee Guida della Comunità, per favore contattaci tramite admin@habitica.com e saremo felici di chiarire ogni cosa.", "commGuidePara068": "Ora va', prode avventuriero, e sconfiggi qualche Attività Giornaliera!", "commGuideHeadingLinks": "Risorse utili (in inglese)", - "commGuideLink02": "La Wiki (in ingese): la più grande fonte di informazioni su Habitica.", + "commGuideLink02": "La Wiki (in inglese): la più grande fonte di informazioni su Habitica. Questo spazio non è ufficiale, è gestito da Fandom e mantenuto dai giocatori.", "commGuideLink03": "GitHub: per aiutare con il codice di programmazione!", "commGuideLink04": "Modulo feedback: per richieste di funzionalità e caratteristiche del sito.", "commGuidePara069": "I seguenti talentuosi artisti hanno contribuito a queste illustrazioni:", @@ -87,5 +87,7 @@ "commGuideList02I": "I nomi delle Sfide devono essere appropriati per tutti gli spazi, poiché appariranno nel profilo pubblico del vincitore. Tieni presente questo quando crei le Sfide, poiché potremmo essere costretti a modificare il record sul loro profilo se c'è una segnalazione.", "commGuideList02O": "Le Squadre possono creare le loro regole per le chat in base al comfort e alle preferenze dei membri. Tuttavia, gli amministratori non possono far rispettare le regole delle chat in questi spazi privati, a meno che non si verifichi una violazione dei Termini di Servizio, incluse le molestie. Se qualcuno della tua Squadra sta causando dei problemi, incoraggiamo il leader della Squadra a rimuoverlo.", "commGuideList02P": "Noi scoraggiamo l'invio di messaggi privati non richiesti. Se ricevi un messaggio indesiderato che ti mette a disagio o che viola queste Linee guida o i Termini di Servizio, ti preghiamo di bloccare l'utente che lo ha inviato e di segnalarlo all'attenzione dello Staff.", - "commGuideList02Q": "Non cercare di aggirare un blocco . Se qualcuno ti ha bloccato per impedirti di inviargli dei messaggi privati, non contattarlo altrove per chiedergli di rimuovere il blocco." + "commGuideList02Q": "Non cercare di aggirare un blocco . Se qualcuno ti ha bloccato per impedirti di inviargli dei messaggi privati, non contattarlo altrove per chiedergli di rimuovere il blocco.", + "commGuideList09E": "Rimozione permanente della possibilità di mandare messaggi privati o di apparire nella ricerca di membri della Squadra", + "commGuideList10G": "Temporanea rimozione della possibilità di mandare messaggi privati o di apparire nella ricerca di membri della Squadra" } diff --git a/website/common/locales/it/faq.json b/website/common/locales/it/faq.json index 05d4b33f65..5d17a7c93b 100644 --- a/website/common/locales/it/faq.json +++ b/website/common/locales/it/faq.json @@ -21,7 +21,7 @@ "webFaqAnswer32": "Tutti i giocatori iniziano con la classe Guerriero fino al raggiungimento del livello 10. Una volta raggiunto il livello 10, ti verrà data la possibilità di scegliere tra selezionare una nuova classe o continuare come Guerriero.\n\nOgni classe ha Equipaggiamento e Abilità diverse. Se non vuoi scegliere una classe, puoi selezionare \"Non scegliere\". Se decidi di non sceglierne una, puoi sempre abilitare il Sistema di Classe dalle Impostazioni in seguito.\n\nSe desideri cambiare classe dopo il livello 10, puoi farlo usando la Sfera della Rinascita. La Sfera della Rinascita diventa disponibile nel Mercato per 6 Gemme al livello 50 o gratuitamente al livello 100.\n\nIn alternativa, puoi cambiare classe in qualsiasi momento dalle Impostazioni per 3 Gemme. Questo non azzererà il tuo livello come la Sfera della Rinascita, ma ti consentirà di riassegnare i punti abilità che hai accumulato mentre salivi di livello per adattarli alla tua nuova classe.", "faqQuestion33": "Cos'è la barra blu che appare dopo il livello 10?", "webFaqAnswer28": "Si! Il bottone \"Pausa Danno\" si può trovare nelle Impostazioni. Premerlo impedirà che tu perda HP per le Attività giornaliere mancate. Ciò è utile quando sei in vacanza, hai bisogno di riposo, o per qualsiasi altra ragione tu abbia bisogno di una pausa. Se stai partecipando ad una Missione, i tuoi progressi in attesa saranno messi in pausa, ma subirai ancora i danni derivanti dalle Attività giornaliere mancate della tua Squadra.\n\nPer mettere in pausa delle Attività giornaliere specifiche, puoi modificare la pianificazione e fissarla ogni 0 giorni fino a quando non ti sentirai pronto/a a ricominciarla.", - "webFaqAnswer33": "Dopo aver sbloccato le Classi, sblocchi anche Abilità che richiedono Mana per essere utilizzate. Il Mana dipende dalla statistica INT e può essere modificata attraverso Abilità e Equipaggiamento.", + "webFaqAnswer33": "Dopo aver sbloccato il sistema delle Classi, sblocchi anche Abilità che richiedono Mana per essere utilizzate. Il Mana dipende dalla statistica INT e può essere modificata attraverso Abilità e Equipaggiamento", "faqQuestion34": "Che tipo di cibo piace al mio animale domestico?", "webFaqAnswer34": "Agli animali domestici piace il cibo che corrisponde al proprio colore. Gli animali base fanno eccezione, ma tutti a tutti gli animali basi piace lo stesso oggetto. Qui sotto puoi trovare la lista dei cibi specifici che piacciono a ciascun animale:\n\n* Agli animali base piace la carne\n* Agli animali bianchi piace il latte\n* Agli animal del deserto piacciono le patate\n* Agli animali rossi piacciono le fragole\n* Agli animali ombra piace la cioccolata\n* Agli animali scheletro piacciono i pesci\n* Agli animali zombie piace la carne marcia\n* Agli animali dello zucchero filato rosa piace lo zucchero filato rosa\n* Agli animali dello zucchero filato blu piace lo zucchero filato blu\n* Agli animali dorati piace il miele", "faqQuestion35": "Ho dato da mangiare al mio animale domestico ed è scomparso! Cos'è successo?", @@ -41,5 +41,12 @@ "faqQuestion42": "Cosa posso fare per aumentare il mio senso di responsabilità?", "webFaqAnswer42": "Uno dei modi migliori per motivarti e rafforzare la tua responsabilità nel completare le tue attività è unirti a una Squadra! Collaborare con altri giocatori di Habitica è un ottimo modo per completare Missioni e ottenere Animali ed Equipaggiamento, ricevere potenziamenti dalle abilità dei compagni di squadra, e aumentare la tua motivazione.\n\nUn altro modo è partecipare a una Sfida. Le Sfide creano alcune attività relative a un obiettivo specifico direttamente nella tua lista! Le Sfide aggiungono anche un elemento di competizione contro gli altri giocatori di Habitica, che dà una spinta alla tua motivazione attraverso il premio in Gemme. Ci sono Sfide ufficiali create dal Team di Habitica così come Sfide create da altri giocatori.", "faqQuestion43": "Come posso partecipare a una Missione?", - "webFaqAnswer43": "Per iniziare una Missione devi essere parte di una Squadra. Le Squadre possono essere avventure in solitaria in cui affronti le missioni da solo, oppure puoi invitare altri giocatori di Habitica per concludere le missioni più velocemente!\n\nScegli una Missione dal tuo inventario selezionando \"Inizia Missione\" da dentro la tua Squadra. Completa le tua attività come al solito per progredire nella Missione! Se stai affrontando una Missione Boss accumulerai danni contro un mostro, oppure avrai la possibilità di trovare oggetti se stai affrontando una Missione di Raccolta. Tutti i progressi in sospeso vengono applicati il giorno successivo.\n\nQuando avrai causato abbastanza danni o raccolto tutti gli oggetti, la Missione sarà completata e riceverai le tue ricompense!" + "webFaqAnswer43": "Per iniziare una Missione devi essere parte di una Squadra. Le Squadre possono essere avventure in solitaria in cui affronti le missioni da solo, oppure puoi invitare altri giocatori di Habitica per concludere le missioni più velocemente!\n\nScegli una Missione dal tuo inventario selezionando \"Inizia Missione\" da dentro la tua Squadra. Completa le tua attività come al solito per progredire nella Missione! Se stai affrontando una Missione Boss accumulerai danni contro un mostro, oppure avrai la possibilità di trovare oggetti se stai affrontando una Missione di Raccolta. Tutti i progressi in sospeso vengono applicati il giorno successivo.\n\nQuando avrai causato abbastanza danni o raccolto tutti gli oggetti, la Missione sarà completata e riceverai le tue ricompense!", + "faqQuestion44": "Come posso cancellare le attività di una sfida?", + "webFaqAnswer44": "Dovrai abbandonare la Sfida o attendere che la Sfida venga chiusa per cancellare le attività associate. L'icona di un megafono rosso significa the la Sfida è stata chiusa mentre un megafono grigio significa che la Sfida è ancora in corso.\n\nPer cancellare attività di una Sfida dall'app **Android**:\n1. Tocca l'attività appartenente alla Sfida.\n2. Tocca su \"Cancella\" nell'angolo in alto a destra dello schermo.\n3. Scegli i rimuovere le attività della Sfida dalla tua lista delle attività.\n\nPer cancellare attività di una sfida dall'app **iOS**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, tocca sull'attività e seleziona \"Cancella\" dal fondo.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.\n\nPer cancellare attività di una sfida dalla **pagina web**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, cliccala e poi scegli di rimuovere le attività dalla tua lista delle attività.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.", + "faqQuestion45": "Il mio Avatar si è trasformato in un pupazzo di neve, in una stella marina, un fiore o un fantasma. Come faccio a tornare come prima?", + "webFaqAnswer45": "Uno dei membri della tua Squadra ha usato un oggetto di trasformazione del Negozio Stagionale su di te! Il tuo Avatar tornerà normale il giorno dopo. Se vuoi rimuovere la trasformazione prima, puoi acquistare un antidoto (Sale, Sabbia, Rimuovi-petali, o Pozione Opaca) dalle Ricompense.", + "faqQuestion46": "Come posso segnalare un bug?", + "webFaqAnswer46": "Se pensi di aver riscontrato un bug, per favore informaci!\n\nPer segnalare un bug nell'app mobile:\n*Dal menù, seleziona Aiuto & FAQ, poi seleziona \"Aiuto\" e scorri fino a \"Segnala un Bug\"\n\nPer segnalare un bug da sito web:\n*Dal menù Aiuto seleziona \"Segnala un Bug\"", + "faqQuestion47": "Posso vedere i dati su come stanno andando le mie attività e abitudini?" } diff --git a/website/common/locales/it/gear.json b/website/common/locales/it/gear.json index 4f3b10e170..a02c0ecaf0 100644 --- a/website/common/locales/it/gear.json +++ b/website/common/locales/it/gear.json @@ -2901,5 +2901,9 @@ "armorSpecialWinter2024WarriorNotes": "Alla fin fine il cioccolato, la menta e la glassa sono materiali più resistenti di quanto si pensi. Aumenta la Costituzione di <%= con %>. Equipaggiamento in edizione limitata, Inverno 2023-2024.", "armorSpecialWinter2024HealerText": "Armatura Ghiacciata", "armorSpecialWinter2024RogueText": "Vesti del Gufo delle Nevi", - "armorSpecialWinter2024WarriorText": "Armatura di Peppermint Bark" + "armorSpecialWinter2024WarriorText": "Armatura di Peppermint Bark", + "weaponSpecialWinter2025WarriorText": "Ascia dell'Alce Guerriero", + "weaponSpecialWinter2025WarriorNotes": "Una possente ascia per un possente alce! Sarai inarrestabile! Aumenta la Forza di <%= str %>.Edizione Limitata Equipaggiamento Inverno 2024-2025.", + "weaponSpecialWinter2025RogueText": "Esplosione di Fiocchi di Neve", + "weaponSpecialWinter2025HealerText": "Bacchetta Stellare" } diff --git a/website/common/locales/ko/faq.json b/website/common/locales/ko/faq.json index 8509dc81a6..bb532b9d37 100755 --- a/website/common/locales/ko/faq.json +++ b/website/common/locales/ko/faq.json @@ -6,17 +6,66 @@ "parties": "파티들", "commonQuestions": "일반 퀘스트", "faqQuestion25": "다양한 과제 유형은 뭐에요?", - "faqQuestion27": "과제의 색깔이 변경되는 이유는 뭐에요?", - "webFaqAnswer25": "Habitica는 사용자의 필요에 맞춰 습관, 일일 과제, 할 일까지 총 세 가지 과제 유형을 제공합니다.\n\n습관은 좋은 습관이나 나쁜 습관을 고를 수 있으며, 하루에 여러 번 또는 불규칙한 일정으로 추적하고 싶은 항목을 나타냅니다. 좋은 습관은 골드와 경험치(Exp)와 같은 보상을 제공하지만, 나쁜 습관은 체력(HP)을 잃게 만듭니다.\n\n일일 과제는 더 구조화된 일정에 따라 완료하고 싶은 반복 과제입니다. 예를 들어, 하루에 한 번, 일주일에 세 번, 또는 한 달에 네 번 수행하는 식입니다. 일일 과제를 놓치면 HP를 잃지만, 과제의 난이도가 어려울수록 보상이 더 커집니다!\n\n할 일은 완료 후 보상을 제공하는 일회성 작업입니다. 할 일에는 마감일이 있을 수 있지만, 놓쳐도 HP를 잃지는 않습니다.\n\n달성하려는 목표에 가장 잘 맞는 과제 유형을 선택하세요!", - "faqQuestion26": "과제에는 어떤 예시가 있나요?", - "webFaqAnswer26": "긍정적인 습관(장려하고 싶은 행동, + 버튼이 있어야 함)\n\n * 비타민 섭취\n * 치실 사용\n * 1시간동안 공부하기\n\n부정적인 습관(제한하거나 피하고 싶은 행동, - 버튼이 있어야 함)\n\n * 흡연\n * 부정적인 뉴스 시청\n * 손톱 뜯기\n\n이중적인 습관(긍정적인 옵션과 부정적인 옵션을 포함하는 습관, +와 - 버튼이 모두 있어야 함)\n\n * 물 마시기 vs 탄산음료 마시기\n * 공부하기 vs 미루기\n\n샘플 일일(정기적인 일정에 따라 반복하려는 작업)\n * 설거지\n * 물주기\n * 운동 30분\n\n할 일(한 번만 수행하면 되는 작업)\n\n * 일정\n * 옷장 정리\n * 에세이 마무리", + "faqQuestion27": "과제의 색상이 변경되는 이유는 뭔가요?", + "webFaqAnswer25": "Habitica는 사용자의 필요에 맞춰 습관, 일일 과제, 할 일까지 총 세 가지 과제 유형을 제공합니다.\n\n습관은 좋은 습관 또는 나쁜 습관을 고를 수 있으며, 하루에 여러 번 또는 불규칙한 일정으로 추적하고 싶은 항목을 나타냅니다. 좋은 습관은 골드와 경험치(Exp)와 같은 보상을 제공하지만, 나쁜 습관은 체력(HP)을 잃게 만듭니다.\n\n일일 과제는 더 구조화된 일정에 따라 완료하고 싶은 반복 과제입니다. 예를 들어, 하루에 한 번, 일주일에 세 번, 또는 한 달에 네 번 수행하는 식입니다. 일일 과제를 놓치면 HP를 잃지만, 과제의 난이도가 어려울수록 보상이 더 커집니다!\n\n할 일은 완료 후 보상을 제공하는 일회성 작업입니다. 할 일에는 마감일이 있을 수 있지만, 놓쳐도 HP를 잃지는 않습니다.\n\n달성하려는 목표에 가장 잘 맞는 과제 유형을 선택하세요!", + "faqQuestion26": "과제는 예시로 어떤 것이 있나요?", + "webFaqAnswer26": "긍정적인 습관(장려하고 싶은 행동, + 버튼이 있어야 함)\n\n * 비타민 섭취\n * 치실 사용\n * 1시간 동안 공부하기\n\n부정적인 습관(제한하거나 피하고 싶은 행동, - 버튼이 있어야 함)\n\n * 흡연\n * 부정적인 뉴스 시청\n * 손톱 뜯기\n\n이중 습관(긍정적인 옵션과 부정적인 옵션을 포함하는 습관, +와 - 버튼이 모두 있어야 함)\n\n * 물 마시기 vs 탄산음료 마시기\n * 공부하기 vs 미루기\n\n일일 과제 예시(정기적으로 반복하고 싶은 과제)\n * 설거지\n * 식물에 물 주기\n * 운동 30분\n\n할 일 예시(한 번만 수행하면 되는 과제)\n\n * 일정\n * 옷장 정리\n * 에세이 마무리", "faqQuestion29": "HP는 어떻게 회복하나요?", - "webFaqAnswer27": "작업의 색상은 작업의 가치를 시각적으로 표현한 것입니다. 모든 작업은 노란색으로 시작하여 기본, 파란색은 좋음, 빨간색은 나쁨으로 표시됩니다. 각 작업 유형에 따라 작업의 가치가 결정되는 방식은 다음과 같습니다:\n\n더하기 또는 빼기 버튼을 누르는 것에 따라 습관이 파란색 또는 빨간색으로 바뀝니다. 긍정적인 습관과 부정적인 습관은 완료하지 않으면 시간이 지남에 따라 노란색으로 변합니다. 이중습관은 입력에 따라 색상만 바뀝니다.\n\n매일 완료한 빈도에 따라 색이 바뀌며, 완료하면 파란색으로, 누락하면 빨간색으로 바뀝니다.\n\n할 일은 미완성 상태가 오래 지속될수록 점차 빨간색으로 바뀝니다.\n\n빨간색이 많을수록 과제를 완료하면 더 많은 골드와 경험치를 획득할 수 있으니 아무리 어려운 과제라도 도전해 보세요!", - "faqQuestion28": "휴식이 필요한 경우 과제를 멈출 수 있나요?", - "webFaqAnswer28": "네! “피해 일시 정지” 버튼은 설정에서 찾을 수 있습니다. 이 버튼을 사용하면 과제를 놓쳐 HP를 잃는 것을 방지할 수 있습니다. 휴가 중이거나 휴식이 필요한 경우, 또는 다른 이유로 휴식이 필요할 때 유용합니다. 퀘스트에 참여 중인 경우, 자신이 진행 중인 퀘스트는 일시정지되지만 파티원이 놓친 과제로 인한 피해는 그대로 받습니다.\n\n특정 일일과제를 일시 중지하려면 다시 시작할 준비가 될 때까지 0일마다 완료로 일정을 수정할 수 있습니다.", - "webFaqAnswer29": "보상 항목에서 25 골드로 체력 회복 포션을 구입해 15 HP를 회복할 수 있습니다. 또, 레벨을 올리면 전체 HP를 항상 회복할 수 있습니다!", - "faqQuestion30": "HP가 다 떨어지면 어떻게 되나요?", - "webFaqAnswer30": "HP가 0이 되면, 1레벨과 모든 골드 그리고 상점에서 구매할 수 있는 장비 하나를 잃게 됩니다.", - "faqQuestion31": "나쁜 과제가 아닌 과제와 상호작용할 때 HP가 손실되는 이유는 무엇인가요?", - "webFaqAnswer31": "작업을 완료했는데 HP를 잃는다면 서버가 다른 플랫폼에서의 내용을 동기화하는 동안 지연이 발생한 것입니다. 예를 들어 모바일 앱에서 골드, 마나를 사용하거나 HP를 잃은 후 웹사이트에서 작업을 완료하는 경우, 서버는 모든 것이 동기화되었는지 확인하는 것뿐입니다." + "webFaqAnswer27": "과제의 색상은 과제의 가치를 시각적으로 나타냅니다. 모든 과제는 중립을 의미하는 노란색으로 시작되며, 파란색은 좋음, 빨간색은 나쁨을 의미합니다. 각 과제 유형이 과제의 가치를 결정하는 방식은 다음과 같습니다:\n\n습관은 더하기 또는 빼기 버튼을 누르는 것에 따라 파란색 또는 빨간색으로 변합니다. 좋은 습관 또는 나쁜 습관은 완료하지 않으면 시간이 지남에 따라 노란색으로 되돌아갑니다. 이중 습관은 당신의 입력에 따라 색상만 변합니다.\n\n일일 과제는 완료 빈도에 따라 색이 변하며, 완료할수록 파란색으로, 실패할수록 빨간색으로 변합니다.\n\n할 일은 미완성 상태가 길어질수록 점차 빨간색으로 변합니다.\n\n과제가 빨간색일수록 완료 시 획득하는 골드와 경험치가 더 많아지니, 아무리 어려운 과제라도 도전해 보세요!", + "faqQuestion28": "휴식이 필요한 경우 일일 과제를 멈출 수 있나요?", + "webFaqAnswer28": "네! “피해 일시 정지” 버튼은 설정에서 찾을 수 있습니다. 이 버튼을 사용하면 일일 과제를 놓쳐 HP를 잃는 것을 방지할 수 있습니다. 휴가 중이거나 휴식이 필요한 경우, 또는 다른 이유로 게임을 중단해야 할 때 유용합니다. 퀘스트에 참여 중이라면 자신의 진행 상황은 일시 중단되지만, 파티원이 놓친 일일 과제로 인한 피해는 그대로 받습니다.\n\n특정 일일 과제를 일시 중지하려면 일정을 수정하여 0일마다 반복되도록 설정하고, 준비가 되면 다시 시작할 수 있습니다.", + "webFaqAnswer29": "보상 항목에서 25 골드로 체력 물약을 구입해 15 HP를 회복할 수 있습니다. 또한, 레벨을 올릴 때마다 HP가 완전히 회복됩니다!", + "faqQuestion30": "HP가 전부 손실되면 어떻게 되나요?", + "webFaqAnswer30": "HP가 0이 되면 레벨이 한 단계 떨어지고, 모든 골드 그리고 재구매할 수 있는 장비 하나를 잃게 됩니다.", + "faqQuestion31": "나쁘지 않은 과제와 상호작용할 때 HP가 손실되는 이유는 무엇인가요?", + "webFaqAnswer31": "과제를 완료한 후 HP가 감소해야 하지 않는 상황에서 감소했다면, 서버가 다른 플랫폼에서 내용을 동기화하는 동안 지연이 발생한 것입니다. 예를 들어, 모바일 앱에서 골드, 마나를 사용하거나 HP를 잃은 후 웹사이트에서 과제를 완료한다면, 모든 데이터가 동기화되었는지 서버가 확인하는 것입니다.", + "faqQuestion32": "직업을 어떻게 선택하나요?", + "webFaqAnswer32": "모든 플레이어는 전사로 시작합니다. 레벨 10에 도달했을 때, 새로운 직업을 선택하거나 전사로 계속해서 플레이할 수 있는 선택권이 주어집니다.\n\n각 직업은 서로 다른 장비와 스킬을 가지고 있습니다. 직업을 선택하지 않으려면 “닫기”를 선택할 수 있습니다. 닫기를 선택해도 나중에 설정 메뉴에서 직업 시스템을 활성화할 수 있습니다.\n\n레벨 10 이후에 직업을 변경하려면 환생의 오브를 사용해야 합니다. 환생의 오브는 레벨 50에 도달하면 상점에서 6개의 보석으로 구매할 수 있으며, 레벨 100에 도달하면 무료로 획득할 수 있습니다.", + "faqQuestion33": "레벨 10 이후에 나타나는 파란색 바는 무엇인가요?", + "webFaqAnswer33": "직업 시스템을 해금하면 마나를 소모해 사용할 수 있는 스킬도 해금됩니다. 마나는 지력 스탯에 따라 결정되며, 스킬과 장비로 조정할 수 있습니다.", + "faqQuestion34": "펫이 좋아하는 먹이는 뭔가요?", + "webFaqAnswer34": "펫은 자신의 색상과 맞는 음식을 좋아합니다. 기본 펫은 예외이지만, 모든 기본 펫은 같은 아이템을 좋아합니다. 각 펫이 좋아하는 먹이는 아래에서 다음과 같습니다:\n \n* 기본 펫은 고기를 좋아합니다.\n * 하얀색 펫은 우유를 좋아합니다.\n * 사막 펫은 감자를 좋아합니다.\n * 빨간색 펫은 딸기를 좋아합니다.\n * 그늘 펫은 초콜릿을 좋아합니다.\n * 해골 펫은 생선을 좋아합니다.\n * 좀비 펫은 썩은 고기를 좋아합니다.\n * 분홍 솜사탕 펫은 분홍 솜사탕을 좋아합니다.\n * 파란 솜사탕 펫은 파란 솜사탕을 좋아합니다.\n * 황금빛 펫은 꿀을 좋아합니다.", + "faqQuestion35": "펫에게 먹이를 주었더니 사라졌어요! 왜 이런 건가요?", + "webFaqAnswer35": "펫을 탑승펫으로 성장시킬 만큼 충분히 먹이를 주면, 그 유형의 펫을 다시 부화시켜 펫 보관소에 추가해야 합니다.\n\n모바일 앱에서 탑승펫을 확인하는 방법:\n\n* 메뉴에서 “펫과 탑승펫”을 선택하고 탈것 탭으로 전환하기\n\n웹사이트에서 탑승펫을 확인하는 방법:\n\n* 인벤토리 메뉴에서 “펫과 탑승펫”을 선택하고 아래로 스크롤하여 탑승펫 섹션으로 이동하기", + "faqQuestion36": "아바타의 외형은 어떻게 변경하나요?", + "webFaqAnswer36": "Habitica 아바타의 외형을 꾸밀 수 있는 방법은 무궁무진합니다! 메뉴에서 “아바타 꾸미기”를 선택하여 아바타의 체형, 헤어 스타일 및 색상, 피부색을 변경하거나 안경이나 이동 보조기구를 추가할 수 있습니다.\n\n모바일 앱에서 아바타를 꾸미려면:\n * 메뉴에서 “아바타 꾸미기”를 선택합니다.\n\n웹사이트에서 아바타를 꾸미려면:\n * 탐색의 사용자 메뉴에서 “아바타 꾸미기”를 선택합니다.", + "faqQuestion37": "내 장비가 아바타에 보이지 않는 이유는 무엇인가요?", + "webFaqAnswer37": "의상 옵션이 켜져 있는지 확인하세요. 아바타가 의상을 착용하고 있으면 전투 장비 대신 해당 장비 세트가 표시됩니다.\n\n모바일 앱에서 의상 옵션을 키려면:\n * 메뉴에서 “장비”를 선택하여 의상 토글을 찾습니다.\n\n웹사이트에서 의상 옵션을 키려면:\n * 인벤토리에서 “장비”를 선택하고 장비 서랍의 의상 탭에서 의상 토글을 찾습니다.", + "faqQuestion38": "특정 아이템을 구매할 수 없는 이유는 무엇인가요?", + "webFaqAnswer38": "신규 Habitica 플레이어는 기본 전사 직업 장비만 구매할 수 있습니다. 다음 장비를 잠금 해제하려면 장비를 순차적으로 구매해야 합니다.\n\n많은 장비가 직업 전용이므로 플레이어는 현재 직업에 속하는 장비만 구매할 수 있습니다.", + "faqQuestion39": "어디에서 장비를 더 구할 수 있나요?", + "webFaqAnswer39": "더 많은 장비를 얻고 싶으시다면, Habitica 구독자가 되거나, 마법의 장비상자를 열어보거나, Habitica의 그랜드 행사에 참여하여 과시할 수 있습니다.\n\nHabitica 구독자는 매월 특별한 한정판 장비 세트를 받고, 시간 여행자 상점에서 과거의 장비 세트를 구매할 수 있는 신비한 모래시계를 받습니다.\n\n보상에서 마법의 장비상자 보물 상자를 열면 350개 이상의 장비를 얻을 수 있습니다! 100 골드로 특별한 장비, 펫을 탈것으로 키울 수 있는 먹이, 레벨을 올릴 수 있는 경험치를 받을 수 있는 기회가 주어집니다!\n\n네 번의 시즌 그랜드 행사 기간 동안에는 새로운 직업 장비를 골드로 구매할 수 있으며, 이전 행사 세트는 보석으로 구매할 수 있습니다.", + "faqQuestion40": "보석은 뭐고, 또 어떻게 얻을 수 있나요?", + "webFaqAnswer40": "보석은 Habitica의 인앱 유료 화폐로, 장비, 아바타 커스터마이징, 배경 등을 구매할 때 사용됩니다! 보석은 번들로 구매하거나 Habitica 구독자라면 골드로 구매할 수 있습니다. 도전에서 우승하면 보석을 획득할 수도 있습니다.", + "faqQuestion41": "신비한 모래시계란 무엇이며, 어떻게 구할 수 있나요?", + "webFaqAnswer41": "신비한 모래시계는 시간 여행자 상점에서 사용할 수 있는 Habitica의 구독자 전용 화폐입니다. 구독자는 구독 혜택을 받는 매월 초에 신비한 모래시계와 다양한 특전을 받을 수 있습니다. 시간 여행자 상점에서 제공하는 특별한 배경, 펫, 퀘스트, 장비에 관심이 있으시다면 구독 옵션을 꼭 확인해 보세요!", + "faqQuestion42": "책임감을 높이려면 어떻게 해야 하나요?", + "webFaqAnswer42": "자신에게 동기를 부여하고 과제를 달성하기 위해 스스로 책임을 지는 가장 좋은 방법 중 하나는 파티에 가입하는 것입니다! 다른 Habitica 플레이어들과 파티를 하면 퀘스트를 수행하여 펫과 장비를 받고, 파티원의 스킬로 버프를 받고, 동기를 높일 수 있습니다.\n\n책임감을 높이는 또 다른 방법은 도전에 참가하는 것입니다. 도전은 특정 목표와 관련된 과제를 목록에 자동으로 추가합니다! 또한 다른 Habitica 플레이어와의 경쟁 요소가 추가되어 보석을 받기 위해 노력하면서 동기 부여를 높일 수 있습니다. Habitica 팀이 만든 공식 도전과 다른 플레이어가 만든 도전이 있습니다.", + "faqQuestion43": "퀘스트는 어떻게 시작하나요?", + "webFaqAnswer43": "퀘스트를 시작하려면 파티의 멤버가 되어야 합니다. 파티는 혼자서 퀘스트에 도전하는 솔로 모험이 될 수도 있고, 다른 Habitica 플레이어를 초대하여 더 빠르게 퀘스트를 진행할 수도 있습니다!\n\n파티에서 “퀘스트 시작” 버튼을 선택해 인벤토리에서 퀘스트 두루마리를 선택합니다. 평소처럼 과제를 완료하면 퀘스트 진행도가 오릅니다! 보스 퀘스트를 수행 중이라면 몬스터에게 피해를 입히거나, 수집 퀘스트를 수행 중이라면 아이템을 획득할 수 있는 기회를 얻게 됩니다. 모든 진행도는 다음 날 적용됩니다.\n\n피해량을 충분히 입히거나 모든 아이템을 수집하면 퀘스트가 완료되며 보상을 받게 됩니다!", + "faqQuestion44": "도전 과제는 어떻게 삭제하나요?", + "webFaqAnswer44": "도전에서 탈퇴하거나 도전이 종료되어야만 해당 도전과 관련된 과제를 삭제할 수 있습니다. 빨간색 확성기 아이콘은 도전이 종료되었음을 의미하며, 회색 확성기는 도전이 아직 실행 중임을 의미합니다.\n\n**Android** 앱에서 도전 과제를 삭제하는 방법:\n 1. 도전에 속한 과제를 탭합니다.\n 2. 화면 우측 상단의 '삭제'를 탭합니다.\n 3. 과제 목록에서 도전 과제를 삭제할지 선택합니다.\n\n**iOS** 앱에서 도전 과제를 삭제하는 방법:\n 1. 삭제하려는 도전 과제를 찾아 확성기 아이콘을 확인합니다.\n 2. 확성기 아이콘이 빨간색인 경우, 해당 과제를 탭하고 하단의 '삭제'를 선택합니다.\n 3. 확성기 아이콘이 회색인 경우, 해당 도전을 탈퇴해야 과제를 삭제할 수 있습니다.\n\n**웹사이트**에서 도전 과제를 삭제하는 방법:\n 1. 삭제하려는 도전 과제를 찾아 확성기 아이콘을 확인합니다.\n 2. 확성기 아이콘이 빨간색인 경우, 아이콘을 클릭한 후 과제 목록에서 과제를 삭제할지 선택합니다.\n 3. 확성기 아이콘이 회색인 경우, 해당 도전을 탈퇴해야 과제를 삭제할 수 있습니다.", + "faqQuestion45": "제 아바타가 눈사람, 불가사리, 꽃 또는 유령으로 변했습니다. 되돌리는 방법이 뭔가요?", + "faqQuestion47": "과제와 습관을 얼마나 잘 수행하고 있는지에 대한 데이터를 볼 수 있나요?", + "webFaqAnswer45": "당신의 파티원 중 한 명이 당신에게 계절 상점 변신 아이템을 사용했습니다! 당신의 아바타는 다음 날 정상으로 되돌아갑니다. 변신을 더 빨리 해제하려면 보상에서 해독제(소금, 모래, 꽃잎 제거 물약, 또는 불투명한 물약)를 구매할 수 있습니다.", + "faqQuestion46": "오류를 신고하려면 어떻게 하나요?", + "webFaqAnswer46": "버그를 발견한 것 같다고 생각된다면, 저희에게 알려주세요!\n\n모바일 앱에서 버그를 신고하는 방법:\n * 메뉴에서 지원을 선택한 다음 \"문의하기\"를 탭하고 아래로 스크롤하여 \"버그 신고하기\"로 이동합니다.\n\n웹사이트에서 버그를 신고하는 방법:\n * 도움말 메뉴에서 “버그 신고하기”를 선택합니다.", + "webFaqAnswer47": "현재 Habitica에는 시간 경과에 따른 과제 데이터의 시각적 표현이 없습니다. 하지만 Habitica 웹사이트의 설정에 있는 사이트 데이터 탭에서 과제 데이터를 내보낼 수 있습니다.", + "faqQuestion48": "Habitica를 다른 사람과 함께 플레이할 수 있나요?", + "webFaqAnswer48": "네, 파티와 함께요! 직접 파티를 만들거나 기존 파티에 가입할 수 있습니다. 다른 Habitica 플레이어들과 파티를 맺으면 퀘스트를 수행하고, 파티원의 스킬로 버프를 받고, 추가적인 책임을 통해 동기를 부여할 수 있습니다.", + "faqQuestion49": "파티에 속해있지 않을 때, 파티를 찾는 방법이 뭔가요?", + "webFaqAnswer49": "다른 이들과 함께 Habitica를 경험하고 싶지만 다른 플레이어를 모르신다면, 파티를 찾는 것이 가장 좋은 선택입니다! 이미 파티에 속한 다른 플레이어를 알고 있다면, 그들에게 '@아이디'를 알려주면 초대받을 수 있습니다. 또는, 새로운 파티를 만들고 그들의 '@아이디'나 이메일 주소로 초대할 수도 있습니다.\n\n파티를 만들거나 검색하려면, 탐색 메뉴에서 “파티”를 선택한 다음, 원하는 옵션을 선택하세요.", + "faqQuestion50": "파티 검색 기능은 어떻게 사용하나요?", + "webFaqAnswer50": "“파티 찾기”를 선택하면 파티에 가입하려는 플레이어 목록에 추가됩니다. 파티장은 이 목록을 확인하고 초대장을 보낼 수 있습니다. 초대장을 받으면 알림에서 초대를 수락하여 원하는 파티에 가입할 수 있습니다!\n\n초대장은 여러 개의 파티에서 받을 수 있으나 한 번에 하나의 파티에만 가입이 가능합니다.", + "faqQuestion51": "목록에 추가된 후 언제까지 파티를 찾을 수 있나요?", + "webFaqAnswer51": "당신은 파티 초대를 수락하거나 7일 동안 로그인하지 않을 때까지 목록에 남아 있습니다. 두 조건 중 먼저 발생하는 경우 목록에서 제외됩니다. 7일 동안 활동이 없었다면 그 후 로그인했을 때, 대기 중인 초대가 없는 한 자동으로 목록에 다시 추가됩니다.", + "faqQuestion52": "파티 찾기를 중단할 수 있나요?", + "webFaqAnswer52": "더 이상 파티를 찾고 싶지 않다면 언제든지 중단할 수 있습니다.\n\n모바일 앱에서 파티 찾기를 중단하는 방법:\n * 메뉴에서 “파티”를 선택하고 화면 하단의 “탈퇴”를 탭합니다.\n\nHabitica 웹사이트에서 파티 찾기를 중단하는 방법:\n * 탐색 메뉴에서 “파티”를 선택하고 팝업에서 “탈퇴”를 클릭합니다.", + "faqQuestion53": "파티가 있는데, 더 많은 멤버를 찾으려면 어떻게 해야 하나요?", + "webFaqAnswer53": "Habitica 웹사이트를 사용하는 경우, 파티에서 “멤버 찾기”를 선택하세요. Android 앱을 사용하는 경우, 파티원 목록 상단의 “멤버 찾기”를 탭하세요. 그러면 파티를 적극적으로 찾고 있으며 초대할 수 있는 플레이어 목록이 표시됩니다.\n\n파티에 적합한 플레이어를 찾기 위해 언어, 직업, 레벨, Habitica 사용 일수 등의 정보를 확인할 수 있습니다. 초대를 보내기 전에 상대방과 대화를 나누고 싶다면, 상대방의 프로필을 보고 메시지를 보낼 수 있습니다.", + "faqQuestion54": "파티에 몇 명을 초대할 수 있나요?", + "webFaqAnswer54": "파티의 최대 멤버 수는 30명, 최소 멤버 수는 1명입니다. 대기 중인 초대는 멤버 수에 포함됩니다. 예를 들어, 29명의 멤버와 1명의 대기 중인 초대는 30명의 멤버로 계산됩니다. 대기 중인 초대를 삭제하려면 초대를 받은 플레이어가 수락 또는 거절하거나 파티장이 초대를 취소해야 합니다.", + "faqQuestion55": "제가 아는 사람을 초대할 수 있나요?", + "webFaqAnswer55": "네! 이미 Habitica 플레이어의 아이디나 이메일 주소가 있다면 파티에 초대할 수 있습니다. 플랫폼별로 초대를 보내는 방법은 다음과 같습니다:\n\n모바일 앱에서 누군가를 초대하는 방법:\n 1. 메뉴에서 “파티”를 선택하고 아래로 스크롤하여 멤버 섹션으로 이동합니다.\n 2. “멤버 찾기”를 탭한 다음 “초대 방법” 탭으로 전환합니다.\n 3. 초대하려는 플레이어의 사용자 이름 또는 이메일 주소를 입력하고 “초대하기”를 클릭합니다.\n\n웹사이트에서 누군가를 초대하는 방법:\n 1. 파티로 이동해 “파티에 초대”를 클릭합니다.\n 2. 초대하려는 플레이어의 사용자 이름 또는 이메일 주소를 입력하고 “초대하기”를 클릭합니다.", + "faqQuestion56": "대기 중인 파티 초대를 취소하려면 어떻게 해야 하나요?" } diff --git a/website/common/locales/ko/npc.json b/website/common/locales/ko/npc.json index 79c5feb3da..a15fda0c65 100755 --- a/website/common/locales/ko/npc.json +++ b/website/common/locales/ko/npc.json @@ -14,14 +14,14 @@ "next": "Next", "randomize": "Randomize", "mattBoch": "매트 보크", - "mattBochText1": "동물훈련소에 오신 것을 환영합니다! 저는 맷이구요, 비스트 마스터입니다. 레벨 3을 시작할 때, 당신은 펫을 부화하는데 쓰이는 알과 포션을 발견할 겁니다. 시장에서 펫을 부화시켰다면, 여기 나타날겁니다. 펫 이미지를 클릭하여 당신의 아바타에 넣으세요. 레벨 3 이후 발견하게 되는 음식을 펫들에게 먹이세요. 그러면 펫은 강인한 탑승펫으로 자랄겁니다.", + "mattBochText1": "펫 보관소에 오신 것을 환영합니다! 저는 맷이구요, 비스트 마스터입니다. 과제를 완료할 때마다 당신은 펫을 부화하는데 쓰이는 알과 포션을 발견할 겁니다. 펫을 부화시킨다면, 여기에 나타납니다! 펫 이미지를 클릭하여 당신의 아바타에 넣으세요. 발견한 먹이를 펫에게 먹인다면 펫은 강인한 탑승펫으로 자랄겁니다.", "welcomeToTavern": "Welcome to The Tavern!", "sleepDescription": "휴식이 필요하신가요? 다니엘의 여관에 들러 Habitica를 잠시 멈춰보세요:", "sleepBullet1": "내가 놓친 일일 과제로 인해 데미지 피해를 입지 않습니다.(다른 파티원은 놓친 일일 과제로 인해 여전히 보스에게 데미지 피해를 입습니다)", "sleepBullet2": "작업의 연속 실행 횟수는 초기화되지 않습니다", "sleepBullet3": "퀘스트 보스에게 입힌 데미지 피해나 발견한 수집품은 여관을 체크 아웃할 때까지 보류된 상태로 유지됩니다.", - "pauseDailies": "Pause Damage", - "unpauseDailies": "Unpause Damage", + "pauseDailies": "피해 일시 정지", + "unpauseDailies": "피해 일시 정지 해제", "staffAndModerators": "Staff and Moderators", "communityGuidelinesIntro": "Habitica는 모든 연령과 배경을 가진 사용자들에게 환영받는 환경을 조성하기 위해 노력합니다. 특히 그룹과 파티와 같은 공간에서 그러합니다. 질문이 있으시다면, 저희의 커뮤니티 가이드라인을 참조해 주세요.", "acceptCommunityGuidelines": "I agree to follow the Community Guidelines", @@ -77,31 +77,31 @@ "USD": "(USD)", "newStuff": "New Stuff by Bailey", "newBaileyUpdate": "New Bailey Update!", - "tellMeLater": "Tell Me Later", - "dismissAlert": "알림 취소", + "tellMeLater": "나중에 알려줘", + "dismissAlert": "알림 해제", "donateText3": "Habitica는 오픈 소스 프로젝트로서 유저의 지원에 의존하고 있습니다. 여러분이 보석을 구매해 주신 돈은 서버 운영, 소규모 직원 유지, 새로운 기능 개발, 자원 봉사 프로그래머에게 인센티브를 제공하는 데 사용됩니다. 여러분의 관대함에 감사드립니다!", "card": "신용카드 (Stripe를 사용하여)", "paymentMethods": "를(을) 사용하여 구매", - "paymentSuccessful": "Your payment was successful!", - "paymentYouReceived": "You received:", - "paymentYouSentGems": "You sent <%- name %>:", - "paymentYouSentSubscription": "<%- name %>
님에게 <%= months %>달치 Habitica 구독 플랜을 보냈습니다.", - "paymentSubBilling": "Your subscription will be billed $<%= amount %> every <%= months %> months.", + "paymentSuccessful": "결제가 성공적으로 완료되었습니다!", + "paymentYouReceived": "수신했습니다:", + "paymentYouSentGems": "<%- name %>에게 보냈습니다:", + "paymentYouSentSubscription": "<%- name %>
님에게 <%= months %>개월의 Habitica 구독 플랜을 보냈습니다.", + "paymentSubBilling": "구독료는 <%= months %>개월마다 $<%= amount %> 청구됩니다.", "success": "Success!", - "classGear": "계급 장비", - "classGearText": "Congratulations on choosing a class! I've added your new basic weapon to your inventory. Take a look below to equip it!", - "autoAllocate": "스텟 자동배분", + "classGear": "직업 장비", + "classGearText": "직업을 선택하신 것을 축하합니다! 새로운 기본 무기가 인벤토리에 추가되었습니다. 아래에서 확인하고 장착해 보세요!", + "autoAllocate": "스탯 자동배분", "spells": "Skills", "skillsTitle": "<%= classStr %>스킬", "toDo": "할 일", "tourStatsPage": "여기는 능력치 페이지 입니다! 나열된 과제들을 완료하여 업적을 달성하세요.", - "tourTavernPage": "Welcome to the Tavern, an all-ages chat room! You can keep your Dailies from hurting you in case of illness or travel by clicking \"Pause Damage\". Come say hi!", - "tourPartyPage": "새로운 파티에 어서 오세요! 유저 이름, 메일 또는 파티를 찾는 유저 목록에서 다른 유저를를 파티에 초대하여 한정판 바시리스트 퀘스트 두루마기를 획득할 수 있습니다.

파티에 대한 자세한 내용은 [도움말]의 FAQ에서 확인할 수 있습니다.", + "tourTavernPage": "모든 연령대가 대화할 수 있는 장소, 선술집에 오신 것을 환영합니다! 질병을 앓거나 여행 중일 때 “피해 일시 정지”를 클릭하여 데미지를 입지 않도록 할 수 있습니다. 와서 인사해보세요!", + "tourPartyPage": "새로운 파티에 어서 오세요! 유저 이름, 메일 또는 파티를 찾는 유저 목록에서 다른 유저를 파티에 초대하여 한정판 바시리스트 퀘스트 두루마기를 획득할 수 있습니다.

파티에 대한 자세한 내용은 [도움말]의 FAQ에서 확인할 수 있습니다.", "tourChallengesPage": "도전은 유저들이 만드는 테마가 있는 할 일 목록입니다! 도전에 참여하는 것은 이 할일들을 당신의 계정에 추가합니다. 젬을 받기 위해서 다른 유저들과 경쟁하세요!", "tourMarketPage": "과제를 완료할 때마다 알, 부화 물약 또는 애완동물 먹이를 무작위로 받을 수 있는 기회가 주어집니다. 이 아이템들은 여기에서 구매할 수도 있습니다.", "tourHallPage": "Habitica의 오픈소스 공헌자들이 추앙받는, 영웅의 홀에 오신 것을 환영합니다. 코드, 아트, 음악, 저술, 심지어는 조언만으로, 그들은 젬과, 전용 장비와, 명망 있는 타이틀을 얻었습니다. 당신도 Habitica에 공헌할 수 있습니다!", - "tourPetsPage": "여기는 동물훈련소입니다! 레벨 3이 되고나면, 과제를 완료함에 따라 펫의 알과 부화의 묘약을 모을 수 있게 됩니다. 시장에서 펫을 부화시키면, 이 곳에 나타납니다! 당신의 아바타에 펫을 추가하려면 펫의 그림을 클릭하세요. 레벨 3 이후 얻게 되는 음식들을 펫에게 먹이세요. 그러면 펫은 강인한 탑승펫으로 자랄겁니다.", - "tourMountsPage": "펫을 충분히 먹여 탑승펫이 되면 여기에 나타납니다. 안장을 놓을 탑승펫을 클릭하세요.", + "tourPetsPage": "펫 보관소에 오신 걸 환영합니다! 당신이 과제를 완료할 때마다 펫을 부화시킬 수 있는 알 또는 부화 물약을 무작위로 받을 수 있습니다. 펫을 부화시키면, 이곳에 나타납니다! 펫의 이미지를 클릭하여 당신의 아바타에 추가하세요. 발견한 펫 먹이를 펫에게 먹인다면 튼튼한 탈 것으로 성장할 것입니다.", + "tourMountsPage": "펫에게 충분히 먹이를 준다면 탑승펫이 되어 여기에 나타납니다. 탑승펫을 클릭하여 올라타세요!", "tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click \"Enable Costume.\"", "equipmentAlreadyOwned": "이미 보유하고 있는 장비입니다", "tourOkay": "네!", @@ -125,11 +125,12 @@ "notAvailable": "이 아이템은 사용할 수 없습니다.", "helpSupportHabitica": "Habitica 지원 도움말", "groupsPaymentSubBilling": "다음 청구 날짜는 <%= renewalDate %>입니다.", - "paymentSubBillingWithMethod": "당신의 구독 플랜은, <%= months %>월마다<%= paymentMethod %>으로 $<%= amount %> 청구됩니다.", + "paymentSubBillingWithMethod": "구독료는
$<%= amount %>.00 USD이며 <%= months %>개월마다 <%= paymentMethod %>를 통해 청구됩니다.", "groupsPaymentAutoRenew": "이 구독은 취소하지 않는 한 자동 갱신됩니다. 취소해야 하는 경우 그룹 청구 메뉴에서 취소할 수 있습니다.", "limitedAvailabilityHours": "구매 가능 기간이 <%= hours %>시간<%= minutes %>분 남았습니다", "invalidUnlockSet": "이 아이템 세트는 사용 불가능하며. 잠금을 해제할 수 없습니다.", "limitedAvailabilityDays": "구매 가능 기간이 <%= days %>일<%= hours %><%= hours %>시간<%= minutes %>분 남았습니다", "paymentAutoRenew": "이 구독은 취소하지 않는 한 자동 갱신됩니다. 이 구독을 취소해야 하는 경우 설정에서 취소할 수 있습니다.", - "paymentCanceledDisputes": "취소 승인 메일을 보내드렸습니다. 만약 해당 메일을 찾을 수 없는 경우, 향후 청구에 대한 분쟁을 방지하기 위해 저희에게 연락을 주시기 바랍니다." + "paymentCanceledDisputes": "취소 승인 메일을 보내드렸습니다. 만약 해당 메일을 찾을 수 없는 경우, 향후 청구에 대한 분쟁을 방지하기 위해 저희에게 연락을 주시기 바랍니다.", + "paymentYouSentSubscriptionG1G1": "<%- name %>
에게 <%= months %> 개월의 Habitica 구독 플랜을 보냈으며, 1+1 프로모션에 따라 이 계정에도 동일한 구독 플랜이 적용되었습니다!" } diff --git a/website/common/locales/ko/pets.json b/website/common/locales/ko/pets.json index 0a69dd528d..32a6ce4416 100644 --- a/website/common/locales/ko/pets.json +++ b/website/common/locales/ko/pets.json @@ -55,7 +55,7 @@ "raisedPet": "<%= pet %>가 성장했습니다!", "feedPet": "<%= name %>에게 <%= text %>를 먹이겠습니까?", "petNotOwned": "이 펫을 가지고 있지 않습니다.", - "hatchedPetHowToUse": "새로운 펫을 먹이고 장착하기 위해 [마구간](<%= stableUrl %>)을 방문하십시오!", + "hatchedPetHowToUse": "새로운 펫을 먹이고 장착하기 위해 [펫과 탑승펫](<%= stableUrl %>)을 방문하십시오!", "hatchedPet": "새로운 <%= potion %> <%= egg %>를 부화시켰습니다!", "premiumPotionNoDropExplanation": "마법 부화 포션은 퀘스트로 얻은 알에는 쓸 수 없습니다. 마법 부화 포션은 랜덤 보상으로 얻어지지 않으며, 아래의 상점에서 구입하는 것이 유일한 방법입니다.", "dropsExplanationEggs": "일반 알 보상을 기다리거나 퀘스트 알을 얻기 위해 퀘스트를 반복하고 싶지 않다면 보석을 써서 알을 더 빠르게 얻으십시오. 보상 시스템에 대해 참고해 보십시오. ", @@ -68,8 +68,8 @@ "beastMasterName": "비스트 마스터", "beastAchievement": "모든 펫을 획득하여 \"비스트 마스터\" 업적을 획득했습니다!", "beastMasterProgress": "비스트 마스터 진행", - "welcomeStableText": "마구간에 오신 것을 환영합니다! 저는 비스트 마스터 매트에요. 과제를 완료할 때마다 당신은 알이나 부화 물약을 랜덤으로 받게 될 겁니다. 그리고 부화된 펫은 이곳, 마구간에 나타나죠! 펫을 클릭해서 아바타에 장착시켜보세요. 발견한 먹이를 펫에게 먹여 강한 탑승펫으로 성장시킬 수도 있습니다.", - "welcomeStable": "마구간에 오신 것을 환영합니다!", + "welcomeStableText": "펫 보관소에 오신 것을 환영합니다! 저는 비스트 마스터 매트에요. 과제를 완료할 때마다 당신은 알이나 부화 물약을 랜덤으로 받게 될 겁니다. 그리고 부화된 펫은 이곳, 펫 보관소에 나타나죠! 펫을 클릭해서 아바타에 장착시켜보세요. 발견한 먹이를 펫에게 먹여 강한 탑승펫으로 성장시킬 수도 있습니다.", + "welcomeStable": "펫과 탑승펫이 있는 곳에 환영합니다!", "mountsReleased": "탑승펫을 방생했습니다", "mountsAndPetsReleased": "탑승펫과 펫을 방생했습니다", "petsReleased": "펫을 풀어줬습니다.", diff --git a/website/common/locales/nl/contrib.json b/website/common/locales/nl/contrib.json index 0b1f300703..361ecfbefd 100644 --- a/website/common/locales/nl/contrib.json +++ b/website/common/locales/nl/contrib.json @@ -16,13 +16,13 @@ "legendary": "Legendarisch", "moderator": "Beheerder", "guardian": "Bewaker", - "staff": "Medewerkers", + "staff": "Habitica Medewerkers", "heroic": "Heroïsch", "modalContribAchievement": "Bijdragersprestatie!", "contribModal": "<%= name %>, jij geweldig persoon! Je bent nu een bijdrager van rang <%= level %> omdat je Habitica geholpen hebt.", "contribLink": "Zie welke prijzen je hebt verdiend voor je bijdrage!", "contribName": "Bijdrager", - "contribText": "Heeft bijgedragen aan Habitica, zijnde via code, kunst, muziek, schrijfwerk, of andere methodes. Om meer te leren, sluit je aan bij de gilde van Ambitieuze Legendes!", + "contribText": "Heeft bijgedragen aan Habitica, zijnde via code, kunst, muziek, schrijfwerk, of andere methodes.", "kickstartName": "Kickstarter-Backer - $<%= key %> rang", "kickstartText": "Heeft het Kickstarterproject gesteund", "helped": "Heeft Habitica helpen groeien", @@ -40,7 +40,7 @@ "backerTier": "Backers-Rang", "playerTiers": "Spelersrangen", "tier": "Rang", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Heeft Habitica geholpen om te groeien door een enquête in te vullen of door mee te helpen met een grote speltest. Bedankt!", "surveysMultiple": "Heeft Habitica helpen groeien op <%= count %> momenten, door een enquête in te vullen of door mee te helpen met een grote test. Bedankt!", "blurbHallPatrons": "Dit is de Hal der Weldoeners. Hier eren we de nobele adventuriers die Habitica hebben gesteund in de Kickstarter. We bedanken ze omdat ze Habitica tot leven hebben gebracht!", diff --git a/website/common/locales/nl/faq.json b/website/common/locales/nl/faq.json index d48cb2d091..976fb723e9 100644 --- a/website/common/locales/nl/faq.json +++ b/website/common/locales/nl/faq.json @@ -67,5 +67,11 @@ "faqQuestion31": "Waarom verloor ik HP toen ik met een niet-negatieve taak bezig was?", "webFaqAnswer31": "Als je een taak voltooit en HP verliest terwijl dat niet de bedoeling was, is er een vertraging opgetreden terwijl de server wijzigingen op andere platforms synchroniseert. Als je bijvoorbeeld goud of Mana gebruikt of HP verliest in de mobiele app en vervolgens een taak op de website voltooit, bevestigt de server gewoon dat alles gesynchroniseerd is.", "faqQuestion32": "Hoe kan ik een klasse kiezen?", - "faqQuestion33": "Wat is de blauwe balk die verschijnt na niveau 10?" + "faqQuestion33": "Wat is de blauwe balk die verschijnt na niveau 10?", + "webFaqAnswer32": "Alle spelers beginnen als de klasse Krijger totdat ze niveau 10 bereiken. Zodra je niveau 10 hebt bereikt, krijg je de keuze om een nieuwe klasse te kiezen of verder te gaan als Krijger.\n\nElke klasse heeft andere Uitrusting en Vaardigheden. Als je geen klasse wilt kiezen, kun je \"Afmelden\" selecteren. Als je je afmeldt, kun je het klassensysteem later altijd weer inschakelen via Instellingen.\n\nAls je na niveau 10 van klasse wilt veranderen, kun je dat doen met de Bol van Wedergeboorte. De Bol van Wedergeboorte wordt beschikbaar in de Markt voor 6 edelstenen op niveau 50, of gratis op niveau 100.\n\nAls alternatief kun je op elk moment van klasse wisselen via Instellingen voor 3 edelstenen. Dit zal je niveau niet resetten zoals de Bol van Wedergeboorte dat doet, maar het stelt je wel in staat om de vaardigheidspunten die je hebt verzameld opnieuw toe te wijzen zodat ze bij je nieuwe klasse passen.", + "webFaqAnswer33": "Nadat je het Klassensysteem hebt ontgrendeld, krijg je ook toegang tot Vaardigheden die Mana vereisen om te gebruiken. Mana wordt bepaald door je INT-statistiek en kan worden aangepast door Vaardigheden en Uitrusting.", + "faqQuestion34": "Welke soort Voedsel vindt mijn Huisdier lekker?", + "webFaqAnswer34": "Huisdieren houden van Voedsel dat bij hun kleur past. Basis-Huisdieren zijn de uitzondering, maar alle Basis-Huisdieren houden van hetzelfde item. Hieronder zie je welk voedsel elk Huisdier lekker vindt:\n\n* Basis-Huisdieren houden van Vlees\n* Witte Huisdieren houden van Melk\n* Woestijn-Huisdieren houden van Aardappelen\n* Rode Huisdieren houden van Aardbeien\n* Schaduw-Huisdieren houden van Chocolade\n* Skelet-Huisdieren houden van Vis\n* Zombie-Huisdieren houden van Bedorven Vlees\n* Suikerspin Roze Huisdieren houden van Roze Suikerspin\n* Suikerspin Blauwe Huisdieren houden van Blauwe Suikerspin\n* Gouden Huisdieren houden van Honing", + "faqQuestion35": "Ik heb mijn Huisdier gevoerd en het is verdwenen! Wat is er gebeurd?", + "webFaqAnswer35": "Zodra je je Huisdier genoeg hebt gevoerd om het in een Rijdier te veranderen, moet je dat type Huisdier opnieuw uitbroeden om het weer in je stal te hebben.\n\nOm Rijdieren te bekijken in de mobiele apps:\n\n* Open het Menu, selecteer “Huisdieren & Rijdieren” en schakel naar het tabblad Rijdieren\n\nOm Rijdieren te bekijken op de website:\n\n* Ga naar het menu Inventaris, selecteer “Huisdieren en Rijdieren” en scroll naar beneden naar de sectie Rijdieren" } diff --git a/website/common/locales/pl/challenge.json b/website/common/locales/pl/challenge.json index 0f6c9ba789..429439861c 100644 --- a/website/common/locales/pl/challenge.json +++ b/website/common/locales/pl/challenge.json @@ -91,10 +91,18 @@ "viewProgressOf": "Zobacz postęp", "viewProgress": "Widok Postępu", "selectMember": "Wybierz Członka", - "confirmKeepChallengeTasks": "Czy chcesz zachować zadania z wyzwania?", + "confirmKeepChallengeTasks": "Czy chcesz zachować zadania z Wyzwania?", "selectParticipant": "Wybierz Uczestnika", "yourReward": "Twoja Nagroda", "filters": "Filtry", "wonChallengeDesc": "<%= challengeName %> wybrał cię jako zwycięzca! Twoja wygrana została zapisana w Osiągnięciach.", - "removeTasks": "Usuń Zadania" + "removeTasks": "Usuń Zadania", + "messageChallengeFlagOfficial": "Oficjalne Wyzwania nie mogą zostać zgłoszone.", + "flaggedAndHidden": "Wyzwanie oznaczone i ukryte", + "resetFlagCount": "Zresetuj Licznik Oznaczeń", + "whyReportingChallenge": "Dlaczego zgłaszasz to Wyzwanie?", + "whyReportingChallengePlaceholder": "Powód zgłoszenia", + "messageChallengeFlagAlreadyReported": "To Wyzwanie zostało już przez Ciebie zgłoszone.", + "flaggedNotHidden": "Wyzwanie oznaczone raz, nieukryte", + "cannotClose": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownicy wkrótce skontaktują się z Tobą, aby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc." } diff --git a/website/common/locales/pl/faq.json b/website/common/locales/pl/faq.json index 6f5ecb5a65..17c5b8a0ef 100644 --- a/website/common/locales/pl/faq.json +++ b/website/common/locales/pl/faq.json @@ -67,7 +67,9 @@ "webFaqAnswer31": "Jeśli ukończyłeś zadanie i utraciłeś PZ, mimo że nie powinieneś, znaczy to, że napotkałeś opóźnienie w synchronizacji zmian na serwerze wykonanych na innych platformach. Dla przykładu: jeśli zużyjesz Złoto, Manę albo stracisz PZ w aplikacji mobilnej, a następnie ukończysz zadanie na stronie internetowej, to serwer musi to wszystko zsynchronizować.", "faqQuestion32": "Jak mogę wybrać klasę postaci?", "faqQuestion34": "Jaki rodzaj jedzenia lubi mój Chowaniec?", - "webFaqAnswer33": "Po odblokowaniu Systemu Klasowego, możesz odblokować też Umiejętności, których użycie wymaga Many. Poziom Many powiązany jest z twoją statystyką INT i może być zmieniany przez Umiejętności oraz Wyposażenie", - "webFaqAnswer32": "Każdy gracz zaczyna jako klasa Wojownika i pozostaje w niej do osiągnięcia 10 poziomu. W momencie osiągnięcia poziomu 10 zostaniesz postawiony przed wyborem między zmianą klasy na nową a kontynuowaniem ścieżki Wojownika.\n\nKażda klasa ma unikalne Wyposażenie oraz Umiejętności. Jeśli nie chcesz podejmować wyboru od razu, możesz wybrać opcję \"Zrezygnuj\" . Jeśli nie zdecydujesz się od razu, możesz włączyć system klasowy w dowolnym momencie później z poziomu Ustawień.\n\nJeśli chciałbyś zmienić wybraną przez siebie klasę po poziomie 10, możesz zrobić to używając Kuli Odrodzenia. Kula Odrodzenia jest dostępna w Sklepie za 6 Klejnotów od poziomu 50 lub za darmo od poziomu 100.\n\nInnym sposobem jest zmiana klasy w dowolnym momencie z poziomu Ustawień za 3 Klejnoty. To nie zresetuje twojego poziomu jak Kula Odrodzenia, ale pozwoli ci na ponowne rozdanie punktów umiejętności, które zebrałeś nabijając kolejne poziomy, tak by dopasować je do twojej nowej klasy", - "faqQuestion33": "Czym jest niebieski pasek, który pojawia się po osiągnięciu poziomu 10?" + "webFaqAnswer33": "Po odblokowaniu Systemu Klasowego, możesz odblokować też Umiejętności, których użycie wymaga Many. Poziom Many powiązany jest z twoją statystyką INT i może być zmieniany przez Umiejętności oraz Wyposażenie.", + "webFaqAnswer32": "Każdy gracz zaczyna jako klasa Wojownika i pozostaje w niej do osiągnięcia 10 poziomu. W momencie osiągnięcia poziomu 10 zostaniesz postawiony przed wyborem między zmianą klasy na nową a kontynuowaniem ścieżki Wojownika.\n\nKażda klasa ma unikalne Wyposażenie oraz Umiejętności. Jeśli nie chcesz podejmować wyboru, możesz wybrać opcję \"Zrezygnuj\", aby nie decydować o tym od razu. Jeśli nie zdecydujesz się od razu, możesz włączyć system klasowy w dowolnym momencie później z poziomu Ustawień.\n\nJeśli chciałbyś zmienić wybraną przez siebie klasę po poziomie 10, możesz zrobić to używając Kuli Odrodzenia. Kula Odrodzenia jest dostępna w Sklepie za 6 Klejnotów od poziomu 50 lub za darmo od poziomu 100.\n\nInnym sposobem jest zmiana klasy w dowolnym momencie z poziomu Ustawień za 3 Klejnoty. To nie zresetuje twojego poziomu jak Kula Odrodzenia, ale pozwoli ci na ponowne rozdanie punktów umiejętności, które zebrałeś nabijając kolejne poziomy, tak by dopasować je do twojej nowej klasy.", + "faqQuestion33": "Czym jest niebieski pasek, który pojawia się po osiągnięciu poziomu 10?", + "faqQuestion35": "Nakarmiłem mojego zwierzaka i zniknął! Co się stało?", + "faqQuestion36": "Jak mogę zmienić wygląd mojej Postaci?" } diff --git a/website/common/locales/pl/front.json b/website/common/locales/pl/front.json index e56cdca967..18448d3e94 100644 --- a/website/common/locales/pl/front.json +++ b/website/common/locales/pl/front.json @@ -32,7 +32,7 @@ "marketing1Lead2": "Poprawiaj swoje nawyki, aby stworzyć swojego awatara. Pochwal się wspaniałym wyposażenie, jakie zdobyłeś!", "marketing1Lead3Title": "Znajdź losowe nagrody", "marketing1Lead3": "Dla niektórych to hazard, czyli nagrody stochastyczne, jest systemem ich motywującym. Habitica godzi wszystkie wzmocnienia i kary: pozytywne, negatywne, przewidywalne i losowe.", - "marketing2Header": "Konkuruj z przyjaciółmi.", + "marketing2Header": "Konkuruj z przyjaciółmi", "marketing2Lead1Title": "Produktywność Społeczna", "marketing2Lead1": "Choć w Habitica można grać w pojedynkę, prawdziwa zabawa zaczyna się kiedy starasz się współpracować i rywalizować z innymi graczami, którzy rozliczają cię z wykonanych zadań. Najefektywniejszą częścią każdego programu samodoskonalenia jest społeczna odpowiedzialność, a cóż może być lepszym miejscem dla odpowiedzialności i rywalizacji niż gra komputerowa?", "marketing2Lead2Title": "Walcz z potworami", @@ -64,7 +64,7 @@ "pkQuestion2": "Jak działa Habitica?", "pkAnswer2": "Wytworzenie nowego nawyku jest trudne ponieważ ludzie potrzebują tej oczywistej, natychmiastowej nagrody. Na przykład jest ciężko zacząć nitkować zęby, bo nawet jak nasz dentysta nam mówi, że w dłuższej perspektywie jest to zdrowsze to na początku rani to nasze dziąsła.
Grywalizacja Habitiki dodaje to odczucie natychmiastowej satysfakcji do codziennych czynności poprzez wynagrodzenie ciężkich zadań doświadczeniem, złotem... i może nawet losową nagroda jak smocze jajo! To pomaga ludziom utrzymać motywację nawet jeśli zadanie samo w sobie nie ma nieodłącznej nagrody i dzięki temu widzieliśmy jak ich życie się zmienia na lepsze.", "pkQuestion3": "Czemu dodaliście funkcje społeczne?", - "pkAnswer3": "Społeczna presja jest ogromnym czynnikiem motywacyjnym dla dużej liczby osób, więc wiedzieliśmy, że chcemy mieć silną społeczność, która będzie pilnowała odpowiedzialności innych za swoje cele, a także zachęcała do osiągania sukcesów. Szczęśliwie jedną z rzeczy, której gry wieloosobowe dobrze sprzyjają jest budowanie poczucia społeczności wśród ich uczestników! Habitica zapożyczyła strukturę społeczeństwa z tych typów gier. Możesz stworzyć mała Drużynę bliskich przyjaciół, ale możesz też dołączyć do większych, dzielących wspólne interesy grup znanych jako Gildie. Chociaż niektórzy wolą grać solo to większość decyduje się by uformować sieć wsparcia, która zachęca do społecznej odpowiedzialności poprzez takie funkcje jak na przykład Misje, gdzie członkowie Drużyny wspólnie dzielą się swoją produktywnością by razem zwalczać potwory.", + "pkAnswer3": "Społeczna presja jest ogromnym czynnikiem motywacyjnym dla dużej liczby osób, więc wiedzieliśmy, że chcemy mieć silną społeczność, która będzie pilnowała odpowiedzialności innych za swoje cele, a także zachęcała do osiągania sukcesów. Szczęśliwie jedną z rzeczy, której gry wieloosobowe dobrze sprzyjają jest budowanie poczucia społeczności wśród ich uczestników! Habitica zapożyczyła strukturę społeczeństwa z tych typów gier. Chociaż niektórzy wolą grać solo to większość decyduje się by uformować sieć wsparcia w niewielkiej Drużynie bliskich przyjaciół, która zachęca do społecznej odpowiedzialności poprzez takie funkcje jak na przykład Misje, gdzie członkowie Drużyny wspólnie dzielą się swoją produktywnością by razem zwalczać potwory.", "pkQuestion4": "Czemu omijanie zadań zmniejsza zdrowie Twojego awatara?", "pkAnswer4": "Jeśli opuścisz jeden z Twoich Codziennych to Twój awatar straci życie następnego dnia. To służy jako ważny czynnik motywujący by zachęcić ludzi do podążania za ich celami, bo ludzie naprawdę nienawidzą ranić swój mały awatar. Plus odpowiedzialność społeczna jest krytycznie ważna dla mnóstwa ludzi. Jeśli walczysz z potworami razem ze Swoimi przyjaciółmi to omijanie zadań rani także ich awatary.", "pkQuestion5": "Co odróżnia Habitike od innych programów grywializujących?", diff --git a/website/common/locales/pl/gear.json b/website/common/locales/pl/gear.json index a7bd01f12c..7e71d95d16 100644 --- a/website/common/locales/pl/gear.json +++ b/website/common/locales/pl/gear.json @@ -5,7 +5,7 @@ "groupBy": "Pogrupuj według <%= type %>", "classBonus": "(Ten przedmiot pasuje do Twojej klasy, więc otrzymuje dodatkowy mnożnik 1.5 do statystyk)", "classArmor": "Zbroja Klasowa", - "featuredset": "Opisany Zestaw <%= name %>", + "featuredset": "Opisany Zestaw: <%= name %>", "mysterySets": "Tajemnicze zestawy", "gearNotOwned": "Nie posiadasz tego przedmiotu.", "noGearItemsOfType": "Nie posiadasz żadnego z nich.", @@ -1770,5 +1770,7 @@ "eyewearArmoireRoseColoredGlassesText": "Różowe Okulary", "eyewearArmoireTragedyMaskText": "Tragiczna Maska", "eyewearArmoireComedyMaskText": "Komediowa Maska", - "eyewearArmoireJewelersEyeLoupeText": "Lupa Jubilerska" + "eyewearArmoireJewelersEyeLoupeText": "Lupa Jubilerska", + "moreArmoireGearAvailable": "Do tego czasu, zostało do znalezienia <%= armoireCount %> części wyposażenia w Zaczarowanej Skrzyni!", + "gearItemsCompleted": "Jesteś w posiadaniu całego ekwipunku klasy <%= class %>! Nowy ekwipunek jest wydawany podczas Gal sezonowych." } diff --git a/website/common/locales/pl/overview.json b/website/common/locales/pl/overview.json index 6a93eb32fd..4b6388c393 100644 --- a/website/common/locales/pl/overview.json +++ b/website/common/locales/pl/overview.json @@ -5,5 +5,6 @@ "step2": "Krok 2: Zdobądź punkty za robienie rzeczy w prawdziwym życiu", "webStep2Text": "Teraz możesz zacząć wykonywać swoje zadania! Gdy zrobisz jakieś i zaznaczysz to w Habitica, zyskasz [doświadczenie](https://habitica.fandom.com/wiki/Experience_Points), które pomoże ci zwiększyć poziom oraz [złoto](https://habitica.fandom.com/pl/wiki/Punkty_z%C5%82ota), za które możesz kupować Nagrody. Jeśli będziesz utrzymywać złe nawyki lub nie zrobisz któregoś z Codziennych, będziesz tracić [punkty życia](https://habitica.fandom.com/wiki/Health_Points). W ten sposób punkty doświadczenia i zdrowia staną się wyznacznikiem twoich postępów. W miarę jak twoja postać będzie się rozwijać, zauważysz też polepszenie twojego życia.", "step3": "Krok 3: Dostosuj i eksploruj Habitica", - "webStep3Text": "Po zapoznaniu się z podstawami, możesz uzyskać jeszcze więcej od Habitica wykorzystując poniższe, ciekawe funkcjonalności:\n * Organizuj swoje Zadania wykorzystując [tagi](https://habitica.fandom.com/wiki/Tags) (tagi można dodawać podczas edycji Zadania).\n * Dostosuj swój [Awatar](https://habitica.fandom.com/wiki/Avatar) klikając ikonę użytkownika w prawym, górnym rogu.\n * Dokupuj [Uzbrojenie](https://habitica.fandom.com/wiki/Equipment) w sekcji nagród lub bezpośrednio ze [sklepików](<%= shopUrl %>), i zakładaj je poprzez [Ekwipunek> Wyposażenie](<%= equipUrl %>).\n * Spotkaj się z innymi użytkownikami w [Tawernie](https://habitica.fandom.com/wiki/Tavern).\n * Wykluwaj [Chowańców](https://habitica.fandom.com/wiki/Pets) zbierając [Jajka](https://habitica.fandom.com/wiki/Eggs) i [Eliksiry Wyklucia](https://habitica.fandom.com/wiki/Hatching_Potions). [Karm](https://habitica.fandom.com/wiki/Food) je, aby wyrosły na [Wierzchowce](https://habitica.fandom.com/wiki/Mounts).\n * Na poziomie 10: Wybierz odpowiednią [Klasę Postaci](https://habitica.fandom.com/wiki/Class_System), a następnie używaj specyficznych dla klasy [Umiejętności](https://habitica.fandom.com/wiki/Skills) (umiejętności nabędziesz na poziomach od 11 do 14).\n * Utwórz Drużynę z przyjaciółmi (klikając [Drużyna](<%= partyUrl %>) w pasku nawigacyjnym) aby nabrać odpowiedzialności i zdobyć zwój misji.\n * Pokonuj potwory i zdobywaj przedmioty w [Misjach](https://habitica.fandom.com/wiki/Quests) (na poziomie 15 otrzymasz misję)." + "webStep3Text": "Po zapoznaniu się z podstawami, możesz uzyskać jeszcze więcej od Habitica wykorzystując poniższe, ciekawe funkcjonalności:\n * Organizuj swoje Zadania wykorzystując [tagi](https://habitica.fandom.com/wiki/Tags) (tagi można dodawać podczas edycji Zadania).\n * Dostosuj swój [Awatar](https://habitica.fandom.com/wiki/Avatar) klikając ikonę użytkownika w prawym, górnym rogu.\n * Dokupuj [Uzbrojenie](https://habitica.fandom.com/wiki/Equipment) w sekcji nagród lub bezpośrednio ze [sklepików](<%= shopUrl %>), i zakładaj je poprzez [Ekwipunek> Wyposażenie](<%= equipUrl %>).\n * Spotkaj się z innymi użytkownikami w [Tawernie](https://habitica.fandom.com/wiki/Tavern).\n * Wykluwaj [Chowańców](https://habitica.fandom.com/wiki/Pets) zbierając [Jajka](https://habitica.fandom.com/wiki/Eggs) i [Eliksiry Wyklucia](https://habitica.fandom.com/wiki/Hatching_Potions). [Karm](https://habitica.fandom.com/wiki/Food) je, aby wyrosły na [Wierzchowce](https://habitica.fandom.com/wiki/Mounts).\n * Na poziomie 10: Wybierz odpowiednią [Klasę Postaci](https://habitica.fandom.com/wiki/Class_System), a następnie używaj specyficznych dla klasy [Umiejętności](https://habitica.fandom.com/wiki/Skills) (umiejętności nabędziesz na poziomach od 11 do 14).\n * Utwórz Drużynę z przyjaciółmi (klikając [Drużyna](<%= partyUrl %>) w pasku nawigacyjnym) aby nabrać odpowiedzialności i zdobyć zwój misji.\n * Pokonuj potwory i zdobywaj przedmioty w [Misjach](https://habitica.fandom.com/wiki/Quests) (na poziomie 15 otrzymasz misję).", + "overviewQuestionsRevised": "Masz pytania? Sprawdź FAQ! Jeżeli nie ma tam czego szukasz, możesz zadać pytanie za pomocą tej formy: " } diff --git a/website/common/locales/pl/questscontent.json b/website/common/locales/pl/questscontent.json index 243179708d..46d622df81 100644 --- a/website/common/locales/pl/questscontent.json +++ b/website/common/locales/pl/questscontent.json @@ -4,7 +4,7 @@ "questEvilSantaCompletion": "Kłusujący Mikołaj miota się w gniewie i ucieka w noc. Wdzięczna niedźwiedzica, poprzez jęk i skowyt, próbuje ci coś przekazać. Zabierasz ją do domu, do stajni, gdzie Matt Boch Mistrz Bestii słucha jej opowieści z okrzykiem przerażenia. Ona ma niedźwiadka! Malec uciekł w śniegi, gdy mama niedźwiedzica została schwytana.", "questEvilSantaBoss": "Święty Mikołaj-Myśliwy", "questEvilSantaDropBearCubPolarMount": "Niedźwiedź polarny (wierzchowiec)", - "questEvilSanta2Text": "Znajdź niedźwiadka", + "questEvilSanta2Text": "Znajdź Niedźwiadka", "questEvilSanta2Notes": "Gdy Kłusujący Mikołaj schwytał polarną niedźwiedzicę, jej synek uciekł na pola lodowe. Z pomiędzy krystalicznych dźwięków lasu wyłapujesz trzask złamanej gałązki. Spoglądasz w tę stronę. Tropy! Tropy niedźwiadka! Zaczynasz wyścigi tym szlakiem. Znajdź wszystkie ślady - tropy i złamane gałązki - i uratuj niedźwiadka!

Wskazówka: “Znajdź niedźwiadka” nagradza kolejnym osiągnięciem misji ale daje rzadkie zwierzątko, które może być tylko raz dodane do stajni.", "questEvilSanta2Completion": "Znajdujesz niedźwiadka! Będzie twym towarzyszem do końca życia.", "questEvilSanta2CollectTracks": "Ślady", diff --git a/website/common/locales/pt_BR/content.json b/website/common/locales/pt_BR/content.json index 04bfac72b4..8e72796983 100644 --- a/website/common/locales/pt_BR/content.json +++ b/website/common/locales/pt_BR/content.json @@ -183,7 +183,7 @@ "questEggVelociraptorMountText": "Velociraptor", "questEggVelociraptorAdjective": "um inteligente", "eggNotes": "Ache uma poção de eclosão e use-a neste ovo e ele chocará como <%= eggAdjective(locale) %> <%= eggText(locale) %>.", - "hatchingPotionBase": " ", + "hatchingPotionBase": "​", "hatchingPotionWhite": "das Neves", "hatchingPotionDesert": "do Deserto", "hatchingPotionRed": "Escarlate", @@ -211,7 +211,7 @@ "hatchingPotionGlow": "que Brilha-no-Escuro", "hatchingPotionFrost": "da Geada", "hatchingPotionIcySnow": "do Gelo de Nevasca", - "hatchingPotionNotes": "Use-a em um ovo e ele chocará como um mascote <%= potText(locale) %>.", + "hatchingPotionNotes": "Use-a em um ovo e ele chocará como um Mascote <%= potText(locale) %>.", "foodMeat": "Carne", "foodMeatThe": "a Carne", "foodMeatA": "Carne", @@ -373,7 +373,7 @@ "hatchingPotionVirtualPet": "do Reino dos Bichinhos Virtuais", "hatchingPotionPorcelain": "de Porcelana", "hatchingPotionPinkMarble": "de Mármore Rosa", - "hatchingPotionTeaShop": "da Loja de Chá", + "hatchingPotionTeaShop": "do Reino da Loja de Chá", "hatchingPotionRoseGold": "de Ouro Rosa", "hatchingPotionFungi": "do Reino dos Fungos", "questEggRaccoonAdjective": "um ganancioso", @@ -396,13 +396,14 @@ "questEggCatAdjective": "um travesso", "questEggCatMountText": "Gato", "questEggOtterText": "Lontra", - "hatchingPotionCryptid": "do Reino da Criptozoologia", + "hatchingPotionCryptid": "do Reino dos Criptídeos", "hatchingPotionBalloon": "Balão", "hatchingPotionKoi": "Carpa", "hatchingPotionOpal": "de Opala", "questEggPlatypusMountText": "Ornitorrinco", - "questEggPlatypusAdjective": "um exigente", + "questEggPlatypusAdjective": "um perfeccionista", "hatchingPotionJade": "de Jade", "questEggOtterMountText": "Lontra", - "questEggOtterAdjective": "uma pérfida" + "questEggOtterAdjective": "uma pérfida", + "questEggPlatypusText": "Ornitorrinco" } diff --git a/website/common/locales/pt_BR/groups.json b/website/common/locales/pt_BR/groups.json index bfeb258fa6..2cfdc3fd6c 100644 --- a/website/common/locales/pt_BR/groups.json +++ b/website/common/locales/pt_BR/groups.json @@ -410,7 +410,7 @@ "invitedToYourParty": "Convidado para seu Grupo!  Clique para desfazer", "lookingForPartyTitle": "Encontre membros", "findMorePartyMembers": "Encontre mais membros", - "findPartyMembers": "Encontre membros para o Grupo", + "findPartyMembers": "Encontre Membros para o Grupo", "noOneLooking": "Não há ninguém procurando por um Grupo agora.
Você pode conferir mais tarde!", "sendTotal": "Total:", "tavernDiscontinued": "A Taverna e as Guildas foram descontinuadas", diff --git a/website/common/locales/pt_BR/questscontent.json b/website/common/locales/pt_BR/questscontent.json index 129d6c6b4d..ada4ff6c3c 100644 --- a/website/common/locales/pt_BR/questscontent.json +++ b/website/common/locales/pt_BR/questscontent.json @@ -59,17 +59,17 @@ "questSpiderDropSpiderEgg": "Aranha (Ovo)", "questSpiderUnlockText": "Desbloqueia Ovos de Aranha para compra no Mercado", "questGroupVice": "Vício, o Dragão Sombrio", - "questVice1Text": "Vício – Parte 1: Liberte-se do Controle do Dragão", + "questVice1Text": "Vício - Parte 1: Liberte-se do Controle do Dragão", "questVice1Notes": "

Dizem que um mal horrível vive nas cavernas do Monte Habitica. Um monstro cuja presença corrompe a mente dos heróis mais fortes da terra, levando-os a maus hábitos e preguiça! A besta é um grande dragão de poder imenso e composto pelas próprias sombras: Vício, o traiçoeiro Dragão das Sombras. Bravos Habiticanos, se acreditam que podem sobreviver a este poder imenso, peguem as suas armas e derrotem esta besta imunda de uma vez por todas.

Vício, Parte 1:

Como podem pensar que podem lutar contra a besta se ela já tem controle sobre vocês? Não sejam vítimas da preguiça e do vício! Trabalhem arduamente e libertem-se da influência negra que o dragão tem sobre vocês!", "questVice1Boss": "A Sombra do Vício", "questVice1Completion": "Com a influência de Vício sob você dissipada, você sente uma onda de força que não sabia que tinha voltar para você. Parabéns! Mas um inimigo ainda mais assustador está à sua espera...", - "questVice1DropVice2Quest": "Vício – Parte 2 (Pergaminho)", - "questVice2Text": "Vício – Parte 2: Encontre o Covil do Dragão", + "questVice1DropVice2Quest": "Vício - Parte 2 (Pergaminho)", + "questVice2Text": "Vício - Parte 2: Encontre o Covil do Dragão", "questVice2Notes": "Confiantes em si mesmos e em suas habilidades de resistirem à influência de Vício, o Dragão Sombrio, seu grupo chega ao Monte Habitica. Vocês se aproximam da entrada das cavernas da montanha e param. Amontoados de sombras, quase como uma névoa, surgem da abertura. É praticamente impossível enxergar qualquer coisa à sua frente. A luz das lanternas parece acabar abruptamente onde as sombras começam. Dizem que apenas luz mágica pode atravessar a névoa infernal do dragão. Se conseguirem encontrar cristais de luz suficientes, poderão encontrar o caminho até o dragão.", "questVice2CollectLightCrystal": "Cristais de Luz", "questVice2Completion": "Assim que alcançam o último cristal, as sombras se dissipam e o caminho fica limpo. Com o coração acelerado, vocês adentram a caverna.", - "questVice2DropVice3Quest": "Vício – Parte 3 (Pergaminho)", - "questVice3Text": "Vício – Parte 3: O Despertar do Vício", + "questVice2DropVice3Quest": "Vício - Parte 3 (Pergaminho)", + "questVice3Text": "Vício - Parte 3: O Despertar do Vício", "questVice3Notes": "Depois de muito esforço, seu grupo descobriu o covil do Vício. O poderoso monstro olha o seu grupo com aversão. Conforme a escuridão o cerca, uma voz sussurra na sua cabeça, \"Mais cidadãos tolos de Habitica vieram me parar? Que fofo. Teria sido inteligente não virem.\" O titã escamoso recua sua cabeça e se prepara para atacar. Essa é sua chance! Dê tudo de si e derrote o Vício de uma vez por todas!", "questVice3Completion": "As sombras dissipam-se da caverna e um silêncio metálico surge. Não acredito, você conseguiu! Você derrotou o Vício. Você e seu grupo podem finalmente suspirar aliviados. Aproveitem sua vitória, bravos Habiticanos, mas levem consigo a lição que aprenderam ao lutar contra Vício e sigam em frente. Ainda há hábitos a serem feitos e potencialmente piores males para serem conquistados!", "questVice3Boss": "Vício, o Dragão Sombrio", @@ -77,34 +77,34 @@ "questVice3DropDragonEgg": "Dragão (Ovo)", "questVice3DropShadeHatchingPotion": "Poção de Eclosão Sombria", "questGroupMoonstone": "Ascensão da Recaída", - "questMoonstone1Text": "Recaída – Parte 1: A Corrente de Pedras da Lua", + "questMoonstone1Text": "Recaída - Parte 1: A Corrente de Pedras da Lua", "questMoonstone1Notes": "Uma doença terrível atingiu os Habiticanos. Maus Hábitos que achávamos estarem mortos a muito tempo estão voltando à vida para vingança. Louças ficam sujas, livros esquecidos e a procrastinação corre livremente!

Você segue alguns de seus velhos Maus Hábitos até os Pântanos da Estagnação e descobre o culpado: Recaída, a Necromante! Você avança para atacá-la com armas em mãos mas as armas passam direto pelo espectro dela.

\"Nem tente\", ela fala baixinho com a voz rouca. \"Sem uma corrente de pedras da lua, nada pode me machucar - e joalheiro @aurakami espalhou todas as pedras da lua por toda a Habitica a muito tempo atrás!\" Ofegante, você foge... mas você sabe o que precisa fazer.", "questMoonstone1CollectMoonstone": "Pedras da Lua", "questMoonstone1Completion": "Por fim, você coleta a última pedra da lua no meio da lama pantanosa. Chegou a hora de transformar sua coleção em uma arma capaz de finalmente derrotar Recaída!", - "questMoonstone1DropMoonstone2Quest": "Recaída – Parte 2: Recaída, a Necromante (Pergaminho)", - "questMoonstone2Text": "Recaída – Parte 2: Recaída, a Necromante", + "questMoonstone1DropMoonstone2Quest": "Recaída - Parte 2: Recaída, a Necromante (Pergaminho)", + "questMoonstone2Text": "Recaída - Parte 2: Recaída, a Necromante", "questMoonstone2Notes": "O bravo ferreiro @InspectorCaracal te ajuda a forjar uma corrente com as pedras da lua encantadas. Você, finalmente, está pronto para enfrentar Recaída, mas ao entrar no Pântano da Estagnação, você sente um arrepio terrível por todo seu corpo.

Um hálito podre sussurra no seu ouvido. \"De volta aqui? Mas que prazeroso... \" Você se vira e ataca e, sobre a luz da corrente de pedras da lua, sua arma atinge um corpo sólido. \"Você pode ter me trazido de volta ao mundo mais uma vez\", Recaída rosna, \"mas agora é sua hora de deixá-lo!\"", "questMoonstone2Boss": "A Necromante", "questMoonstone2Completion": "Recaída cambaleia para trás após você desferir o golpe final e, por um momento, seu coração se enche de esperança – mas então ela joga a cabeça para trás e solta uma risada maléfica. O que está acontecendo?", - "questMoonstone2DropMoonstone3Quest": "Recaída – Parte 3: Recaída Transformada (Pergaminho)", - "questMoonstone3Text": "Recaída – Parte 3: Recaída Transformada", + "questMoonstone2DropMoonstone3Quest": "Recaída - Parte 3: Recaída Transformada (Pergaminho)", + "questMoonstone3Text": "Recaída - Parte 3: Recaída Transformada", "questMoonstone3Notes": "Rindo pervesamente, Recaída desaba no chão e você a atinge novamente com a corrente de pedras da lua. Para seu horror, Recaída agarra as gemas, com os olhos brilhando em triunfo.

\"Sua criatura de carne idiota!\", ela grita. \"Essas pedras da lua vão recuperar a minha forma física, é verdade, mas não como você imaginou. Assim como a lua cheia cresce na escuridão, o meu poder floresce e das sombras eu invoco o espectro do teu inimigo mais temido!\"

Um nevoeiro verde ergue-se do pântano e o corpo de Recaída se contorce, transformando-se em algo que lhe enche de terror - o corpo morto-vivo do Vício, horrivelmente renascido.", "questMoonstone3Completion": "É difícil respirar e o suor arde os seus olhos enquanto o morto-vivo cai no chão. Os restos de Recaída se dissipam numa fina névoa cinzenta que desaparece rapidamente pela ação de uma brisa refrescante. Você ouve gritos distantes de combate de Habiticanos derrotando seus Maus Hábitos de uma vez por todas.

@Baconsaur, o Mestre das Bestas, desce de um grifo. \"Eu vi o fim de sua batalha do céu e fiquei comovido. Por favor, aceite esta túnica encantada - sua bravura é a de um coração nobre e eu acredito que você foi feito para recebê-la.\"", "questMoonstone3Boss": "Necro-Vício", "questMoonstone3DropRottenMeat": "Carne Estragada (Comida)", "questMoonstone3DropZombiePotion": "Poção de Eclosão Zumbi", "questGroupGoldenknight": "A Cavaleira Dourada", - "questGoldenknight1Text": "A Cavaleira Dourada – Parte 1: Uma Conversa Séria", + "questGoldenknight1Text": "A Cavaleira Dourada - Parte 1: Uma Conversa Séria", "questGoldenknight1Notes": "A Cavaleira Dourada está pegando no pé dos pobres Habiticanos. Não fez todas as suas Diárias? Marcou negativo em um Hábito? Ela vai usar isso como razão para te chatear, falando sobre como você deveria seguir o exemplo dela. Ela é o exemplo perfeito de um Habiticano e você não é nada além de uma falha. Bem, isso não é nada simpático! Todo mundo erra. Ninguém deveria ter que encarar tanto julgamento por isso. Provavelmente está na hora de você conseguir alguns depoimentos de Habiticanos ofendidos e ter uma conversa séria com a Cavaleira Dourada!", "questGoldenknight1CollectTestimony": "Testemunhos", "questGoldenknight1Completion": "Quantos testemunhos! Com certeza isso deve ser o bastante para convencer a Cavaleira Dourada. Agora tudo o que você precisa fazer é encontrá-la.", - "questGoldenknight1DropGoldenknight2Quest": "A Cavaleira Dourada – Parte 2: Cavaleira Dourada (Pergaminho)", - "questGoldenknight2Text": "A Cavaleira Dourada – Parte 2: Cavaleira de Ouro", + "questGoldenknight1DropGoldenknight2Quest": "A Cavaleira Dourada - Parte 2: Cavaleira Dourada (Pergaminho)", + "questGoldenknight2Text": "A Cavaleira Dourada - Parte 2: Cavaleira de Ouro", "questGoldenknight2Notes": "Em posse de centenas de testemunhos de habiticanos, você finalmente confronta a Cavaleira Dourada. Você começa a recitar as reclamações de habiticanos para ela, uma a uma. \"E @Pfeffernusse diz que seu enorme ego-\" A Cavaleira levanta sua mão para te silenciar e zomba, \"Por favor, essas pessoas estão somente com inveja do meu sucesso. Ao invés de reclamar, elas deveriam simplesmente se esforçar tanto quanto eu! Talvez eu deva mostrar-lhes o poder que vocês podem alcançar através de uma dedicação como a minha!\" Ela levanta sua maça e se prepara para te atacar!", "questGoldenknight2Boss": "Cavaleira Dourada", "questGoldenknight2Completion": "A Cavaleira Dourada abaixa sua maça em pavor. \"Eu peço perdão pelo meu ataque precipitado\", ela diz. \"A verdade, é que é doloroso pensar que eu estive machucando os outros sem perceber e isso me deixa sem defesa alguma... Mas talvez eu ainda possa pedir perdão?\"", - "questGoldenknight2DropGoldenknight3Quest": "A Cavaleira Dourada – Parte 3: O Cavaleiro de Ferro (Pergaminho)", - "questGoldenknight3Text": "A Cavaleira Dourada – Parte 3: O Cavaleiro de Ferro", + "questGoldenknight2DropGoldenknight3Quest": "A Cavaleira Dourada - Parte 3: O Cavaleiro de Ferro (Pergaminho)", + "questGoldenknight3Text": "A Cavaleira Dourada - Parte 3: O Cavaleiro de Ferro", "questGoldenknight3Notes": "@Jon Arinbjorn grita para conseguir sua atenção. Após a sua batalha, uma nova figura apareceu. Um cavaleiro coberto por ferro escurecido lentamente se aproxima de você com espada em mãos. A Cavaleira Dourada grita para a figura \"Pai, não!\", mas o cavaleiro não mostra sinais de que vai parar. Ela se vira para você e diz \"Me desculpe. Eu fui uma tola, com uma cabeça grande demais para ver quão cruel eu tenho sido. Mas meu pai é mais cruel do que eu jamais poderia ser. Se ele não for parado, ele destruirá a todos. Aqui, use minha maça e pare o Cavaleiro de Ferro!\"", "questGoldenknight3Completion": "Com um tinido gratificante, o Cavaleiro de Ferro cai de joelhos e desaba. \"Você é bem forte\", ele fala ofegante. \"Eu fui humilhado hoje.\" A Cavaleira Dourada se aproxima de você e diz, \"Obrigada. Eu acredito que ganhamos um pouco de humildade no nosso encontro com você. Eu conversarei com meu pai e explicarei as reclamações contra nós. Talvez nós devêssemos começar a nos desculpar com os outros habiticanos.\" Ela reflete em considerações antes de se voltar para você novamente. \"Aqui: como um presente nosso para você, eu quero que você fique com a minha maça. Ela é sua agora.\"", "questGoldenknight3Boss": "O Cavaleiro de Ferro", @@ -139,17 +139,17 @@ "questSeahorseDropSeahorseEgg": "Cavalo-Marinho (Ovo)", "questSeahorseUnlockText": "Desbloqueia Ovos de Cavalo-Marinho para compra no Mercado", "questGroupAtom": "Ataque do Mundano", - "questAtom1Text": "Ataque do Mundano – Parte 1: Desastre em Louça!", + "questAtom1Text": "Ataque do Mundano - Parte 1: Desastre em Louça!", "questAtom1Notes": "Você chegou às margens do Lago Lavado para um relaxamento merecido... Mas o lago está poluído com pratos sujos! Como isso aconteceu? Bem, você simplesmente não pode permitir que o lago continue neste estado. Há apenas uma coisa que você pode fazer: limpar os pratos e salvar o seu local de férias! Melhor encontrar algum sabão para limpar essa bagunça. Um monte de sabão...", "questAtom1CollectSoapBars": "Barras de Sabão", "questAtom1Drop": "O Monstro de Lanchinhoness (Pergaminho)", "questAtom1Completion": "Depois de esfregar exaustivamente, todas as louças estão perfeitamente empilhadas na margem do lago! Você dá um passo para trás e admira com orgulho o resultado do seu trabalho duro.", - "questAtom2Text": "Ataque do Mundano – Parte 2: O Monstro de Lanchinhoness", + "questAtom2Text": "Ataque do Mundano - Parte 2: O Monstro de Lanchinhoness", "questAtom2Notes": "Ufa, este lugar está ficando muito mais agradável com todos estes pratos limpos. Talvez você finalmente possa ter algum divertimento agora. Oh - parece haver uma caixa de pizza flutuando no lago. Bem, qual o problema de limpar mais uma coisa, não é verdade? Mas, infelizmente, não é uma mera caixa de pizza! Subitamente a caixa levanta da água para revelar-se como a cabeça de um monstro. Não pode ser! O Lendário Monstro de Lanchinhoness?! Dizem que ele existe escondido no lago desde os tempos pré-históricos: a criatura criada a partir dos restos de comida e lixo dos antigos Habiticanos. Eca!", "questAtom2Boss": "O Monstro de Lanchinhoness", "questAtom2Drop": "O Lavadeiromante (Pergaminho)", "questAtom2Completion": "Com um choro ensurdecedor, e cinco tipos de queijos deliciosos saindo de sua boca, O Monstro de Lanchinhoness cai aos pedaços. Bom trabalho, bravo aventureiro! Mas espere... Ainda tem algo estranho acontecendo nesse lago?", - "questAtom3Text": "Ataque do Mundano – Parte 3: O Lavadeiromante", + "questAtom3Text": "Ataque do Mundano - Parte 3: O Lavadeiromante", "questAtom3Notes": "Logo quando você pensou que os desafios tinham acabado, O Lago Vencido começa a agitar-se violentamente. \"COMO OUSAS!\" uma voz estrondosa emana da superfície da água. Uma figura azul usando uma túnica emerge da água, empunhando uma escova sanitária mágica. Roupas imundas começam a surgir na superfície do lago \"Eu sou o Lavadeiromante!\", ele anuncia com fúria. \"Você tem muita ousadia de lavar minha maravilhosa louça suja, destruir meu mascote e entrar no meu domínio com roupas tão limpas. Prepare-se para sentir o chorume de minha magia anti-limpeza!\"", "questAtom3Completion": "O perverso Lavadeiromante foi derrotado! Roupas limpas caem em pilhas ao seu redor. As coisas estão parecendo muito melhores por aqui. Quando você começa a avançar pela armadura recém-passada, um brilho de metal chama sua atenção, e seu olhar recai sobre um elmo reluzente. O proprietário original deste brilhante item pode ser desconhecido, mas quando você o coloca, sente a calorosa presença de um espírito generoso. Pena que eles não colocaram uma etiqueta com nome.", "questAtom3Boss": "O Lavadeiromante", @@ -229,13 +229,13 @@ "questWhaleDropWhaleEgg": "Baleia (Ovo)", "questWhaleUnlockText": "Desbloqueia Ovos de Baleia para compra no Mercado", "questGroupDilatoryDistress": "Lamento em Lentópolis", - "questDilatoryDistress1Text": "Lamento em Lentópolis – Parte 1: Mensagem na Garrafa", + "questDilatoryDistress1Text": "Lamento em Lentópolis - Parte 1: Mensagem na Garrafa", "questDilatoryDistress1Notes": "Uma mensagem em uma garrafa chegou da recente reconstruída cidade de Lentópolis! Lê-se: \"Queridos Habiticanos, precisamos da sua ajuda mais uma vez. Nossa princesa desapareceu e a cidade está sob o cerco de alguns estranhos demônios d'água! As lagostas-boxeadoras estão mantendo os invasores na baía. Por favor, nos ajude!\" Para fazer a longa viagem até a cidade submersa, é preciso ser capaz de respirar embaixo d'água. Felizmente, os alquimistas @Benga e @hazel podem fazer com que tudo isso seja possível! Vocês só tem que encontrar os ingredientes necessários.", "questDilatoryDistress1Completion": "Você veste a armadura com barbatanas e nada para Lentópolis o mais rápido possível. As pessoas-sereia e seus aliados camarões mantis conseguiram manter os monstros fora da cidade por enquanto, porém eles estão perdendo. Tão logo você adentra as muralhas do castelo, o horrível cerco ataca subitamente!", "questDilatoryDistress1CollectFireCoral": "Coral de Fogo", "questDilatoryDistress1CollectBlueFins": "Barbatanas Azuis", "questDilatoryDistress1DropArmor": "Armadura Oceânica com Barbatanas (Armadura)", - "questDilatoryDistress2Text": "Lamento em Lentópolis – Parte 2: As Feras da Fenda", + "questDilatoryDistress2Text": "Lamento em Lentópolis - Parte 2: As Feras da Fenda", "questDilatoryDistress2Notes": "O cerco pode ser visto de muito longe: milhares de crânios sem corpo que correm através de um portal nas fendas das paredes em direção à Lentópolis.

Quando você encontra o Rei Manta em sua sala de guerra, seus olhos parecem profundos e seu rosto, preocupado. \"Minha filha Adva desapareceu na Fenda Escura pouco antes deste cerco começar. Por favor, encontre-a e traga-a de volta para casa em segurança! Eu vou lhe emprestar a minha Tiara de Coral de Fogo para ajudá-lo. Se você tiver sucesso, ela é sua.\"", "questDilatoryDistress2Completion": "Você acaba com a horda assustadora de crânios, mas você não tem a menor ideia de como encontrar Adva. Você fala para @Kiwibot, a rastreadora real, para ver se ela tem alguma ideia. \"As lagostas-boxeadoras que defendem a cidade devem ter visto Adva fugir,\" diz @Kiwibot. \"Tente segui-los pela Fenda Escura.\"", "questDilatoryDistress2Boss": "Enxame da Caveiras D'água", @@ -245,7 +245,7 @@ "questDilatoryDistress2DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questDilatoryDistress2DropCottonCandyBluePotion": "Poção de Eclosão Azul Algodão-Doce", "questDilatoryDistress2DropHeadgear": "Tiara de Coral Flamejante (Cabeça)", - "questDilatoryDistress3Text": "Lamento em Lentópolis – Parte 3: Não Serei Apenas a Sereia", + "questDilatoryDistress3Text": "Lamento em Lentópolis - Parte 3: Não Serei Apenas Sereia", "questDilatoryDistress3Notes": "Você segue as lagostas-boxeadoras Fenda adentro e descobre uma fortaleza subaquática. Princesa Adva, escoltada por crânios d'água, espera por você dentro do salão principal. \"Meu pai foi quem enviou você, não foi? Diga a ele que eu me recuso a voltar. Eu estou contente em ficar aqui e praticar meus feitiços. Saia agora, ou você irá sentir a ira da nova rainha do oceano!\" Adva parece muito inflexível, mas enquanto ela fala, você nota um estranho pingente de rubi em seu pescoço, brilhando de forma ameaçadora... Talvez seus delírios acabariam se você o destruísse?", "questDilatoryDistress3Completion": "Finalmente, você consegue puxar o pingente enfeitiçado do pescoço de Adva e jogá-lo fora. Adva balança a cabeça. \"Onde estou? O que aconteceu aqui?\" Depois de ouvir sua história, ela franze a testa. \"Este colar me foi dado por uma estranha embaixadora - uma senhora chamada 'Tzina'. Eu não me lembro de nada depois disso!\"

De volta à Lentópolis, Manta está muito feliz por seu sucesso. \"Permita-me recompensá-lo com este tridente e este escudo! Eu os encomendei do @aiseant e do @starsystemic como um presente para Adva, mas... eu prefiro não dar armas para ela tão cedo.\"", "questDilatoryDistress3Boss": "Adva, a Sereia Usurpadora", @@ -369,7 +369,7 @@ "questBeetleDropBeetleEgg": "Besouro (Ovo)", "questBeetleUnlockText": "Desbloqueia Ovos de Besouro para compra no Mercado", "questGroupTaskwoodsTerror": "Medo em Matarefa", - "questTaskwoodsTerror1Text": "Medo em Matarefa – Parte 1: A Chama em Matarefa", + "questTaskwoodsTerror1Text": "Medo em Matarefa - Parte 1: A Chama em Matarefa", "questTaskwoodsTerror1Notes": "Você nunca viu a Ceifadora Alegre tão agitada. A governante dos Campos Florescentes pousa sua montaria de grifo esqueleto bem no meio da Praça Produtividade e grita sem desmontar. \"Queridos Habiticanos, nós precisamos de sua ajuda! Alguma coisa está causando incêndios em Matarefa e nós ainda não nos recuperamos completamente da batalha contra Desgaste! Se não for contido, o fogo vai queimar todos nossos pomares e arbustos frutíferos!\"

Você rapidamente se volutaria e apressa até Matarefa. Enquanto adentra a maior floresta frutífera de Habitica, de repente escuta vozes estalando e retinindo à distância, e sente um leve cheiro de fumaça. Logo um enxame de caveiras flamejantes tagarelas passa voando por você, mordendo galhos e colocando fogo nas copas das árvores!", "questTaskwoodsTerror1Completion": "Com a ajuda da Ceifadora Alegre e a renomada piromante @Beffymaroo, vocês conseguem combater o enxame. Mostrando solidariedade, @Beffymaroo te oferece seu Turbante do Piromante quando você entra mais profundamente na floresta.", "questTaskwoodsTerror1Boss": "Enxame de Caveiras de Fogo", @@ -379,14 +379,14 @@ "questTaskwoodsTerror1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questTaskwoodsTerror1DropRedPotion": "Poção de Eclosão Vermelha", "questTaskwoodsTerror1DropHeadgear": "Turbante de Piromante (Cabeça)", - "questTaskwoodsTerror2Text": "Medo em Matarefa – Parte 2: Encontrando as Fadas Florescentes", + "questTaskwoodsTerror2Text": "Medo em Matarefa - Parte 2: Encontrando as Fadas Florescentes", "questTaskwoodsTerror2Notes": "Tendo enfrentado o enxame de caveiras flamejantes, você alcança um grande grupo de fazendeiros refugiados à beira da floresta. \"Suas vilas foram queimadas pelo renegado espírito do outono\", diz uma voz familiar. É @Kiwibot, o lendário rastreador! \"Consegui reunir os sobreviventes, mas não há sinal das Fadas Florescentes que ajudaram a cultivar os frutos selvagens de Matarefa. Por favor, você tem que me ajudar a resgatá-las!\"", "questTaskwoodsTerror2Completion": "Você encontra a última dríade e a leva para longe dos monstros. Quando retorna para os fazendeiros refugiados, você é recebido pelas agradecidas fadas, que te dão uma túnica tecida de magia e seda. De repente, um ronco profundo ecoa pelas árvores, tremendo o próprio chão. \"Deve ser o espírito renegado.\" a Ceifadora Alegre diz. \"Vamos nos apressar!\"", "questTaskwoodsTerror2CollectPixies": "Fadas", "questTaskwoodsTerror2CollectBrownies": "Brownies", "questTaskwoodsTerror2CollectDryads": "Dríades", "questTaskwoodsTerror2DropArmor": "Túnica de Piromante (Armadura)", - "questTaskwoodsTerror3Text": "Medo em Matarefa – Parte 3: Jack, o Espírito da Lanterna", + "questTaskwoodsTerror3Text": "Medo em Matarefa - Parte 3: Jack, o Espírito da Lanterna", "questTaskwoodsTerror3Notes": "Preparado pra batalha, seu grupo marcha para o coração da floresta, onde o espírito renegado está tentando destruir uma macieira anciã cercada por arbustos frutíferos. Sua cabeça de abóbora emite uma luz terrível para onde quer que ela vira e em sua mão esquerda segura uma longa barra, com uma lanterna pendurada na ponta. No lugar de fogo ou chamas, no entanto, a lanterna contém um cristal escuro que te arrepia até a espinha.

A Ceifadora Alegre põe uma mão esquelética na boca. \"Esse é... Esse é Jack, o Espírito da Lanterna! Mas ele é um fantasma da colheita que ajuda e guia nossos fazendeiros. O que pode ter acontecido para levar uma alma tão doce a agir assim?\"

\"Eu não sei\", diz @bridgetteempress. \"Mas parece que essa 'doce alma' está prestes a nos atacar!\"", "questTaskwoodsTerror3Completion": "Após uma longa batalha, você consegue acertar um golpe bem mirado na lanterna que Jack carrega e o cristal dentro dela se despedaça. Num estalo, Jack volta a si e se debulha em brilhantes lágrimas. \"Ó, minha linda floresta! O que eu fiz?!\", ele lamenta. Suas lágrimas apagam as chamas restantes, a macieira e os arbustos estão salvos.

Depois de você ajudá-lo a se acalmar, ele explica, \"Encontrei essa charmosa moça chamada Tzina e ela me deu esse brilhante cristal como presente. À pedido dela, eu o coloquei na minha lanterna... mas esta é a última coisa de que me lembro.\" Ele se vira para você com um sorriso dourado. \"Talvez você deva ficar com ela e protegê-la, enquanto eu ajudo os pomares selvagens a brotarem novamente.\"", "questTaskwoodsTerror3Boss": "Jack, o Espírito da Lanterna", @@ -403,17 +403,17 @@ "questDustBunniesCompletion": "Os Coelhos da Poeira desapareceram em um sopro de... bem, poeira. Conforme a visão clareia, você olha em volta. Você havia esquecido como esse lugar é quando está limpo. Você acha uma pequena pilha de ouro onde a poeira estava. Oh, você estava se perguntando onde aquilo estava!", "questDustBunniesBoss": "Coelhos Ferais da Poeira", "questGroupMoon": "Batalha Lunar", - "questMoon1Text": "Batalha Lunar, Parte 1: Encontre os Estilhaços Misteriosos", + "questMoon1Text": "Batalha Lunar - Parte 1: Encontre os Estilhaços Misteriosos", "questMoon1Notes": "Os Habiticanos foram distraídos de suas tarefas por algo estranho: estilhaços distorcidos de pedra estão aparecendo pelo continente. Preocupada, @Starsystemic, a Vidente, te convocou para sua torre. Ela disse, \"Tenho lido presságios alarmantes sobre estes estilhaços, que têm desgraçado nossa terra e levado esforçados Habiticanos à distração. Eu posso rastrear a fonte, mas primeiro preciso examinar os estilhaços. Você pode trazer alguns para mim?\"", "questMoon1Completion": "@Starststemic desaparece em sua torre para examinar os estilhaços que você trouxe. \"Isso pode ser mais complicado que temíamos\" disse @Berrymaroo, sua confiável assistente. \"Vai levar algum tempo para descobrir a causa. Continue fazendo check-in diariamente, e quando soubermos mais, enviaremos o pergaminho da próxima missão.\"", "questMoon1CollectShards": "Estilhaços Lunares", "questMoon1DropHeadgear": "Capacete de Guerreiro Lunar (Elmo)", - "questMoon2Text": "Batalha Lunar, Parte 2: Pare o Estresse Sombrio", + "questMoon2Text": "Batalha Lunar - Parte 2: Pare o Estresse Sombrio", "questMoon2Notes": "Após estudar os estilhaços, @Starsystemic, a Vidente, tem notícias ruins. \"Um velho monstro está se aproximando de Habitica, e está causando um terrível estresse nos cidadãos. Eu posso puxar a sombra para fora do coração das pessoas e para dentro desta torre, onde ele terá uma forma física, mas você precisará derrotá-lo antes que ele se solte e se espalhe novamente.\" Você acena e ela inicia o feitiço. Sombras dançantes preenchem o cômodo, pressionando-se umas contra as outras. O vento frio sopra, a escuridão se aprofunda. O Estresse Sombrio levanta do chão, sorri como um pesadelo real... e ataca!", "questMoon2Completion": "A sombra explode em um sopro de ar escuro, deixando o cômodo mais brilhante e seu coração mais leve. O estresse que cobria Habitica é diminuído e você pode suspirar aliviado. Mas, quando você olha para o céu, sente que não acabou: o monstro sabe que alguém destruiu sua sombra. \"Vamos manter vigília nas próximas semanas,\" diz @Starsystemic, \"e eu enviarei um pergaminho de missão quando ele se manifestar.\"", "questMoon2Boss": "Estresse Sombrio", "questMoon2DropArmor": "Armadura de Guerreiro Lunar (Armadura)", - "questMoon3Text": "Batalha Lunar, Parte 3: A Lua Monstruosa", + "questMoon3Text": "Batalha Lunar - Parte 3: A Lua Monstruosa", "questMoon3Notes": "Você recebeu um pergaminho urgente da @Starsystemic à meia noite e galopa até sua torre. \"O monstro está usando a lua cheia para tentar cruzar nosso reino,\" ela diz. \"Se ele conseguir, a onda de estresse será destruidora!\"

Para seu terror, você vê que o monstro está realmente usando a lua para se manifestar. Um olho brilhante abre em sua superfície rochosa e uma língua se desenrola por uma abertura, uma boca com presas. Você não pode deixar ela emergir totalmente!", "questMoon3Completion": "O monstro emergente explode de volta à sombra, e a lua se torna prateada conforme o perigo passa. Os dragões começam a cantar novamente e as estrelas brilham com uma luz suave. @Starsystemic, a Vidente, se abaixa e pega um estilhaço lunar. Ele brilha como prata em sua mão, antes de se transformar em uma magnífica foice de cristal.", "questMoon3Boss": "Lua Monstruosa", @@ -431,7 +431,7 @@ "questTriceratopsDropTriceratopsEgg": "Triceratops (Ovo)", "questTriceratopsUnlockText": "Desbloqueia Ovos de Triceratops para compra no Mercado", "questGroupStoikalmCalamity": "Selvageria em Stoïkalm", - "questStoikalmCalamity1Text": "Selvageria em Stoïkalm – Parte 1: Inimigos da Terra", + "questStoikalmCalamity1Text": "Selvageria em Stoïkalm - Parte 1: Inimigos da Terra", "questStoikalmCalamity1Notes": "Uma mensagem chega de @Kiwibot, e o pergaminho gelado congela seu coração e seus dedos. \"Visitando os Campos de Stoikalm -- monstros saindo de dentro da terra -- mande ajuda!\" Você reúne seu grupo e cavalga para o norte, mas assim que você desce das montanhas, a neve abaixo de seus pés explode e caveiras sorridentes te cercam!

De repente, uma lança passa ao seu lado, atravessando uma caveira e enterrando ela na neve que estava tentando te pegar despercebido. Uma forte mulher com uma armadura bem trabalhada galopa para a briga nas costas de um mastodonte, sua longa trança balança enquanto ela arranca a lança sem cerimônias da besta esmagada. É hora de lutar contra estas bestas com a ajuda da Lady Glaciata, a líder dos Cavaleiros de Mamute!", "questStoikalmCalamity1Completion": "Ao dar o último golpe nas caveiras, elas se dissipam num passe de mágica. \"O enxame amaldiçoado se foi\", Lady Glaciata diz, \"mas nós temos problemas maiores. Sigam-me.\" Ela te passa uma capa para te proteger do ar congelante e você cavalga atrás dela.", "questStoikalmCalamity1Boss": "Enxame de Caveira da Terra", @@ -441,12 +441,12 @@ "questStoikalmCalamity1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questStoikalmCalamity1DropDesertPotion": "Poção de Eclosão Deserto", "questStoikalmCalamity1DropArmor": "Armadura do Cavaleiro de Mamute", - "questStoikalmCalamity2Text": "Selvageria em Stoïkalm – Parte 2: Procure as Cavernas Gélidas", + "questStoikalmCalamity2Text": "Selvageria em Stoïkalm - Parte 2: Procure as Cavernas Gélidas", "questStoikalmCalamity2Notes": "O salão majestoso dos Cavaleiros de Mamute é uma obra-prima incrível de arquitetura, mas também está inteiramente vazia. Não há móveis, não há armas e até as colunas estão sem suas decorações.

\"Aqueles crânios limparam este lugar,\" Lady Glaciata diz lançando um hálito de nevasca. \"Humilhante. Nenhuma alma deve mencionar isso ao Lorde Diabril, ou eu nunca vou parar de ouvir sobre isso.\"

\"Que misterioso!\" diz @Beffymaroo. \"Mas onde eles--\"

\"As caverna do dragão de gelo.\" Lady Glaciata gesticula para brilhantes moedas jogadas na neve lá fora. \"Descuidado.\"

\"Mas não são dragões de gelo criaturas que respeitam seu próprio tesouro?\" @Beffymaroo pergunta. \"Por que eles possivelmente--\"

\"Controle da mente,\" diz Lady Glaciata, completamente sem foco. \"Ou algo igualmente melodramático e inconveniente.\" Ela começa a andar no corredor. \"Por que você está aí parado?\"

Rápido, vá seguir a trilha das Moedas de Gelo!", "questStoikalmCalamity2Completion": "As Moedas de Gelo te levam diretamente a uma entrada enterrada de uma caverna muito bem escondida. Apesar do clima do lado de for ser calmo e amável, com a luz do sol esparramada pela neve, dentro da caverna há um grande barulho, perfurante como o gélido vento. Lady Glaciata te entrega um Elmo do Cavaleiro de Mamute. \"Use isto,\" ela diz. \"Você vai precisar.\"", "questStoikalmCalamity2CollectIcicleCoins": "Moedas de Gelo", "questStoikalmCalamity2DropHeadgear": "Elmo do Cavaleiro de Mamute (Cabeça)", - "questStoikalmCalamity3Text": "Selvageria em Stoïkalm – Parte 3: Terremoto do Dragão de Gelo", + "questStoikalmCalamity3Text": "Selvageria em Stoïkalm - Parte 3: Terremoto do Dragão de Gelo", "questStoikalmCalamity3Notes": "Os tortos túneis das cavernas dos dragões de gelo brilham com geada... e com riquezas incalculáveis. Você fica boquiaberto, mas Lady Glaciata avança sem olhar. \"Excessivamente chamativa\", diz ela. \"Obtido de modo admirável, no entanto, de respeitoso trabalho mercenário e prudentes investimentos bancários. Olhe para frente.\" Focando o olhar, você vê uma torre com uma pilha de itens roubados escondidos na sombra.

Uma voz fala baixinho enquanto você se aproxima. \"Meu delicioso tesouro, você não vai roubá-lo de volta de mim!\" Um curvado corpo desliza da pilha: a própria Rainha Dragão de Gelo! Você tem tempo suficiente para notar os estranhos braceletes reluzentes nos pulsos dela e a selvageria gritante em seus olhos antes dela lançar um rugido que treme toda a terra ao seu redor.", "questStoikalmCalamity3Completion": "Você derrota a Rainha Dragão de Gelo, dando à Lady Glaciata tempo para quebrar os reluzentes braceletes. A Rainha se encolhe em aparente mortificação, então rapidamente se cobre com uma pose orgulhosa. \"Sinta-se livre para remover estes itens estranhos,\" ela diz. \"Tenho medo que eles simplesmente não sirvam para nossa decoração.\"

\"Afinal, você os roubou,\" @Beffymaroo diz. \"Ao invocar os monstros da terra.\"

A Rainha Dragão de Gelo parece ofendida. \"Vá atrás dessa infeliz vendedora de braceletes quebrados,\" ela diz. \"É Tzina que você quer. Eu não tinha relação com isso.\"

Lady Glaciata aperta sua mão. \"Você trabalhou bem hoje,\" ela diz, te dando uma lança e um chifre da pilha de itens. \"Sinta orgulho.\"", "questStoikalmCalamity3Boss": "Rainha Dragão de Gelo", @@ -472,7 +472,7 @@ "questButterflyDropButterflyEgg": "Lagarta (Ovo)", "questButterflyUnlockText": "Desbloqueia Ovos de Lagarto para compra no Mercado", "questGroupMayhemMistiflying": "Batalha em Borbópolis", - "questMayhemMistiflying1Text": "Batalha em Borbópolis – Parte 1: Borbomágica Experimenta um Terrível Destino", + "questMayhemMistiflying1Text": "Batalha em Borbópolis - Parte 1: Borbomágica Experimenta um Terrível Destino", "questMayhemMistiflying1Notes": "Apesar dos adivinhos locais terem previsto um bom clima, a tarde está com ventos fortíssimos, então você devagar segue seu amigo @Kiwibot até sua casa para escapar deste dia de ventos fortes.

Nenhum dos dois espera encontrar Lorde Diabril relaxando na mesa da cozinha.

\"Ahh, olá\", ele diz. \"Que bom encontrar vocês aqui. Por favor, me deixe te oferecer um pouco deste delicioso chá.\"

\"Esse...\", @Kiwibot começa. \"Esse é MEU...\"

\"Sim, sim, claro,\" diz Lorde Diabril, enquanto pega uns biscoitos. \"Só pensei que eu poderia entrar aqui e me livrar um pouco de todas as caveiras conjuradoras de tornados.\" Ele beberica um pouco seu chá. \"Incidentalmente, a cidade de Borbópolis está sendo atacada.\"

Horrorizado, você e seus amigos correm para os estábulos e selam sua mais rápida montaria voadora. Enquanto vocês planam acima da cidade flutuante, vocês veem que um conjunto barulhento de caveiras voadoras está de olho na cidade... e muitas percebem e se viram na sua direção!", "questMayhemMistiflying1Completion": "A última caveira cai do céu, com um brilhante conjunto de roupas de arco-íris preso em sua mandíbula, mas a ventania não diminuiu. Algo mais está agindo aqui. E onde está o preguiçoso Lorde Diabril? Você pega as roupas e entra na cidade.", "questMayhemMistiflying1Boss": "Enxame de Caveiras Voadoras", @@ -482,14 +482,14 @@ "questMayhemMistiflying1DropSkeletonPotion": "Poção de Eclosão Esqueleto", "questMayhemMistiflying1DropWhitePotion": "Poção de Eclosão Branca", "questMayhemMistiflying1DropArmor": "Túnica do Mensageiro Arco-Íris Malandro (Armadura)", - "questMayhemMistiflying2Text": "Batalha em Borbópolis – Parte 2: E o Vento Piora", + "questMayhemMistiflying2Text": "Batalha em Borbópolis - Parte 2: E o Vento Piora", "questMayhemMistiflying2Notes": "Borbópolis começa a trepidar enquanto as abelhas mágicas que a mantém flutuando são golpeadas pelo vendaval. Depois de uma busca desenfreada pelo Lorde Diabril, vocês o encontram numa cabana, alegremente jogando cartas com uma caveira amarrada e com raiva.

@Katy133 levanta a voz através do assobiante vento. \"O que está causando isto? Nós derrotamos as caveiras, mas isto está piorando!\"

\"Esse é o problema\", Lorde Diabril concorda. \"Por favor seja uma dama e não comente com a Lady Glaciata. Ela sempre fica reclamando e querendo acabar nossa relação por eu ser 'catastroficamente irresponsável' e eu tenho medo que ela possa entender mal essa situação.\" Ele embaralha as cartas. \"Talvez você possa seguir as Borbomágicas? Elas são imateriais, então o vento não pode jogar elas pra longe. Além disso, elas costumam se concentrar próximo de ameaças.\" Ele mostra a janela onde várias das criaturas patronas da cidade estão flutuando em direção leste. \"Agora me deixe concentrar... Meu oponente não está com uma cara boa.\"", "questMayhemMistiflying2Completion": "Você segue as Borbomágicas para o lugar do tornado, onde está muito forte para você continuar.

\"Isso deve ajudar,\" diz uma voz diretamente no seu ouvido, tanto que você quase cai da sua montaria. O Lorde Diabril está, de alguma forma, sentado bem ao seu lado na sela da montaria. \"Eu ouvi que aqueles capuz de mensageiros emitem uma aura que protege contra maus climas... Bem útil para não perder cartas enquanto se voa por aí. Talvez você possa tentar?\"", "questMayhemMistiflying2CollectRedMistiflies": "Borbomágica Vermelha", "questMayhemMistiflying2CollectBlueMistiflies": "Borbomágica Azul", "questMayhemMistiflying2CollectGreenMistiflies": "Borbomágica Verde", "questMayhemMistiflying2DropHeadgear": "Capuz do Mensageiro Arco-Íris Malandro (Cabeça)", - "questMayhemMistiflying3Text": "Batalha em Borbópolis – Parte 3: O Carteiro que é Extremamente Rude", + "questMayhemMistiflying3Text": "Batalha em Borbópolis - Parte 3: O Carteiro que é Extremamente Rude", "questMayhemMistiflying3Notes": "As Borbomágicas estão girando tão rápido no tornado que é difícil vê-las. Olhando atentamente, você vê uma silhueta de algo com várias asas voando no centro da imensa tempestade.
\"Ai ai ai\", Lorde Diabril suspira, quase não se ouve por culpa do barulho da tempestade. \"Parece que Winny, de alguma forma, foi possuído. Problema bem comum, isso daí. Pode acontecer com qualquer um.\"

\"O Manipulador do Vento!\" @Beffymaroo grita para você. \"Ele é o mensageiro-mago mais talentoso de Borbópolis, exatamente por ser tão bom com magias do clima. Normalmente, ele é um mensageiro bem educado!\"

Como se quisesse desmentir essa última frase, o Manipulador do Vento lança um grito de fúria e mesmo com seu manto mágico, a tempestade quase te derruba de sua montaria.

\"Essa máscara toda cheguei é nova\", Lorde Diabril nota. \"Talvez você devesse livrar ele da máscara?\"

É uma boa ideia... mas o mago em fúria não vai desistir sem uma boa briga.", "questMayhemMistiflying3Completion": "Logo quando você acreditava que não poderia aguentar o vento nenhum pouco mais, você consegue se esgueirar e arrancar a máscara do Manipulador do Vento. Instantaneamente, o tornado desaparece, deixando apenas uma reparadora brisa com o brilho do sol. O Manipular do Vento olha ao redor aliviado. \"Aonde ela foi?\"

\"Quem?\", seu amigo @khdarkwolf pergunta.

\"Aquela doce mulher que se ofereceu para entregar um pacote por mim. Tzina.\" Ao notar a cidade que fora atacada pelo vento, sua expressão cai. \"Então, talvez ela não fosse tão doce...\"

Lorde Diabril o consola e entrega dois envelopes brilhantes. \"Aqui, por que você não deixa esse cansado amigo descansar e toma conta das cartas um pouco? Eu ouvi que a mágica nesses envelopes farão valer à pena seu tempo.\"", "questMayhemMistiflying3Boss": "O Manipulador do Vento", @@ -518,18 +518,18 @@ "witchyFamiliarsNotes": "Contém \"O Rei Rato\", \"O Aracnídeo de Gelo\" e \"Pântano do Sapo Bagunceiro\".", "questGroupLostMasterclasser": "Mistério dos Mestres de Classe", "questUnlockLostMasterclasser": "Para desbloquear essa missão, complete as missões finais dessa cadeia de missões: \"Batalha em Borbópolis\", \"Lamento em Lentópolis\", \"Medo em Matarefa\" e \"Selvageria em Stoïkalm\".", - "questLostMasterclasser1Text": "O Mistério dos Mestres de Classe, Parte 1: Leia as Entrelinhas", + "questLostMasterclasser1Text": "O Mistério dos Mestres de Classe - Parte 1: Leia as Entrelinhas", "questLostMasterclasser1Notes": "Inesperadamente, você é convocado por @beffymaroo e @Lemoness ao Salão do Hábito, onde fica atônito ao encontrar os quatro Mestres de Classe esperando por você sob a pálida luz da alvorada. Até mesmo a Ceifadora Alegre parece sombria.

\"Oho, você está aqui\", diz Lorde Diabril. \"Não tiraríamos você de seu descanso sem um motivo terrível...\"

\"Ajude-nos a investigar o recente ataque de possessões\", interrompe Lady Glaciata. \"Todas as vítimas culpam uma pessoa chamada Tzina.\"

Lorde Diabril fica claramente ofendido com a interrupção. \"E quanto ao meu discurso?\" ele chia com ela. \"Com o nevoeiro e as trovoadas?\"

\"Temos pressa\", ela murmura de volta. \"E meus mamutes ainda estão encharcados por causa de sua prática incessante.\"

\"Receio que a estimada Mestre dos Guerreiros está certa,\" diz o Rei Manta. \"Tempo é essencial. Você nos ajudará?\"

Quando você concorda, ele agita sua varinha e abre um portal, revelando uma sala subaquática. \"Nade comigo até Dilatória e buscaremos em minha biblioteca por qualquer referência que nos dê uma pista.\" Ao perceber sua confusão, diz \"Não se preocupe. O papel foi encantado muito antes de Dilatória afundar. Nenhum dos livros está nem perto de estar molhado!\" Ele pisca. \"Diferente dos mamutes de Lady Glaciata.\"

\"Eu escutei isso, Manta.\"

Ao mergulhar na água após o Mestre dos Magos, suas pernas magicamente se transformam em nadadeiras. Embora seu corpo esteja flutuando, seu coração afunda ao ver as milhares de prateleiras. É melhor começar a leitura…", "questLostMasterclasser1Completion": "Após horas de busca nos volumes, você ainda não encontrou nenhuma informação útil.

\"É impossível que não exista nenhuma mísera referência a qualquer coisa relevante,\" diz a bibliotecária \"@Tuqjoi e seu assistente @stefalupagus concorda frustrado.

Os olhos de Rei Manta se estreitam. \"Impossível não...\" ele diz. \"Intencional.\" Por um instante a água brilha em volta de suas mãos e vários livros se arrepiam. \"Alguma coisa está obscurecendo a informação,\" ele diz. \"Não apenas um feitiço simples, mas algo com vontade própria. Algo... vivo.\" Ele nada para fora da mesa. \"A Ceifadora Alegre precisa saber disso. Vamos preparar algo para comer na estrada.\"", "questLostMasterclasser1CollectAncientTomes": "Tomos Antigos", "questLostMasterclasser1CollectForbiddenTomes": "Tomos Proibidos", "questLostMasterclasser1CollectHiddenTomes": "Tomos Escondidos", - "questLostMasterclasser2Text": "O Mistério dos Mestres de Classe, Parte 2: Conjurando o Esqui'vão", + "questLostMasterclasser2Text": "O Mistério dos Mestres de Classe - Parte 2: Conjurando o Esqui'vão", "questLostMasterclasser2Notes": "A Ceifadora Alegre batuca seus dedos ósseos em alguns dos livros que você trouxe. \"Oh, minha cara,\" a Mestre dos Curandeiros diz. \"Existe uma essência de vida malévola em ação. Eu deveria ter percebido, considerando os ataques de crânios reanimados durante cada incidente.\" Sua assistente @tricksy.fox traz um baú e você se assusta ao ver o conteúdo que @beffymaroo despeja: os mesmos objetos usados por essa misteriosa Tzina para possuir as pessoas.

\"Vou usar magia de cura ressonante para fazer com que essa criatura se manifeste,\" diz a Ceifadora Alegre, lembrando a você que o esqueleto é de alguma forma um Curandeiro não convencional. \"Você precisa ler a mensagem revelada rapidamente, caso a criatura saia do nosso controle.\"

Conforme ela se concentra, uma névoa torcida começa a sair dos livros e envolver os objetos. Rapidamente, você viras as páginas tentando ler as novas linhas de texto que se aproximam. Você consegue pegar apenas alguns trechos: \"Areias dos Tempos Perdidos\" - \"o Grande Desastre\" - \"dividir em quatro\" - \"permanentemente corrompido\" - Até que um nome chama a sua atenção: Zinnya.

De forma bruta, as páginas se libertam de seus dedos e se destroem enquanto uma criatura uivante explode em existência, fundindo-se em torno dos objetos possuídos.

\"É um Esqui'vão!\" a Ceifadora Alegre grita, conjurando um feitiço de proteção. \"São criaturas antigas de confusão e obscuridade. Se essa Tzina pode controlar uma delas, ela deve possuir um comando assustador sobre a vida mágica. Rápido, ataque-a antes que escape de volta para os livros!\"

", "questLostMasterclasser2Completion": "O Esqui'vão finalmente sucumbe e você partilha os trechos que lê.

\"Nenhuma dessas referências me parecem familiar, mesmo para alguém tão velha quanto eu,\" diz a Ceifadora Alegre. \"Exceto... os Tempos Perdidos são um deserto distante, nos limites mais hostis do Habitica. Portais frequentemente falham na região, mas montarias rápidas podem levar você até lá bem rápido. Lady Glaciata com prazer irá te ajudar.\" Sua voz soa divertida. \"O que significa que o Mestre dos Ladinos enamorado certamente virá junto.\" Ela entrega uma máscara cintilante a você. \"Talvez você deva tentar rastrear a magia que persiste nesses itens até sua origem. Eu irei colher algum sustento para a sua jornada.\"", "questLostMasterclasser2Boss": "O Esqui'vão", "questLostMasterclasser2DropEyewear": "Máscara Etérea (Acessório de Olhos)", - "questLostMasterclasser3Text": "O Mistério dos Mestres de Classe, Parte 3: Cidade nas Areias", + "questLostMasterclasser3Text": "O Mistério dos Mestres de Classe - Parte 3: Cidade nas Areias", "questLostMasterclasser3Notes": "Assim que a noite cai sobre as areias incandescentes de Tempo Perdido, seus guias @AnndeLuna, @KiwiBot e @Katy133 conduzem o caminho à frente. Alguns pilares descoloridos despontam sobre as dunas sombrias e, ao se aproximarem, um som arrepiante ecoa por toda aquela que, antes, parecia ser uma área abandonada.

\" Criaturas invisíveis!\", diz Lorde Diabril, claramente tomado pela cobiça. \"Hehehe...! Imaginem só as possibilidades. Este deve de ser um trabalho de um Ladino realmente furtivo\"

\" Um Ladino que pode estar nos vigiando\", diz Lady Glaciata, desmontando de seu corcel e brandindo sua lança.\" Se eles estão prontos para atacar, tentem não irritar os nossos oponentes . Eu não quero outro incidente como o dos vulcões.\"

Ele então sorri para ela. \"Mas aquele foi com certeza um dos seus resgastes mais esplêndidos.\"

Para sua surpresa, Lady Glaciata cora com o elogio. Ela rapidamente aperta o passo para examinar as ruínas.

\"Parecem as ruínas de uma antiga cidade\", diz @AnnDeLune. \"Eu só fico imaginando o quê...\"

Antes que ela pudesse terminar sua fala, um portal abre-se ruidoso no céu. Este tipo de conjuração mágica não deveria ser praticamente impossível aqui?! Você ouve o trote brusco dos animais invisíveis ao fugirem em pânico e prontamente se põe em guarda - contra as uivantes caveiras que transbordam dos céus prontas para um massacre.", "questLostMasterclasser3Completion": "Lorde Diabril surpreende a última caveira com um spray de areia e ela recua até Lady Glaciata, que a destroi com destreza. Bom, respire fundo e de uma olhada, você vê a silhueta de alguém movendo por um único instante no outro lado do portal que está se fechando. Quase como reflexo, você estende a mão para o baú dos itens previamente conquistados e se agarra ao amuleto, e com determinação, vai em direção da pessoa invisível. Ignorando os gritos de aviso de Lady Glaciata e Lorde Diabril, você salta pelo portal instantes antes dele fechar, sendo submerso em um pegajoso vazio.", "questLostMasterclasser3Boss": "Enxame de Caveiras do Vácuo", @@ -542,7 +542,7 @@ "questLostMasterclasser3DropPinkPotion": "Poção Rosa Algodão-Doce", "questLostMasterclasser3DropShadePotion": "Poção Sombria", "questLostMasterclasser3DropZombiePotion": "Poção de Eclosão Zumbi", - "questLostMasterclasser4Text": "O Mistério dos Mestres de Classe, Parte 4: A Mestra Desaparecida", + "questLostMasterclasser4Text": "O Mistério dos Mestres de Classe - Parte 4: A Mestra Desaparecida", "questLostMasterclasser4Notes": "Você emerge do portal, ainda suspenso em um estranho, e instável, submundo “Aquilo foi ousado,” diz uma voz fria. “Eu devo admitir, ainda não havia planejado uma batalha direta” Uma mulher ascende do redemoinho revolto em trevas. “Bem-vindo(a) ao reino do vácuo.”

Você tenta lutar contra uma sensação nauseante enquanto pergunta \"Você é a Zinnya?”

“Este é um velho nome para uma jovem idealista” ela diz com a boca contorcendo enquanto o mundo distorce sobre seus pés “Não! Se realmente precisa de um nome, deve me chamar como a Anti’zinnya agora, depois de tudo que eu fiz e desfiz.”

De repente, o portal reabre atrás de você e dele saltam todos os quatro mestres de classes, correndo em sua direção. Os olhos da Anti’zinnya’s estão preenchidos de ódio ao olhar essa cena. “Vejo que meus patéticos substitutos conseguiram chegar até você”

Você não acredita. “Substitutos?”

“Como mestre dobradora do ether, eu fui a primeira mestre de classe - a única mestre de classe. Esses quatro são patéticos, cada um possuindo apenas um fragmento do que um dia eu tive! Eu comandei cada magia, eu aprendi todas as habilidades. Eu quem criei o seu mundo pela minha vontade - até que o traiçoeiro ether se colapsou sobre o peso dos meus talentos e das minhas expectativas perfeitamente razoáveis. Depois, eu estive aprisionada por milênios nesse vácuo resultante, me recuperando. Imagina meu desgosto quando descobri o quanto meu legado foi corrompido. Ela deixa escapar uma fina, ecoante risada. “Meu plano era demolir seus domínios antes de destruir cada um de vocês, mas suponho que a ordem dos fatores é irrelevante” Com uma explosão de força desenfreada ela dispara em sua direção, e o Reino do Vácuo explode em caos.", "questLostMasterclasser4Completion": "Durante a investida de seu último ataque, a Mestra Desaparecida grita com frustração, e o corpo dela oscila em translucidez. O vazio começa envolve-la enquanto ela cai para frente, e por um momento, você enxerga ela se transformar, se tornando mais jovem, calma, e com uma expressão de paz em seu rosto... mas acaba com tudo esvaindo-se como apenas um sussurro, e você se encontra mais uma vez de joelhos no meio do deserto.

\"Parece que nós temos muito o que aprender sobre nossa história\", diz o Rei Manta, olhando para as ruínas. \"Depois da Mestra Dobradora de Éter ter crescido sobrecarregada e perder o controle sob suas habilidades, o vazio derramado levou toda a vida desta terra. Provavelmente tudo o que se conhece poderia se tornar um deserto como este\"

\"Não é de se espantar que os antigos fundadores de Habitica sempre insistiam no equilíbrio da produtividade e do bem estar\", murmura a Ceifadora Alegre. \"Reconstruir o mundo deles deve ter sido uma tarefa assustadora de um longo e árduo trabalho, mas eles deveriam querer prevenir que tal catástrofe acontecesse novamente.\"

\"Uau, olhe aqueles itens primitivos!\", diz Lorde Diabril. Com certeza, todos eles brilham com a pálido e translúcida cintilação vinda da explosão final de éter que ocorreu quando você colocou o espírito de Anti’zinnya’s para dormir. \"Que efeito deslumbrante. Eu devo fazer anotações.\"

\"Provavelmente o restos concentrados de éter nessa área, também tornaram os animais invisíveis\", diz Lady Glaciata, ao coçar a cabeça de uma silhueta vazia atrás das orelhas. Você sente uma cabeça fofa e invisível tocar a palma de sua mão e suspeita que terá que dar explicações aos estábulos quando voltar para casa. Ao olhar as ruínas uma última vez, você vê o que sobrou da primeira Mestra de Classes: sua capa brilhante. Colocando-a em seus ombros, você volta para Cidade dos Hábitos, pensando sobre tudo que aprendeu.

", "questLostMasterclasser4Boss": "Anti'zinnya", diff --git a/website/common/locales/sk/npc.json b/website/common/locales/sk/npc.json index 970a8ffac1..687e4cd98f 100644 --- a/website/common/locales/sk/npc.json +++ b/website/common/locales/sk/npc.json @@ -7,26 +7,26 @@ "justin": "Justin", "justinIntroMessage1": "Ahoj! Musíš tu byť nový. Volám sa Justin, a budem tvojím sprievodcom vo svete Habitici.", "justinIntroMessage3": "Skvelé! Teraz mi povedz, na čom by si chcel pracovať počas tejto cesty?", - "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", - "justinIntroMessageAppearance": "So how would you like to look? Don’t worry, you can change this later.", + "justinIntroMessageUsername": "Skôr ako začneme, musíme vymyslieť ako ťa budeme volať. Nižšie nájdeš verejné aj užívateľské meno, ktoré som pre teba vygeneroval. Hneď ako si vyberieš verejné a používateľské meno, môžeme začať s torbou tvojho avatara!", + "justinIntroMessageAppearance": "Ako by si chcel vyzerať? Neboj sa, svoj vzhľad môžeš neskôr zmeniť.", "introTour": "Tu to máme! Vyplnil som pre teba nejaké Úlohy založené na tvojich záujmoch, takže môžeš hneď začať. Klikni na Úlohu, aby si ju upravil alebo pridaj novú Úlohu, ktorá sa bude hodiť k tvojmu režimu!", - "prev": "Prev", + "prev": "Predch", "next": "Next", - "randomize": "Randomize", + "randomize": "Náhodné", "mattBoch": "Matúš Boch", "mattBochText1": "Vitaj v stajni! Volám sa Matt, pán šeliem. Vždy keď splníš úlohu, máš náhodnú šancu získať vajíčko alebo liahoxír na liahnutie zvieratiek. Keď si vyliahneš zvieratko, objaví sa tu! Klikni na obrázok zvieratka aby si ho pridal k svojmu avatarovi. Nakŕm ich krmivom, ktoré nájdeš, a vyrastú v majestátne tátoše.", "welcomeToTavern": "Vitaj v Hostinci!", "sleepDescription": "Potrebuješ pauzu? Pozastav poškodenie (nájdeš v nastaveniach) pre pozastavenie, niektorých náročnejších herných mechaník Habitici:", "sleepBullet1": "Tvoje vynechané denné úlohy ťa nezrania (bossovia však budú stále spôsobovať poškodenie za denné úlohy, ktoré nesplnili členovia tvojej družiny)", - "sleepBullet2": "Počítadlá denných úloh a návykov sa nezresetujú.", + "sleepBullet2": "Počítadlá denných úloh a návykov sa nezresetujú", "sleepBullet3": "Tvoje poškodenie udelené bossom z výprav alebo objavené zberateľské predmety zostanú čakajúce až dokiaľ si opäť nepovolíš poškodenie", - "pauseDailies": "Pause Damage", - "unpauseDailies": "Unpause Damage", - "staffAndModerators": "Staff and Moderators", + "pauseDailies": "Pozastaviť poškodenie", + "unpauseDailies": "Obnoviť poškodenie", + "staffAndModerators": "Personál a Moderátori", "communityGuidelinesIntro": "Habitica sa snaží vytvoriť prostredie vítajúce používateľov akéhokoľvek veku a pôvodu, špeciálne v priestoroch skupín a družín. Pokiaľ by si mal akékoľvek otázky, prosím obráť sa na naše Pravidlá pre komunitu.", - "acceptCommunityGuidelines": "I agree to follow the Community Guidelines", - "worldBossEvent": "World Boss Event", - "worldBossDescription": "World Boss Description", + "acceptCommunityGuidelines": "Súhlasím s dodržiavaním pravidiel pre komunitu", + "worldBossEvent": "Udalosť Svetový boss", + "worldBossDescription": "Popis svetového bossa", "welcomeMarketMobile": "Welcome to the Market! Buy hard-to-find eggs and potions! Come see what we have to offer.", "howManyToSell": "How many would you like to sell?", "yourBalance": "Your balance:", diff --git a/website/common/locales/uk/spells.json b/website/common/locales/uk/spells.json index 8b9d3dcdb9..b53a93e1c3 100644 --- a/website/common/locales/uk/spells.json +++ b/website/common/locales/uk/spells.json @@ -8,7 +8,7 @@ "spellWizardFrostText": "Лютий мороз", "spellWizardFrostNotes": "Лише одне чарування і лід заморожує всі ваші серії, щоб завтра вони не скинулись до нуля!", "spellWarriorSmashText": "Безжальний удар", - "spellWarriorSmashNotes": "Ви робите завдання більш синім/менш червоним і завдаєте додаткової шкоди босам! (На основі: СИЛ)", + "spellWarriorSmashNotes": "Ви робите завдання синішим/менш червоним і завдаєте додаткової шкоди босам! (На основі: СИЛ)", "spellWarriorDefensiveStanceText": "Оборонна стійка", "spellWarriorDefensiveStanceNotes": "Ви низько присідаєте і отримуєте підсилення до витривалості! (На основі: ВИТ без підсилень)", "spellWarriorValorousPresenceText": "Присутність доблесті", diff --git a/website/common/locales/zh/backgrounds.json b/website/common/locales/zh/backgrounds.json index aff4a13cac..584d909c0b 100644 --- a/website/common/locales/zh/backgrounds.json +++ b/website/common/locales/zh/backgrounds.json @@ -900,8 +900,11 @@ "backgroundMountainSceneWithBlossomsText": "山景与花", "backgrounds0420205": "第131组:2025年4月发布", "backgroundGardenWithFlowerBedsText": "带花坛的花园", - "backgroundGardenWithFlowerBedsNotes": "漫步花园苗圃,尽赏春日繁花", + "backgroundGardenWithFlowerBedsNotes": "漫步花园苗圃,尽赏春日繁花。", "backgrounds052025": "第132组:2025年5月发布", "backgroundTrailThroughAForestText": "林间小径", - "backgroundTrailThroughAForestNotes": "漫步在林间小径。" + "backgroundTrailThroughAForestNotes": "漫步在林间小径。", + "backgrounds062025": "第133组:2025年6月发布", + "backgroundSummerSeashoreText": "夏日海滨", + "backgroundSummerSeashoreNotes": "在夏日海滨冲浪。" } diff --git a/website/common/locales/zh/faq.json b/website/common/locales/zh/faq.json index 505821c766..0364a5c567 100644 --- a/website/common/locales/zh/faq.json +++ b/website/common/locales/zh/faq.json @@ -72,7 +72,7 @@ "webFaqAnswer33": "在解锁职业系统后,你还会解锁需要消耗法力值来施放的技能。法力值由智力属性决定,并会根据技能和装备进行调整。", "faqQuestion34": "我的宠物喜欢吃什么种类的食物?", "faqQuestion35": "我喂了宠物后它消失了!发生了什么?", - "webFaqAnswer35": "在你喂了宠物足够的食物使其成长为坐骑后,你就需要再次孵化这种类型的宠物才能在马厩中重新拥有它。\n\n在移动客户端上查看坐骑的方法:\n\n * 从菜单中选择“宠物与坐骑”,然后切换到“坐骑”选项\n\n在网页版上查看坐骑的方法:\n\n * 在背包菜单中选择“宠物与坐骑”,然后向下滚动鼠标至坐骑的部分", + "webFaqAnswer35": "当你喂了宠物足够的食物使其成长为坐骑后,你需要再次孵化这种类型的宠物才能在马厩中重新拥有该宠物。\n\n在移动客户端上查看坐骑的方法:\n\n * 从菜单中选择“宠物与坐骑”,然后切换到“坐骑”选项\n\n在网页版上查看坐骑的方法:\n\n * 在背包菜单中选择“宠物与坐骑”,然后向下滚动鼠标至坐骑部分", "faqQuestion36": "我该如何改变我的头像的外观?", "webFaqAnswer36": "自定义你的Habitica头像外观的方法多到数不清!你可以从菜单中选择“自定义头像”,更改头像显示的体型、发型,以及发色、肤色,或者添加眼镜或轮椅。\n\n在移动客户端上自定义头像:\n * 在菜单中选择“自定义头像”\n\n在网页版上自定义头像的:\n * 在导航栏的用户菜单中选择“自定义头像”", "faqQuestion37": "为什么我的头像上没有显示我的装备?", @@ -99,7 +99,7 @@ "webFaqAnswer48": "是的,和队伍一起!你可以组建自己的队伍,也可以加入现有的队伍。与其他Habitica玩家组队是完成副本、从队友的技能中获得增益及通过附加的责任来激发自身动力的好方法。", "faqQuestion49": "当我不在队伍中时,我该如何找到一支队伍?", "faqQuestion47": "我能看到我的任务和习惯完成情况的数据吗?", - "webFaqAnswer49": "如果你想要与其他人一起体验Habitica,但又不认识其他玩家,那么搜索队伍是你最佳的选择!如果你已经认识其他拥有队伍的玩家, 你可以与他们分享你的@用户名 以获得邀请。此外,你也可以创建新的队伍,然后通过其他玩家的@用户名 或邮箱地址邀请他们。\n\n要创建或搜索一支队伍,请在导航菜单中选择“队伍”,然后选择适合你的选项。", + "webFaqAnswer49": "如果你想要与其他人一起体验Habitica,但又不认识其他玩家,那么搜索队伍是你最佳的选择!如果你已经认识其他已加入队伍的玩家, 你可以与他们分享你的@用户名 以获得邀请。此外,你也可以创建新的队伍,然后通过其他玩家的@用户名 或邮箱地址邀请他们加入。\n\n要创建或搜索一支队伍,请在导航菜单中选择“队伍”,然后选择适合你的选项。", "faqQuestion50": "如何寻找一支队伍?", "webFaqAnswer50": "在选择“寻找队伍”后,你将会被添加到想要加入队伍的玩家名单中。队伍的队长可以查看此名单并发送邀请 。收到邀请后,你可以从通知中接受邀请,加入自己选择的队伍!\n\n你可能会接收到来自不同队伍的多份邀请。但是,你一次只能成为一支队伍的成员。", "faqQuestion51": "进入名单后,我可以搜索队伍多长时间?", @@ -109,7 +109,7 @@ "webFaqAnswer53": "如果你使用的是Habitica网页版,请从队伍的下拉菜单中选择“寻找队友”。如果你使用的是安卓客户端,请点击队伍成员列表上方的“寻找队友”。这将显示正在寻找队伍且可被邀请加入的玩家名单。\n\n你可以通过查看一些信息,如语言、职业、等级及使用Habitica的天数来帮助自己找到适合你队伍的成员。如果你想要与某人交谈后再发送邀请,你可以查看其简介并发送私信。", "webFaqAnswer57": "加入队伍后,你将不再收到任何邀请。如果你想阻止来自特定玩家的邀请和信息,请查看其简介并点击拉黑按钮。移动端请点击其简介页面右上角的三个点,然后选择“拉黑”。\n\n如果你认为某位玩家的姓名、简介或发送的信息违反了我们的社区准则,请举报他们的发送的信息或通过admin@habitica.com联系我们。", "webFaqAnswer64": "共享任务将会在相同的时间重置,以确保所有人的共享任务栏保持同步。这个时间可以在共享任务栏上看到,由团队计划队长的每日起始时间决定。因为共享任务会自动重置,所以第二天早上登录时,你将没有机会来勾选完成昨天未完成的共享日常任务。\n\n错过的日常任务不会造成伤害,但它们的颜色等级将会降低,以帮助直观了解其进度。", - "webFaqAnswer60": "以下是一些可帮助你开始使用新的Habitica团队计划的快速提示:\n\n * 将一名成员晋升为管理员,让其有能力创建和编辑任务\n * 不分配任何人都能完成且只需完成一次的任务\n * 如果其他人无需完成某项任务,请将其分配给特定的成员\n * 如果很多人都需要完成某项任务,请将其分配给复数的成员\n * 在个人任务栏上切换显示共享任务的功能,以免错过任何任务\n * 完成任务即可获得奖励,即使是多人完成的任务,奖励也不会被拆分\n * 根据团队面板上的任务颜色来判断任务的平均完成率\n * 定期检查共享任务栏上的任务,确保它们仍有价值\n * 错过的日常任务不会对你或你的团队造成伤害,但任务的颜色等级将会降低", + "webFaqAnswer60": "以下是一些可帮助你开始使用新的Habitica团队计划的快速提示:\n\n * 将一名成员晋升为管理员,让其有能力创建和编辑任务\n * 如果任何人都能完成且只需完成一次,则不要分配该任务\n * 如果其他人无需完成某项任务,请将其分配给特定的成员\n * 如果很多人都需要完成某项任务,请将其分配给那些成员\n * 打开在个人任务栏上显示共享任务的功能,以免错过任何任务\n * 完成任务即可获得奖励,即使是多人完成的任务,奖励也不会被拆分\n * 任务完成奖励不会分配给成员\n * 根据团队面板上的任务颜色来判断任务的平均完成率\n * 定期检查共享任务栏上的任务,确保它们仍有价值\n * 错过的日常任务不会对你或你的团队造成伤害,但任务的颜色等级将会降低", "webFaqAnswer47": "目前Habitica还无法直观地显示你的任务数据变化情况。不过在Habitica网页版上,你可以从设置中的网站数据选项里导出你的任务数据。", "faqQuestion54": "我最多可以邀请多少人加入我的队伍?", "faqQuestion53": "我有一支队伍,我该如何找到更多成员?", @@ -240,7 +240,7 @@ "subscriptionDetail451": "每个赠送的订阅都会增加玩家享受订阅额外奖励的月份数,使他们能够在接下来的每个月继续获得更多神秘沙漏并增加宝石上限。", "subscriptionDetail480": "这些改动只会影响神秘沙漏和订阅者的宝石。其他所有的额外奖励都不会变动。", "subscriptionDetail48": "其他订阅的额外奖励会做出改变吗,比如神秘套装之类的?", - "webFaqAnswer67": "职业是你的角色可以扮演的不同角色。随着您的等级提升,每个职业都会提供自己的一套独特额外奖励和技能。这些技能可以增加您与任务的交互方式,或帮助您完成队伍中的任务。\n\n您的职业还决定了您在奖励、市场和赛季商店中可以购买的装备。\n\n以下是每个职业的概要,可以帮助您选择最适合您的游戏风格的职业:\n#### **战士**\n* 战士对 Boss 造成高伤害,并在完成任务时有很高的几率暴击,奖励您额外的经验和金币。\n* 力量是他们的主要属性,可以提高他们造成的伤害。\n* 体质是他们的次要属性,可以降低他们受到的伤害。\n* 战士的技能可以增强队友的体质和力量。\n* 如果您喜欢与 Boss 战斗,或者您偶尔错过任务但希望减轻惩罚,选择战士吧。\n\n#### **医者**\n* 医者防御力高,可以治疗自己和队友。\n* 体质是他们的主要属性,可以增加他们的治疗并降低他们受到的伤害。\n* 智力是他们的次要属性,可以增加他们的法力值和经验值。\n* 医者技能使他们的任务不那么危急,并且可以增强他们队友的体质。\n* 如果您经常错过任务并需要治愈自己或队友,请选择治疗师吧。此外,医者升级也很快。\n\n#### **法师**\n* 法师升级很快,法力值很高,可以在任务中重创 Boss。\n* 智力是他们的主要属性,可以增加他们的法力值和经验值。\n* 感知力是他们的次要属性,可以增加金币和其他物品的掉落。\n* 法师的技能会暂停他们的任务连击,恢复队友的法力值,并增强他们的智力。\n* 如果你喜欢快速过关升级并且重创boss,请选择法师吧。\n#### **盗贼**\n* 盗贼通过完成任务获得的物品掉落和金币最多,并且有很高的暴击率,获得更多的经验和金币。\n* 感知力是他们的主要属性,可以增加金币和其他物品的掉落。\n* 力量是他们的次要属性,可以提高他们造成的伤害。\n* 盗贼的技能帮助他们躲避错过的每日任务,窃取黄金,并提升队友的感知力。\n* 如果您很喜欢赢取丰厚的奖励,请选择盗贼吧。", + "webFaqAnswer67": "职业是你的角色可以扮演的不同角色。随着您的等级提升,每个职业都会提供自己的一套独特额外奖励和技能。这些技能可以增加您与任务的交互方式,或帮助您完成队伍中的任务。\n\n您的职业还决定了您在奖励、市场和赛季商店中可以购买的装备。\n\n以下是每个职业的概要,可以帮助您选择最适合您的游戏风格的职业:\n#### **战士**\n* 战士对 Boss 造成高伤害,并在完成任务时有很高的几率暴击,奖励您额外的经验和金币。\n* 力量是他们的主要属性,可以提高他们造成的伤害。\n* 体质是他们的次要属性,可以降低他们受到的伤害。\n* 战士的技能可以增强队友的体质和力量。\n* 如果您喜欢与 Boss 战斗,或者您偶尔错过任务但希望减轻惩罚,选择战士吧。\n#### **医者**\n* 医者防御力高,可以治疗自己和队友。\n* 体质是他们的主要属性,可以增加他们的治疗并降低他们受到的伤害。\n* 智力是他们的次要属性,可以增加他们的法力值和经验值。\n* 医者技能使他们的任务不那么危急,并且可以增强他们队友的体质。\n* 如果您经常错过任务并需要治愈自己或队友,请选择治疗师吧。此外,医者升级也很快。\n#### **法师**\n* 法师升级很快,法力值很高,可以在任务中重创 Boss。\n* 智力是他们的主要属性,可以增加他们的法力值和经验值。\n* 感知力是他们的次要属性,可以增加金币和其他物品的掉落。\n* 法师的技能会暂停他们的任务连击,恢复队友的法力值,并增强他们的智力。\n* 如果你喜欢快速过关升级并且重创boss,请选择法师吧。\n#### **盗贼**\n* 盗贼通过完成任务获得的物品掉落和金币最多,并且有很高的暴击率,获得更多的经验和金币。\n* 感知力是他们的主要属性,可以增加金币和其他物品的掉落。\n* 力量是他们的次要属性,可以提高他们造成的伤害。\n* 盗贼的技能帮助他们躲避错过的每日任务,窃取黄金,并提升队友的感知力。\n* 如果您很喜欢赢取丰厚的奖励,请选择盗贼吧。", "subscriptionPara3": "我们希望这个新的计划表更加可预测,使得用户有更多的机会获得时空旅行者商店里的众多厉害的物品,甚至让你更积极地完成月度计划,实现进步!", "faqQuestion67": "Habitica中的职业是什么意思?", "subscriptionPara2": "如果你仍有未被涉及的问题,你依然可以通过<%= mailto %>联系我们的团队。" diff --git a/website/common/locales/zh/front.json b/website/common/locales/zh/front.json index 3259c7e0cb..ea0e4d21ab 100644 --- a/website/common/locales/zh/front.json +++ b/website/common/locales/zh/front.json @@ -25,32 +25,32 @@ "invalidEmail": "执行密码重置需要有效的电子邮箱地址。", "login": "登录", "logout": "退出", - "marketing1Header": "通过游戏改善你的习惯", - "marketing1Lead1Title": "你的人生RPG", - "marketing1Lead1": "Habitica是一款帮助你改善现实生活习惯的游戏。它通过将你所有的任务(习惯,日常任务和待办事项) 变成你需要打败的小怪物来“游戏化”你的生活。你在生活中做得越好,你在游戏中的进步就越大。如果你在生活中犯了错误,你的角色也会在游戏中退步。", - "marketing1Lead2Title": "获取精美装备", - "marketing1Lead2": "改善你的习惯来使你的角色成长。炫耀你得到的炫酷装备吧!", - "marketing1Lead3Title": "寻找随机奖励", - "marketing1Lead3": "对有些人来说,最能激励他们的方式是赌博:一种叫做“随机奖励”机制。Habitica支持所有的强化与惩罚方式:无论是积极的、消极的、指定的还是随机的。", - "marketing2Header": "与朋友一起竞争", - "marketing2Lead1Title": "和朋友一起提高效率", - "marketing2Lead1": "你当然可以独自玩Habitica,但是当你开始合作、竞争和对他人负责的时候,Habitica才能发挥真正的作用。自我提高最有效的方法就是保持集体责任感,还有什么比电子游戏更能营造责任感和竞争环境呢?", - "marketing2Lead2Title": "与怪物战斗", - "marketing2Lead2": "RPG游戏怎么能缺少战斗元素?和你的队伍一起与怪物战斗吧。怪物是 “超级责任感模式”——你没去健身房的一天,就是怪物伤害*所有人*的一天!", + "marketing1Header": "逐级养成好习惯!", + "marketing1Lead1Title": "游戏化你的人生", + "marketing1Lead1": "Habitica 专治待办清单拖延症!熟悉的游戏化机制:完成任务即得金币、经验与物品奖励,轻松推进事项,成就感爆棚。现实任务越高效,游戏成长越突飞猛进。", + "marketing1Lead2Title": "炫装出击", + "marketing1Lead2": "做任务赚金币,收集刀剑盔甲各种装备。数百件单品自由搭配,组合玩法无穷无尽。要战力?要颜值?我全都要! ", + "marketing1Lead3Title": "努力必有回报", + "marketing1Lead3": "当生活缺乏奖励时,任务可能拖延数周。但Habitica随时待命帮你搞定!每项任务必有回报,而惊喜总在转角处——请保持前进! ", + "marketing2Header": "与朋友一起组队", + "marketing2Lead1Title": "社交生产力", + "marketing2Lead1": "协作、竞技、互动——让他人成为你的动力源泉!Habitica 深谙自我提升的核心法则:社交监督力。", + "marketing2Lead2Title": "征讨副本魔物", + "marketing2Lead2": "集结战友,征战数百副本!副本魔物考验团队极限责任感。若有人偷懒(如未刷牙),则全员需要共担伤害!", "marketing2Lead3Title": "互相挑战", - "marketing2Lead3": "挑战让你可以与朋友和陌生人竞争。挑战的获胜者会赢得特殊奖励。", - "marketing3Header": "应用程序与扩展插件", - "marketing3Lead1": "**iPhone和安卓**应用程序可让你随时随地进行操作。我们知道有时登录网站点击按钮可能会很麻烦。", - "marketing3Lead2Title": "集成", - "marketing3Lead2": "其他**第三方工具**可以将Habitica与你生活的方方面面结合起来。我们的API为像[Chrome扩展程序](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US)这样的工具提供了简便的集成功能,使你在浏览无益的网站时会损失积分,在浏览有益的网站时会获得积分。[点击此处查看更多](https://habitica.fandom.com/zh/wiki/扩展和插件)。", - "marketing4Header": "组织用途", - "marketing4Lead1": "教育是最适合游戏化的领域之一。我们都知道现在的学生有多爱玩手机和游戏;利用这种力量吧!让学生在友好的环境中相互竞争,用稀有奖品奖励良好的行为,看着他们的成绩和品行突飞猛进。", + "marketing2Lead3": "加入社区发起的挑战,获取契合您目标的精选任务清单!全力角逐冠军宝座,赢取专属宝石奖励!", + "marketing3Header": "使用 Habitica的其他方法", + "marketing3Lead1": "Android 与 iOS 设备上也可安装Habitica,随时随地完成任务。体验屡获殊荣的应用,用全新方式搞定待办事项。", + "marketing3Lead2Title": "开源社区", + "marketing3Lead2": "我们自豪地成为开源项目,诚邀专业社区用户共同添砖加瓦。您可量身定制专属 Habitica,或贡献代码改善全球玩家体验。访问 [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica)了解更多!", + "marketing4Header": "不止家务琐事", + "marketing4Lead1": "教育领域正是游戏化的绝佳舞台!打破日常课业的单调循环,让学习与游戏碰撞火花。通过Habitica,追踪作业进度、发起课堂挑战、展示学生成就。", "marketing4Lead1Title": "教育游戏化", - "marketing4Lead2": "医疗保健的花销越来越高,是时候做出一些改变了。现在有数以百计的降低花销和改善健康的应用程序,我们相信Habitica可以帮助你实现更健康的生活方式。", + "marketing4Lead2": "健康生活方式建设常令人望而生畏。Habitica 以灵活排期和弹性强度,全面追踪健身目标的各个维度,精准适配您的当前状态。在通往健康的征途中,也请享受游戏化乐趣吧!", "marketing4Lead2Title": "健康与保健游戏化", - "marketing4Lead3-1": "想让你的生活游戏化?", + "marketing4Lead3-1": "准备好享受完任务的乐趣了吗?", "marketing4Lead3-2": "有兴趣管理一个教育、健康等领域的团队?", - "marketing4Lead3Title": "将一切游戏化", + "marketing4Lead3Title": "即刻启程!", "mobileAndroid": "安卓客户端", "mobileIOS": "iOS客户端", "oldNews": "新闻", @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "例:habitrabbit或gryphon@example.com", "footerProduct": "产品", "translateHabitica": "翻译Habitica", - "incorrectResetPhrase": "请用大写字母输入 <%= magicWord %> 以重置你的账号。" + "incorrectResetPhrase": "请用大写字母输入 <%= magicWord %> 以重置你的账号。", + "marketing3Lead1Title": "Android和iOS上的应用程序", + "marketing4Lead3Button": "今日即刻启程" } diff --git a/website/common/locales/zh/gear.json b/website/common/locales/zh/gear.json index dbd9724fb4..ab4433ffe7 100644 --- a/website/common/locales/zh/gear.json +++ b/website/common/locales/zh/gear.json @@ -3190,7 +3190,7 @@ "shieldMystery202409Text": "向日葵法师法杖", "headArmoireFunnyFoolCapNotes": "这顶帽子上的铃铛能助你集中注意力,并使你的对手笑个不停。增加<%= con %>点体质。魔法宝箱:欢乐愚人套装(物品1/3)", "shieldSpecialFall2024WarriorText": "火焰之盾", - "shieldSpecialFallRogue2024Notes": "这件武器的催眠力量将通过螺旋击倒任务。增加<%= str %>点力量。2024年秋季限定版装备。", + "shieldSpecialFallRogue2024Notes": "任务本身也会被这件催眠武器的旋涡和螺旋所淹没。增加<%= str %>点力量。2024年秋季限定版装备。", "shieldSpecialFall2024HealerText": "太空之盾", "shieldMystery202409Notes": "这支法杖上闪光的红宝石从夏末的太阳中汲取了力量。没有属性加成。2024年9月订阅者物品。", "shieldArmoireSafetyFlashlightText": "安全手电筒", @@ -3204,9 +3204,9 @@ "armorSpecialWinter2025WarriorText": "驼鹿战士护甲", "weaponSpecialWinter2025HealerText": "星光魔杖", "weaponSpecialWinter2025RogueText": "雪花爆裂", - "weaponSpecialWinter2025RogueNotes": "重击炫光,碾压困难任务!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定装备。", + "weaponSpecialWinter2025RogueNotes": "重击炫光,碾压困难任务!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定版装备。", "weaponSpecialWinter2025WarriorNotes": "神威巨斧配至尊驼鹿!你将势不可挡!力量属性提升<%= str %>点。2024-2025冬季限定装备。", - "weaponSpecialWinter2025HealerNotes": "登顶需要更多的火花和一刻闪耀星星!你将势不可挡!智力属性提升 <%= int %>。2024-2025 年冬季限定装备。", + "weaponSpecialWinter2025HealerNotes": "登顶需要更多光芒和一颗璀璨星星!你将无往不胜!智力属性提升 <%= int %>。2024-2025 年冬季限定版装备。", "weaponSpecialFall2024RogueNotes": "受此魅惑武器的影响,任务将暂时冻结。力量属性提升<%= str %>点。2024秋季限定装备。", "weaponArmoireStormKnightAxeText": "风暴骑士战斧", "weaponArmoireStormKnightAxeNotes": "凝聚雷霆之怒,挥出霹雳一击!力量属性提升<%= str %>点。魔法宝箱:风暴骑士套装(3/3)", @@ -3215,7 +3215,7 @@ "armorSpecialWinter2025HealerNotes": "在任务途中闪烁前行。但需当心——一盏熄灭,尽数皆暗。体质属性提升<%= con %>点。2024-2025冬季限定装备。", "armorSpecialSpring2025WarriorText": "旭日护甲", "armorSpecialSpring2025RogueNotes": "这件华美斗篷缀有特殊晶石,蕴藏唯有你知晓的秘密力量。感知属性提升<%= per %>点。2025春季限定装备。", - "weaponSpecialSpring2025HealerNotes": "轻挥即可召唤传粉精灵助阵冒险。智力属性提升<%= int %>点。2025春季限定装备。", + "weaponSpecialSpring2025HealerNotes": "轻挥即可召唤传粉精灵助阵冒险。智力属性提升<%= int %>点。2025春季限定版装备。", "weaponArmoireGildedKnightsSpearText": "镀金骑士长枪", "armorSpecialWinter2025RogueText": "雪境装扮", "headSpecialSpring2025RogueText": "晶芒帽子", @@ -3223,12 +3223,12 @@ "armorSpecialWinter2025MageNotes": "身着此袍起舞,让奇思、妙想、魔幻与辉煌常伴左右。智力属性提升<%= int %>点。2024-2025冬季限定装备。", "armorSpecialSpring2025MageNotes": "这件华彩流溢的制服兼具隐秘特性,助你悄然攻克艰巨任务。智力属性提升<%= int %>点。2025春季限定装备。", "weaponSpecialSpring2025WarriorText": "旭日弯刀", - "weaponSpecialSpring2025WarriorNotes": "挥刃可裁花茎制花束,亦可斩棘开路完成任务。力量属性提升<%= str %>点。2025春季限定装备。", + "weaponSpecialSpring2025WarriorNotes": "挥刃可裁花茎制花束,亦可斩棘开路完成任务。力量属性提升<%= str %>点。2025春季限定版装备。", "weaponSpecialSpring2025RogueText": "晶刺链锤", - "weaponSpecialSpring2025RogueNotes": "一击挥扫,破除一切达成目标之路的障碍。力量属性提升<%= str %>点。2025春季限定装备。", + "weaponSpecialSpring2025RogueNotes": "一击挥扫,破除一切达成目标之路的障碍。力量属性提升<%= str %>点。2025春季限定版装备。", "weaponSpecialSpring2025HealerText": "缅栀曲杖", "weaponSpecialSpring2025MageText": "螳螂法杖", - "weaponSpecialSpring2025MageNotes": "挥斩间操纵元素魔法,掌控周边环境。抢占先机,跃进突袭!智力属性提升<%= int %>点,感知属性提升<%= per %>点。2025春季限定装备。", + "weaponSpecialSpring2025MageNotes": "挥斩间操纵元素魔法,掌控周边环境。抢占先机,跃进突袭!智力属性提升<%= int %>点,感知属性提升<%= per %>点。2025春季限定版装备。", "armorSpecialWinter2025WarriorNotes": "身披此甲,众人皆当退避三舍。体质属性提升<%= con %>点。2024-2025冬季限定装备。", "armorSpecialWinter2025MageText": "极光斗篷", "armorSpecialSpring2025WarriorNotes": "这副耀眼护甲蕴含春日晴空般的绚烂色彩。体质属性提升<%= con %>点。2024-2025冬季限定装备。", @@ -3277,7 +3277,7 @@ "headMystery202411Text": "怒发冲冠头盔", "headArmoireStormKnightHelmNotes": "鹿角引雷,荡寇摧城!体质属性提升<%= con %>点。魔法宝箱:风暴骑士套装(1/3)", "headMystery202502Text": "真心小丑帽", - "headMystery202502Notes": "这顶活泼可爱的小帽子一定会让所有见到你的人都感到高兴!没有属性加成。2025年2月订阅者限定外观。", + "headMystery202502Notes": "这顶活泼可爱的小帽子一定会让所有见到你的人都感到高兴!没有属性加成。2025年2月订阅者限定物品。", "headArmoireStormKnightHelmText": "风暴骑士头盔", "headSpecialWinter2025HealerNotes": "无需费心整理——纷乱灯串自成时尚帽型!智力属性提升<%= int %>点。2024-2025冬季限定装备。", "headMystery202503Text": "翠玉巨像发型", @@ -3293,5 +3293,77 @@ "headArmoireFestiveHelperHatNotes": "节日小贴士第27条:常备助手帽以备不时之需!超大帽檐甚至能暗藏应急玩具。智力属性提升<%= int %>点。魔法宝箱:节日助手套装(1/2)", "headArmoireFancyFloralHatText": "华饰花冠", "headArmoireFancyFloralHatNotes": "此帽缀满瑰丽花卉与精致褶边扣饰,令人目不暇接。智力属性提升<%= int %>点。魔法宝箱:华饰花艺套装(1/2)。", - "weaponSpecialSummer2025WarriorNotes": "谁也不知道它已经存在多久了,但未来它仍然能和你共同克服许多艰难的挑战。增加<%= str %>点力量。2025夏季限定装备。" + "weaponSpecialSummer2025WarriorNotes": "谁也不知道它已经存在多久了,但未来它仍然能和你共同克服许多艰难的挑战。增加<%= str %>点力量。2025夏季限定版装备。", + "weaponSpecialSummer2025RogueText": "乌贼触手", + "weaponSpecialSummer2025RogueNotes": "这个触手会紧紧抓住你的目标,因此在完成任务时你也不会失去动力。增加<%= str %>点力量。2025夏季限定版装备。", + "weaponSpecialSummer2025HealerText": "海天使翼桨", + "weaponSpecialSummer2025MageText": "枝珊瑚", + "weaponSpecialSummer2025MageNotes": "发挥你的天赋和技能,多栖发展,来应对不同的任务。增加<%= int %>点智力和<%= per %>点感知。2025夏季限定版装备", + "weaponSpecialSummer2025WarriorText": "扇贝枪", + "weaponSpecialSummer2025HealerNotes": "持桨前进时划出8字形轨迹,助你任务有成。增加<%= int %>点智力。2025夏季限定版装备。", + "weaponArmoireBeekeepersSmokerText": "喷烟器", + "armorSpecialSummer2025WarriorText": "扇贝护甲", + "armorSpecialSummer2025RogueText": "乌贼隐服", + "armorSpecialSummer2025RogueNotes": "这件衣服不仅能随意变色,还能射出一团墨水。干扰还是隐藏,选择权在你手里!增加<%= per %>点感知。2025夏季限定装备。", + "armorSpecialSummer2025HealerText": "海天使泳衣", + "armorSpecialSummer2025HealerNotes": "这件泳衣不仅能让你优雅动人,更能让你流畅如梭。随波逐流还是自在畅游,由你选择!增加<%= con %>点体质。2025夏季限定版装备。", + "weaponArmoireBeekeepersSmokerNotes": "用这个让你的蜜蜂安静下来,这样就能取得蜂蜜了。蜜蜂不会计较的。坦诚地说,我们都会时不时花些时间来冷静一下。增加<%= int %>点智力。魔法宝箱:养蜂人套装(3/4)", + "armorSpecialSummer2025WarriorNotes": "这件护甲不仅让你强悍,更使你迅敏。战斗或逃跑,选择权在你手中!增加<%= con %>点体质。2025夏季限定版装备。", + "armorSpecialSummer2025MageText": "仙女濑鱼泳衣", + "armorSpecialSummer2025MageNotes": "这套泳衣不仅色彩绚丽,还能让你在水中优美地滑行。游泳还是跳舞,由你决定!增加<%= int %>点智力。2025夏季限定版装备。", + "armorArmoireBeekeepersSuitText": "养蜂衣", + "headArmoireBeekeepersHatText": "养蜂帽", + "headArmoireBeekeepersHatNotes": "照顾嗡嗡作响的伙伴时,注意保护好你的脸。增加<%= per %>点感知。魔法宝箱:养蜂人套装(1/4)", + "shieldArmoireBeekeepersHiveText": "蜂巢", + "backMystery202505Text": "翱翔燕尾翼", + "backMystery202505Notes": "穿上这双符合空气动力学的机翼,展翅翱翔,赢得荣誉。没有属性加成。2025年5月订阅者物品。", + "backMystery202506Text": "太阳光环", + "backMystery202506Notes": "在您处理日常事务时,带来温暖的光芒。没有属性加成。2025年6月订阅者物品。", + "shieldArmoireBeekeepersHiveNotes": "蜂巢既是家,也是工作场所。你可能需要和你的蜜蜂谈谈如何平衡工作与生活。魔法宝箱:养蜂人套装(4/4)", + "armorArmoireBeekeepersSuitNotes": "照顾忙碌的蜜蜂时,注意自身安全。增加<%= con %>点体质。魔法宝箱:养蜂人套装(2/4)", + "headSpecialSummer2025HealerNotes": "恭喜你,现在你是一只海蝴蝶。智力增加<%=int%>。2025夏季限量版装备。", + "headSpecialSummer2025HealerText": "海天使头盔", + "headSpecialSummer2025WarriorText": "扇贝头盔", + "headArmoireGildedKnightsHelmText": "镀金骑士头盔", + "headSpecialSummer2025WarriorNotes": "这款头盔坚不可摧,非常尖锐的,甚至可以保护你免受海星的伤害。增加<%=str%>力量。限量版夏季2025装备。", + "headSpecialSummer2025RogueText": "鱿鱼面具", + "headSpecialSummer2025MageText": "仙女濑鱼头饰", + "headSpecialSummer2025MageNotes": "所有的人都会被你的鳍随着水流移动的方式所迷惑。提高感知力<%=per%>。限量版夏季2025装备。", + "headArmoireGildedKnightsHelmNotes": "在任何战斗的黑暗中都像太阳一样闪亮。增加体质<%=con%>。魔法宝箱:镀金骑士套装(1/3)", + "headArmoireSillyOrangeTophatNotes": "和南瓜派发型很配。增加力量和体质各<%=attrs%>。魔法宝箱:愚蠢的燕尾服套装(2/2)。", + "headSpecialSummer2025RogueNotes": "当你戴上这个面具时,你的视野会得到提升。提高感知力<%=per%>。限量版夏季2025装备。", + "headArmoireSillyOrangeTophatText": "愚蠢的橙色帽子", + "headArmoireSillierBlueTophatText": "更傻的蓝色高顶礼帽", + "shieldSpecialSpring2025WarriorText": "Sunburst Shield", + "shieldSpecialSpring2025WarriorNotes": "当阳光正好照在这面盾牌上时,你可以暂时使敌人失明。抓住机会,向前冲!增加体质 <%=con%>。限量版。2025年春季装备。", + "shieldSpecialWinter2025WarriorNotes": "用这个像麋鹿一样坚固的盾牌挡住任何不必要的干扰。增加体质<%= con %>点。2024-2025冬季限量版装备。", + "headArmoireSillierBlueTophatNotes": "一点优雅,一点精致。力量和体质各增加<%= attrs %>点。魔法衣橱:更傻气的燕尾服套装(第2件物品,共2件)。", + "shieldSpecialWinter2025HealerText": "完美的礼物", + "shieldSpecialWinter2025HealerNotes": "完美的礼物正等着被打开。里面会是什么呢?增加体质 <%=con%>。限量版冬季2024-2025装备。", + "shieldSpecialSpring2025RogueText": "晶刺链锤", + "shieldSpecialSpring2025RogueNotes": "执此晶器可洞见高效未来,顺势而为,勇往直前!力量属性提升<%= str %>点。2025年春季限定版装备。", + "shieldSpecialSpring2025HealerText": "缅栀花盾", + "shieldSpecialSpring2025HealerNotes": "执此花盾可汇聚善意,亦能驱散杂念。顺势而为,勇往直前!体质属性提升<%= con %>点。2025年春季限定版装备。", + "shieldSpecialSummer2025WarriorText": "扇贝甲盾", + "shieldSpecialSummer2025WarriorNotes": "华彩之下暗藏锋锐棱脊——劲敌当心!体质属性提升<%= con %>点。2025年夏季限定版装备。", + "shieldSpecialSummer2025RogueText": "鱿鱼触手", + "shieldSpecialSummer2025RogueNotes": "腕足看似弱柳扶风,实则吸盘紧握——劲敌当心!力量属性提升<%= str %>点。2025年夏季限定版装备。", + "shieldSpecialSummer2025HealerText": "海天使护盾", + "shieldSpecialSummer2025HealerNotes": "此盾看似简单,实则剧毒——劲敌当心。体质属性提升<%= str %>点。2025年夏季限定版装备。", + "shieldMystery202501Notes": "为任意户外精致披上闪烁钻石霜衣。没有属性加成。2025年1月订阅者专属物品。", + "shieldMystery202501Text": "霜缚者法杖", + "shieldMystery202502Notes": "情人节乃至每日,愿您心情如气球般轻盈。没有属性加成。2025年2月订阅者专属物品。", + "shieldArmoireFancyFloralFanNotes": "以华美花缎精制的一流团扇,成就绝伦风尚收官之笔。感知属性提升<%= per %>点。魔法宝箱:华饰花艺套装(2/2)。", + "shieldMystery202506Text": "耀阳护盾", + "shieldMystery202506Notes": "所至之处驱散阴霾,遍洒温暖欢欣之光。没有属性加成。2025年6月订阅者专属物品。", + "shieldArmoireSpringPetalUchiwaText": "春瓣团扇", + "shieldArmoireSpringPetalUchiwaNotes": "春暖时节执此雅扇,花瓣翻飞间为您唤起专属微风。智力与感知属性各提升 <%= attrs %>点。魔法宝箱收藏:春瓣套装(2/2)。", + "shieldMystery202502Text": "真心小丑气球", + "shieldArmoireFancyFloralFanText": "华饰花扇", + "bodyMystery202411Text": "芒刺护肩", + "headAccessoryMystery202505Text": "飞舞凤蝶触角", + "headAccessoryMystery202505Notes": "以此敏锐感官,精准探测繁花盛放之地。没有属性加成。2025年5月订阅者专属物品。", + "eyewearMystery202503Notes": "凛冽眸光威慑一切挑战者!没有属性加成。2025年3月订阅者专属物品。", + "eyewearMystery202503Text": "翠玉战神之眼", + "bodyMystery202411Notes": "肩甲尖刺森然,助您为待办清单冲锋陷阵。没有属性加成。2024年11月订阅者专属物品。" } diff --git a/website/common/locales/zh/groups.json b/website/common/locales/zh/groups.json index 32e2295106..33c3875420 100644 --- a/website/common/locales/zh/groups.json +++ b/website/common/locales/zh/groups.json @@ -239,9 +239,9 @@ "privateGuild": "私人团队", "charactersRemaining": "<%= characters %>剩余字符", "guildSummary": "概要", - "guildSummaryPlaceholder": "为你的团队撰写简短的介绍。你的团队目标是什么?你希望成员们如何互动?", + "guildSummaryPlaceholder": "为你的团队撰写简短的介绍。团队主要目标是什么?成员们都会做些什么?", "groupDescription": "描述", - "guildDescriptionPlaceholder": "在这里补充更多关于你的团队的细节以便成员加深理解。建议、链接,鼓励的内容都放在这里吧!", + "guildDescriptionPlaceholder": "在这里补充更多关于你的团队的细节以便成员加深理解。实用建议、有帮助的链接、鼓励的内容都放在这里吧!", "markdownFormattingHelp": "[Markdown格式帮助](https://habitica.fandom.com/zh/wiki/Markdown格式帮助)", "partyDescriptionPlaceholder": "这是我们队伍的简介。介绍了我们是一个怎样的队伍。阅读简介后如果你想更加深入的了解我们,那就一起组队吧。", "guildGemCostInfo": "花费宝石促进高质量的公会,宝石会转移到您的公会的银行。", @@ -288,14 +288,14 @@ "worldBossBullet4": "定期访问酒馆,查看世界Boss的进度和怒气攻击", "worldBoss": "世界Boss", "groupPlanTitle": "想要为你的成员解锁更多内容?", - "groupPlanDesc": "需要安排家中杂务或小组课题?Habitica的团队方案将提供任务合作功能以及专门的交流区以帮助你与团队成员保持专注。", + "groupPlanDesc": "需要安排家中杂务或小组课题?Habitica的团队计划将提供任务合作功能以及专门的交流区以帮助你与团队成员保持动力。", "billedMonthly": "*按月捐助收费", "teamBasedTasksList": "共有任务面板", "teamBasedTasksListDesc": "团队成员可以在同一个任务面板上进行操作以确保其他成员及时了解最新情况。在共有任务面板上完成任务或将其复制至你的个人任务中以便随时操作。", "groupManagementControls": "灵活责任制", - "groupManagementControlsDesc": "将任务指派给成员以分配责任,或开放任务作为挑战看看谁先完成。团队成员可以通过查看任务状态来确认其他成员的最新进程。", + "groupManagementControlsDesc": "将任务分配给任意成员以分担责任,或将任务作为挑战看看谁先完成。团队成员可以通过查看任务状态来确认彼此的进度。", "inGameBenefits": "全部额外奖励!", - "inGameBenefitsDesc": "团队成员将获得专属的鹿角兔坐骑,并享有订阅者额外奖励,包括独特的月度订阅者装备套装以及使用金币兑换宝石的功能。", + "inGameBenefitsDesc": "团队成员将获得专属的鹿角兔坐骑,并享有订阅者额外奖励,包括独特的订阅者装备套装以及使用金币兑换宝石的功能。", "letsMakeAccount": "首先,来注册一个账号", "nameYourGroup": "然后,为你的团队命名", "exampleGroupName": "例如:复仇者学院", @@ -342,7 +342,7 @@ "chooseTeamMember": "查找一位团队成员", "unassigned": "未分配", "onlyPrivateGuildsCanUpgrade": "只有私人公会可以升级为团队计划。", - "bannedWordsAllowedDetail": "此选项生效时,将允许在该团队中使用违禁词语。", + "bannedWordsAllowedDetail": "此选项生效时,允许在该团队中使用违禁词。", "bannedWordsAllowed": "允许屏蔽字符", "languageSettings": "语言设置", "cannotRemoveQuestOwner": "无法移除当前任务的参与者。请先中止该任务。", @@ -427,6 +427,6 @@ "createGroupToday": "立即创建你的团队!", "createGroupTitle": "创建团队", "readyToUpgrade": "准备好升级了?", - "checkGroupPlanFAQ": "前往团队方案常见问题以了解任务合作功能的最佳用法。", + "checkGroupPlanFAQ": "参阅团队方案常见问题以了解任务合作功能的最佳用法。", "messageCopiedToClipboard": "信息已复制到剪贴板。" } diff --git a/website/common/locales/zh/limited.json b/website/common/locales/zh/limited.json index 9d7a466c9b..a13a3f24f1 100644 --- a/website/common/locales/zh/limited.json +++ b/website/common/locales/zh/limited.json @@ -130,7 +130,7 @@ "winter2019PyrotechnicSet": "烟花(法师)", "winter2019WinterStarSet": "冬日之星(医者)", "winter2019PoinsettiaSet": "圣诞花(盗贼)", - "winterPromoGiftHeader": "赠送其他用户一份订阅服务的同时,您自己也能同样免费获得一份订阅!", + "winterPromoGiftHeader": "赠送其他用户一份订阅的同时,您自己也能同样免费获得一份订阅!", "winterPromoGiftDetails1": "本活动持续到1月6日,当你向他人赠送一份订阅后,自己也将免费获得相同的订阅!", "winterPromoGiftDetails2": "请注意,如果你或你的礼物接收人已经拥有一份订阅,赠送的订阅将增加至结存订阅,只有在当前订阅被取消或过期后才会生效。非常感谢你的支持!<3", "discountBundle": "一批", @@ -274,5 +274,9 @@ "spring2025MantisMageSet": "螳螂法师套装", "spring2025CrystalPointRogueSet": "晶芒盗贼套装", "spring2025PlumeriaHealerSet": "缅栀医者套装", - "winter2025StringLightsHealerSet": "流光医者套装" + "winter2025StringLightsHealerSet": "流光医者套装", + "summer2025ScallopWarriorSet": "扇贝战士套装", + "summer2025SeaAngelHealerSet": "海天使医者套装", + "summer2025FairyWrasseMageSet": "仙女濑鱼法师套装", + "summer2025SquidRogueSet": "乌贼盗贼套装" } diff --git a/website/common/locales/zh/quests.json b/website/common/locales/zh/quests.json index fd7aee33af..52f8368ab9 100644 --- a/website/common/locales/zh/quests.json +++ b/website/common/locales/zh/quests.json @@ -2,7 +2,7 @@ "quests": "副本", "quest": "副本", "petQuests": "宠物与坐骑副本", - "unlockableQuests": "未解锁的副本", + "unlockableQuests": "可解锁的副本", "goldQuests": "职业大师副本线", "questDetails": "副本详情", "questDetailsTitle": "副本详情", diff --git a/website/common/locales/zh/questscontent.json b/website/common/locales/zh/questscontent.json index f6ba23ecfd..0561810191 100644 --- a/website/common/locales/zh/questscontent.json +++ b/website/common/locales/zh/questscontent.json @@ -519,7 +519,7 @@ "questGroupLostMasterclasser": "职业大师之谜", "questUnlockLostMasterclasser": "要解锁此副本,需要先完成以下副本线的最终副本:“拖延城之困”、“迷雾飞城之乱”、“坚忍大草原之灾”和“任务森林中的恐怖”。", "questLostMasterclasser1Text": "职业大师之谜,第1部:字里行间", - "questLostMasterclasser1Notes": "@beffymaroo 和@Lemoness 突然把你叫到习惯大厅。当你到达,惊讶地发现昏暗的晨光中,Habitica的4位大师鉴别者已在等待。即使是“快乐收获者”也挂着一副严峻的表情。

“哦豁,你来了,”愚人说。“要不是真的发生了这么可怕的事情,我们也不会来打扰你休息的——”

“帮我们调查一下这阵子恶灵附身的事件吧,”冰川夫人打断了他,“所有的受害者都说是个叫Tzina的人干的。”

很明显,这么简单粗暴的总结冒犯到了愚人:“你不应当浓缩如此精彩的故事。我的雷暴实验呢?我可打算演讲一通呢!”

“咱现在赶时间,”冰川夫人回怼,“可拉倒吧,我的猛犸象被那你没完没了的破实验浇了个湿透。”

“那位战士大师说的对,”魟鱼国王说道,“时间宝贵。你能帮助我们吗?”

你点了点头,他挥挥手便开启了一个传送阵,一间水下的屋子展露于眼前。“和我一起游往拖拉城,前往我的图书馆看看能不能从文献里找到线索。”看到你一脸懵,他解释说:“别担心,早在拖拉城下沉之前,书卷就附过魔了。那些书不会被水给弄糊。”他挤了挤眼:“不像冰川夫人的猛犸象。”

“魟鱼,我听见你在背后说我坏话了。”

你跟在法师大师身后潜下水底,双腿神奇地变成了鱼鳍。虽然你的身躯灵活轻快,但看到成千上万的书架之后,你的心不由得沉了下去。趁早开工为妙……", + "questLostMasterclasser1Notes": "@beffymaroo 和@Lemoness 突然把你叫到习惯大厅。当你到达,惊讶地发现昏暗的晨光中,Habitica的4位职业大师已在等待。即使是“快乐收获者”也挂着一副严峻的表情。

“哦豁,你来了,”愚人说。“要不是真的发生了这么可怕的事情,我们也不会来打扰你休息的——”

“帮我们调查一下这阵子恶灵附身的事件吧,”冰川夫人打断了他,“所有的受害者都说是个叫Tzina的人干的。”

很明显,这么简单粗暴的总结冒犯到了愚人:“你不应当浓缩如此精彩的故事。我的雷暴实验呢?我可打算演讲一通呢!”

“咱现在赶时间,”冰川夫人回怼,“可拉倒吧,我的猛犸象被那你没完没了的破实验浇了个湿透。”

“那位战士大师说的对,”魟鱼国王说道,“时间宝贵。你能帮助我们吗?”

你点了点头,他挥挥手便开启了一个传送阵,一间水下的屋子展露于眼前。“和我一起游往拖拉城,前往我的图书馆看看能不能从文献里找到线索。”看到你一脸懵,他解释说:“别担心,早在拖拉城下沉之前,书卷就附过魔了。那些书不会被水给弄糊。”他挤了挤眼:“不像冰川夫人的猛犸象。”

“魟鱼,我听见你在背后说我坏话了。”

你跟在法师大师身后潜下水底,双腿神奇地变成了鱼鳍。虽然你的身躯灵活轻快,但看到成千上万的书架之后,你的心不由得沉了下去。趁早开工为妙……", "questLostMasterclasser1Completion": "连续翻阅了几小时,你们仍然毫无头绪。

“这简直是不可能完成的任务,我们连一点相关的内容都找不到,”图书管理员@Tuqjoi说道,助手@stefalupagus挫败地点了点头。

魟鱼国王眯了眯眼。“不可能……”他说。“有意为之。”他手上的水泛起微光,几本书抖动起来。“有什么东西在隐藏信息,”他说。“不是静态咒语,而是某种拥有自己意志的东西。某种……有生命力的东西。”他从桌子边游开。“快乐收获者必须知道这件事。拿好上路的饭。”", "questLostMasterclasser1CollectAncientTomes": "古籍", "questLostMasterclasser1CollectForbiddenTomes": "禁书", @@ -768,7 +768,7 @@ "questGiraffeBoss": "“装备长颈鹿”", "questGiraffeDropGiraffeEgg": "长颈鹿(宠物蛋)", "questDogUnlockText": "在商店中解锁狗宠物蛋的购买许可。", - "questGiraffeText": "武装长颈鹿", + "questGiraffeText": "装备长颈鹿", "questGiraffeUnlockText": "在市场可以购买长颈鹿宠物蛋了。", "questChameleonUnlockText": "可以从商店购买变色龙宠物蛋了", "questGiraffeCompletion": "在帮“装备长颈鹿”简单整理了他的收藏后,你们俩都感觉元气满满!

他抓起吉他和一本入门练习曲谱,随手拨弄了几下琴弦。“哪怕只是往正确的方向迈出一小步,感觉都很棒!谢啦伙计!这些送你——听说你也是个宠物控?这几个小家伙肯定能让你家更热闹!”", diff --git a/website/common/locales/zh/subscriber.json b/website/common/locales/zh/subscriber.json index e43faf13e9..2d5dee2ab9 100644 --- a/website/common/locales/zh/subscriber.json +++ b/website/common/locales/zh/subscriber.json @@ -121,10 +121,10 @@ "gemBenefit3": "掉落宠物蛋的精彩任务链。", "gemBenefit4": "重置角色属性点数及更改角色职业。", "subscriptionBenefit1": "最多可用金币购买50颗宝石,在市场上购买副本,自定义装扮,宠物以及更多其他好物!", - "subscriptionBenefit3": "在Habitica发现更多物品,每日享受双倍物品掉落上限。", - "subscriptionBenefit4": "每月为你提供独一无二的装备,装饰你的头像。", - "subscriptionBenefit5": "首次订阅可获得皇家紫色鹿角兔宠物。", - "subscriptionBenefit6": "获得可以在时空旅行者商店购买物品的神秘沙漏!", + "subscriptionBenefit3": "在Habitica发现更多物品,每日享受双倍物品掉落上限!", + "subscriptionBenefit4": "穿上最新的独特装备 。立即订阅 ,即可获得<%=月%> 的<%= currentMysterySetName%>!", + "subscriptionBenefit5": "现在订阅即可获得独特的皇家紫色鹿角兔宠物!", + "subscriptionBenefit6": "每月可获得1个神秘沙漏,在时空旅行者商店使用,不要错过任何物品 !", "purchaseAll": "购买套装", "gemsRemaining": "剩余", "notEnoughGemsToBuy": "本月可购买宝石已达上限。每月前3天会刷新库存。", @@ -210,8 +210,8 @@ "mysterySet202211": "电术士套装", "mysterySet202212": "冰川守护者套装", "mysterySet202301": "英勇狡狐套装", - "haveNonRecurringSub": "您有一个临时的赠送订阅。", - "switchToRecurring": "是否转为定期订阅?", + "haveNonRecurringSub": "您有一个赠品订阅,不会自动续订。", + "switchToRecurring": "是否转为自动续订订阅?", "subscriptionCreditConversion": "现在开始新的订阅,会结存当前剩余的订阅。结存的订阅将在定期订阅取消后生效。", "continueGiftSubBenefits": "想要继续享受福利吗?您可以在获赠的订阅到期之前开始新的订阅,以继续享受您的福利。", "mysterySet202302": "骗子虎斑猫套装", @@ -244,22 +244,25 @@ "monthlyGemsLabel": "每月宝石", "popular": "热门", "mysterySet202504": "深奥雪怪套装", - "unlockNGems": "在市场中每月解锁购买 <%= count %> 宝石", + "unlockNGems": "每月解锁购买 <%= count %> 宝石资格", "mysterySet202503": "翡翠巨像套装", "maxGemCap": "即刻解锁宝石容量上限", - "earn2Gems": "订阅期间每月+2宝石", + "earn2Gems": "订阅期间每月获得+2宝石", "mysterySet202502": "衷心小丑套装", "subscribeTo": "订阅", "resubscribeToPickUp": "重新订阅即可继续您的旅程!", - "recurringMonthly": "每月自动续费", - "recurringNMonthly": "每 <%= length %>月自动续费", + "recurringMonthly": "每月重复", + "recurringNMonthly": "每<%= length %> 月重复", "giftSubscriptionLeadText": "请在下方选择要赠送的订阅套餐!本次购买不会自动续订。", "oneMonthGift": "单月订阅", "nMonthsGift": "<%= months %> 月订阅", "subscribeAgainContinueHourglasses": "请续订以继续领取神秘沙漏", - "immediate12Hourglasses": "开启首次12个月的订阅,即刻获得12个神秘沙漏!", - "subscriptionChangeAnnouncement": "订阅福利及发放方式将于11月19日调整。 <%= linkStart %>点击此处了解详情。", + "immediate12Hourglasses": "首次12个月订阅后,立即获得12个神秘沙漏!", + "subscriptionChangeAnnouncement": "订阅额外奖励及其发放方式将于11月19日调整。 <%= linkStart %>点击此处了解详情。", "selectPayment": "请选择付费方式", "unlockNGemsGift": "将每月在商店中解锁 <%= count %> 颗宝石", - "earn2GemsGift": "每月将获得订阅的2颗宝石" + "earn2GemsGift": "每月将获得订阅的2颗宝石", + "maxGemCapGift": "他们将拥有最高的 宝石上限 ", + "mysterySet202505": "翱翔燕尾服套装", + "mysterySet202506": "太阳辉光套装" } diff --git a/website/common/locales/zh_TW/backgrounds.json b/website/common/locales/zh_TW/backgrounds.json index 4e0c81b362..4b770ef8f7 100644 --- a/website/common/locales/zh_TW/backgrounds.json +++ b/website/common/locales/zh_TW/backgrounds.json @@ -772,5 +772,18 @@ "backgrounds042023": "第107組:2023年4月發布", "backgroundLeafyTreeTunnelNotes": "漫步在落葉隧道。", "backgroundLeafyTreeTunnelText": "落葉隧道", - "backgroundSpringtimeShowerText": "春日沐浴" + "backgroundSpringtimeShowerText": "春日沐浴", + "backgroundUnderWisteriaText": "紫藤花下", + "backgroundUnderWisteriaNotes": "在紫藤花下休息。", + "backgroundSpringtimeShowerNotes": "欣賞花香四溢的春日沐浴。", + "backgrounds052023": "第108組:2023年5月發佈", + "backgroundInAPaintingText": "在畫中", + "backgroundInAPaintingNotes": "在繪畫中享受創意追求。", + "backgroundFlyingOverHedgeMazeText": "飛越樹籬迷宮", + "backgroundFlyingOverHedgeMazeNotes": "在飛越樹籬迷宮時驚嘆不已。", + "backgroundCretaceousForestText": "白堊紀森林", + "backgroundCretaceousForestNotes": "欣賞白堊紀森林中的古老的綠色植物。", + "backgrounds062023": "第109組:2023年6月發布", + "backgroundInAnAquariumText": "在水族箱中", + "backgroundInAnAquariumNotes": "在水族箱中與魚兒一起平靜地游泳。" } diff --git a/website/common/locales/zh_TW/content.json b/website/common/locales/zh_TW/content.json index daf9cc55d8..28693814e3 100644 --- a/website/common/locales/zh_TW/content.json +++ b/website/common/locales/zh_TW/content.json @@ -372,5 +372,15 @@ "hatchingPotionOnyx": "縞瑪瑙", "hatchingPotionPorcelain": "瓷器", "hatchingPotionVirtualPet": "電子寵物", - "hatchingPotionPinkMarble": "粉色大理石" + "hatchingPotionPinkMarble": "粉色大理石", + "questEggRaccoonText": "浣熊", + "questEggRaccoonMountText": "浣熊", + "questEggGiraffeText": "長頸鹿", + "questEggGiraffeMountText": "長頸鹿", + "questEggGiraffeAdjective": "一個高聳的", + "questEggChameleonText": "變色龍", + "questEggChameleonMountText": "變色龍", + "questEggChameleonAdjective": "一個混亂的", + "questEggCrabText": "螃蟹", + "questEggCrabMountText": "螃蟹" } From fe98d9485df98185bb38ed4070397718403906e3 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Tue, 17 Jun 2025 13:06:00 -0500 Subject: [PATCH 08/38] 5.36.6 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e79c3c94e1..4841fd7212 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "habitica", - "version": "5.36.5", + "version": "5.36.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "habitica", - "version": "5.36.5", + "version": "5.36.6", "hasInstallScript": true, "dependencies": { "@babel/core": "^7.22.10", diff --git a/package.json b/package.json index ac9b965044..5db16dbacb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.36.5", + "version": "5.36.6", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.10", From 823b339d27ea378e25cea2520be9261e973815b1 Mon Sep 17 00:00:00 2001 From: Natalie <78037386+CuriousMagpie@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:34:57 -0400 Subject: [PATCH 09/38] chore: July 2025 content build (#15449) * chore: July 2025 content build * chore: add release dates to armoire * fix(sprites): correct Cryptid typo * fix(grammar): missing comma --------- Co-authored-by: Kalista Payne --- habitica-images | 2 +- .../assets/css/sprites/spritesmith-main.css | 35 +++++++++++++++++++ website/common/locales/en/backgrounds.json | 4 +++ website/common/locales/en/gear.json | 10 ++++++ website/common/locales/en/subscriber.json | 1 + .../script/content/appearance/backgrounds.js | 3 ++ .../script/content/constants/releaseDates.js | 1 + .../script/content/gear/sets/armoire.js | 15 ++++++++ .../script/content/gear/sets/mystery.js | 2 ++ 9 files changed, 72 insertions(+), 1 deletion(-) diff --git a/habitica-images b/habitica-images index cf18a04339..8b0cae9e63 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit cf18a0433939aa3d41b87c5fee9a07083f7309fd +Subproject commit 8b0cae9e63a901a2a426924a082e27a64765ba36 diff --git a/website/client/src/assets/css/sprites/spritesmith-main.css b/website/client/src/assets/css/sprites/spritesmith-main.css index 468c678286..4480a8f538 100644 --- a/website/client/src/assets/css/sprites/spritesmith-main.css +++ b/website/client/src/assets/css/sprites/spritesmith-main.css @@ -2001,6 +2001,11 @@ width: 141px; height: 147px; } +.background_sirens_lair { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_sirens_lair.png'); + width: 141px; + height: 147px; +} .background_slimy_swamp { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/background_slimy_swamp.png'); width: 141px; @@ -29685,6 +29690,11 @@ width: 114px; height: 90px; } +.broad_armor_armoire_flyFishingWaders { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_flyFishingWaders.png'); + width: 114px; + height: 90px; +} .broad_armor_armoire_funnyFoolCostume { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_armoire_funnyFoolCostume.png'); width: 114px; @@ -30300,6 +30310,11 @@ width: 114px; height: 90px; } +.head_armoire_flyFishingHat { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_flyFishingHat.png'); + width: 114px; + height: 90px; +} .head_armoire_frostedHelm { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_armoire_frostedHelm.png'); width: 114px; @@ -30765,6 +30780,11 @@ width: 114px; height: 90px; } +.shield_armoire_flyFishingRod { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_flyFishingRod.png'); + width: 114px; + height: 90px; +} .shield_armoire_gardenersSpade { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/shield_armoire_gardenersSpade.png'); width: 114px; @@ -31245,6 +31265,11 @@ width: 114px; height: 90px; } +.slim_armor_armoire_flyFishingWaders { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_flyFishingWaders.png'); + width: 114px; + height: 90px; +} .slim_armor_armoire_funnyFoolCostume { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/slim_armor_armoire_funnyFoolCostume.png'); width: 114px; @@ -35600,6 +35625,16 @@ width: 114px; height: 90px; } +.back_mystery_202507 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/back_mystery_202507.png'); + width: 117px; + height: 120px; +} +.head_mystery_202507 { + background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/head_mystery_202507.png'); + width: 114px; + height: 90px; +} .broad_armor_mystery_301404 { background-image: url('https://habitica-assets.s3.amazonaws.com/mobileApp/images/broad_armor_mystery_301404.png'); width: 90px; diff --git a/website/common/locales/en/backgrounds.json b/website/common/locales/en/backgrounds.json index 8ddc4cbbcd..f8d1b582ff 100644 --- a/website/common/locales/en/backgrounds.json +++ b/website/common/locales/en/backgrounds.json @@ -1031,6 +1031,10 @@ "backgroundSummerSeashoreText": "Summer Seashore", "backgroundSummerSeashoreNotes": "Catch a wave at a Summer Seashore.", + "backgrounds072025": "SET 134: Released July 2025", + "backgroundSirensLairText": "Siren's Lair", + "backgroundSirensLairNotes": "Dare to dive into a Siren’s Lair.", + "timeTravelBackgrounds": "Steampunk Backgrounds", "backgroundAirshipText": "Airship", "backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.", diff --git a/website/common/locales/en/gear.json b/website/common/locales/en/gear.json index ce6ef903c2..2ae38371a5 100644 --- a/website/common/locales/en/gear.json +++ b/website/common/locales/en/gear.json @@ -1734,6 +1734,8 @@ "armorArmoireGildedKnightsPlateNotes": "In this armor, you are nearly invincible. Your enemies will surely hear you roar! Increases Perception by <%= per %>. Enchanted Armoire: Gilded Knight Set (Item 2 of 3)", "armorArmoireBeekeepersSuitText": "Beekeeping Suit", "armorArmoireBeekeepersSuitNotes": "Keep yourself safe as you look after your busy bumbles. Increases Constitution by <%= con %>. Enchanted Armoire: Beekeeper Set (Item 2 of 4)", + "armorArmoireFlyFishingWadersText": "Fly Fishing Waders", + "armorArmoireFlyFishingWadersNotes": "Stay perfectly warm and dry when you wade into a stream, pond, lake, or river. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 2 of 3)", "headgear": "helm", "headgearCapitalized": "Headgear", @@ -2449,6 +2451,8 @@ "headMystery202503Notes": "This verdant hairdo perfectly suits a brave warrior and defender of the planet. Confers no benefit. March 2025 Subscriber Item.", "headMystery202504Text": "Elusive Yeti Cowl", "headMystery202504Notes": "Wear this mysterious visage to dwell undetected among the world’s most obscure cyptids. Confers no benefit. April 2025 Subscriber Item.", + "headMystery202507Text": "Spunky Skater Cap", + "headMystery202507Notes": "Backwards hats are still cool, right? Confers no benefit. July 2025 Subscriber Item.", "headMystery301404Text": "Fancy Top Hat", "headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.", @@ -2667,6 +2671,8 @@ "headArmoireGildedKnightsHelmNotes": "Shine as bright as the sun through the darkness of any battle. Increases Constitution by <%= con %>. Enchanted Armoire: Gilded Knight Set (Item 1 of 3)", "headArmoireBeekeepersHatText": "Beekeeping Helmet and Veil", "headArmoireBeekeepersHatNotes": "Keep your face safe as you tend to your buzzing buddies. Increases Perception by <%= per %>. Enchanted Armoire: Beekeeper Set (Item 1 of 4)", + "headArmoireFlyFishingHatText": "Fly Fishing Hat", + "headArmoireFlyFishingHatNotes": "With a wide brim and spot to hold a spare lure, don’t go fly fishing without this beauty. Increases Strength and Perception by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 1 of 3)", "offhand": "off-hand item", "offHandCapitalized": "Off-Hand Item", @@ -3174,6 +3180,8 @@ "shieldArmoireSpringPetalUchiwaNotes": "This handheld fan featuring a beautiful petal pattern creates a small breeze just for you as the weather warms. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Spring Petal Set (Item 2 of 2).", "shieldArmoireBeekeepersHiveText": "Beehive", "shieldArmoireBeekeepersHiveNotes": "Beehives serve as both homes and worksites. You might need to talk to your bees about a good work-life balance. Increases Strength by <%= str %>. Enchanted Armoire: Beekeeper Set (Item 4 of 4)", + "shieldArmoireFlyFishingRodText": "Fly Fishing Rod", + "shieldArmoireFlyFishingRodNotes": "Put a lure on this long and flexible rod and fish will mistake it for an insect every single time. Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Fly Fishing Set (Item 3 of 3)", "back": "Back Accessory", "backBase0Text": "No Back Accessory", @@ -3260,6 +3268,8 @@ "backMystery202505Notes": "Earn your stripes swooping and soaring on these aerodynamic wings. Confers no benefit. May 2025 Subscriber Item.", "backMystery202506Text": "Solar Shine Aureole", "backMystery202506Notes": "Bring a warm glow with you as you go about your daily tasks. Confers no benefit. June 2025 Subscriber Item.", + "backMystery202507Text": "Spunky Skateboard", + "backMystery202507Notes": "Your steed for the sidewalks and halfpipes. Confers no benefit. July 2025 Subscriber Item.", "backSpecialWonderconRedText": "Mighty Cape", "backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.", diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index 1bba9a9037..f4eba78f95 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -175,6 +175,7 @@ "mysterySet202504": "Elusive Yeti Set", "mysterySet202505": "Soaring Swallowtail Set", "mysterySet202506": "Solar Shine Set", + "mysterySet202507": "Spunky Skater Set", "mysterySet301404": "Steampunk Standard Set", "mysterySet301405": "Steampunk Accessories Set", "mysterySet301703": "Peacock Steampunk Set", diff --git a/website/common/script/content/appearance/backgrounds.js b/website/common/script/content/appearance/backgrounds.js index 8483631976..3034db2013 100644 --- a/website/common/script/content/appearance/backgrounds.js +++ b/website/common/script/content/appearance/backgrounds.js @@ -659,6 +659,9 @@ const backgrounds = { backgrounds062025: { summer_seashore: { }, }, + backgrounds072025: { + sirens_lair: { }, + }, eventBackgrounds: { birthday_bash: { price: 0, diff --git a/website/common/script/content/constants/releaseDates.js b/website/common/script/content/constants/releaseDates.js index b5b87bcc5e..9dfc37d63f 100644 --- a/website/common/script/content/constants/releaseDates.js +++ b/website/common/script/content/constants/releaseDates.js @@ -21,6 +21,7 @@ export const ARMOIRE_RELEASE_DATES = { sillierTuxedoSet: { year: 2025, month: 4 }, gildedKnightSet: { year: 2025, month: 5 }, beekeepersSet: { year: 2025, month: 6 }, + flyFishingSet: { year: 2025, month: 7 }, }; export const EGGS_RELEASE_DATES = { diff --git a/website/common/script/content/gear/sets/armoire.js b/website/common/script/content/gear/sets/armoire.js index aa19171a2f..e79764f14f 100644 --- a/website/common/script/content/gear/sets/armoire.js +++ b/website/common/script/content/gear/sets/armoire.js @@ -532,6 +532,11 @@ const armor = { con: 12, set: 'beekeepersSet', }, + flyFishingWaders: { + str: 7, + con: 7, + set: 'flyFishingSet', + }, }; const body = { @@ -1088,6 +1093,11 @@ const head = { per: 12, set: 'beekeepersSet', }, + flyFishingHat: { + str: 7, + per: 7, + set: 'flyFishingSet', + }, }; const shield = { @@ -1456,6 +1466,11 @@ const shield = { str: 12, set: 'beekeepersSet', }, + flyFishingRod: { + str: 7, + int: 7, + set: 'flyFishingSet', + }, }; const headAccessory = { diff --git a/website/common/script/content/gear/sets/mystery.js b/website/common/script/content/gear/sets/mystery.js index 2201ac2257..7f2752ddf3 100644 --- a/website/common/script/content/gear/sets/mystery.js +++ b/website/common/script/content/gear/sets/mystery.js @@ -116,6 +116,7 @@ const back = { 202410: { }, 202505: { }, 202506: { }, + 202507: { }, }; const body = { @@ -243,6 +244,7 @@ const head = { 202502: { }, 202503: { }, 202504: { }, + 202507: { }, 301404: { }, 301405: { }, 301703: { }, From 9a072e3e768249a82b41523164afeaf8666e4301 Mon Sep 17 00:00:00 2001 From: Natalie <78037386+CuriousMagpie@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:05:38 -0400 Subject: [PATCH 10/38] chore: update grand gala start dates (#15435) * chore: update grand gala start date * chore: update test cases for new gala dates * chore(sales): adjust promo dates --------- Co-authored-by: Kalista Payne --- test/content/schedule.test.js | 12 ++++++------ website/common/script/content/constants/events.js | 8 ++++---- website/common/script/content/constants/schedule.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/test/content/schedule.test.js b/test/content/schedule.test.js index ab0caf9b96..94c03be794 100644 --- a/test/content/schedule.test.js +++ b/test/content/schedule.test.js @@ -133,21 +133,21 @@ describe('Content Schedule', () => { }); it('sets the end date for a gala', () => { - const date = new Date('2024-05-20'); + const date = new Date('2024-05-31'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2024-06-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2024-06-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('sets the end date for a winter gala', () => { - const date = new Date('2024-12-22'); + const date = new Date('2025-02-28'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('sets the end date in new year for a winter gala', () => { - const date = new Date('2025-01-04'); + const date = new Date('2025-02-28'); const matchers = getAllScheduleMatchingGroups(date); - expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-21T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); + expect(matchers.seasonalGear.end).to.eql(moment.utc(`2025-03-01T${String(switchoverTime).padStart(2, '0')}:00:00.000Z`).toDate()); }); it('uses correct date for first hours of the month', () => { diff --git a/website/common/script/content/constants/events.js b/website/common/script/content/constants/events.js index afed1efeb1..09ddf4eb80 100644 --- a/website/common/script/content/constants/events.js +++ b/website/common/script/content/constants/events.js @@ -83,8 +83,8 @@ export const REPEATING_EVENTS = { foodSeason: 'Cake', }, fallGemSale: { - start: new Date('1970-09-17T04:00-04:00'), - end: new Date('1970-09-24T23:59-04:00'), + start: new Date('1970-08-27T04:00-04:00'), + end: new Date('1970-09-03T23:59-04:00'), event: 'fall_extra_gems', gemsPromo, }, @@ -109,8 +109,8 @@ export const REPEATING_EVENTS = { foodSeason: 'Pie', }, giftOneGetOne: { - start: new Date('1970-12-17T04:00-05:00'), - end: new Date('1970-01-09T23:59-05:00'), + start: new Date('1970-12-18T04:00-05:00'), + end: new Date('1970-01-05T23:59-05:00'), promo: 'g1g1', }, }; diff --git a/website/common/script/content/constants/schedule.js b/website/common/script/content/constants/schedule.js index b69d9d1deb..092febc9a7 100644 --- a/website/common/script/content/constants/schedule.js +++ b/website/common/script/content/constants/schedule.js @@ -664,7 +664,7 @@ export const MONTHLY_SCHEDULE = { }, }; -export const GALA_SWITCHOVER_DAY = 21; +export const GALA_SWITCHOVER_DAY = 1; export const GALA_KEYS = [ 'winter', 'spring', From 2c7da25a25c284b84370589c3c61801e5ef068ba Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 21 Jun 2025 15:07:30 +0200 Subject: [PATCH 11/38] Translated using Weblate (Dutch) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 35.1% (86 of 245 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (French) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 79.6% (212 of 266 strings) Translated using Weblate (French) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.5% (406 of 412 strings) Translated using Weblate (French) Currently translated at 96.1% (177 of 184 strings) Co-authored-by: Alexandre Le Mercier Co-authored-by: Céu Co-authored-by: Jaime Martí Co-authored-by: LaiYi Co-authored-by: Sophie LE MASLE Co-authored-by: Weblate Translate-URL: https://translate.habitica.com/projects/habitica/content/pt_BR/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/front/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/ Translation: Habitica/Content Translation: Habitica/Faq Translation: Habitica/Front Translation: Habitica/Subscriber --- website/common/locales/es/subscriber.json | 3 +- website/common/locales/fr/front.json | 36 +++++++++++--------- website/common/locales/fr/subscriber.json | 3 +- website/common/locales/nl/faq.json | 13 ++++++- website/common/locales/pt_BR/content.json | 2 +- website/common/locales/zh_TW/subscriber.json | 7 +++- 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index 70332febdc..4470f16051 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -264,5 +264,6 @@ "mysterySet202503": "Conjunto de Juggernaut Jade", "mysterySet202504": "Conjunto de Yeti Esquivo", "mysterySet202505": "Conjunto Mariposa Macaón Masiva", - "mysterySet202506": "Conjunto Brillo Solar" + "mysterySet202506": "Conjunto Brillo Solar", + "mysterySet202507": "Conjunto de Patinador Audaz" } diff --git a/website/common/locales/fr/front.json b/website/common/locales/fr/front.json index adb3b83cc6..cf64234e75 100644 --- a/website/common/locales/fr/front.json +++ b/website/common/locales/fr/front.json @@ -31,26 +31,26 @@ "marketing1Lead2Title": "Équipez-vous avec classe", "marketing1Lead2": "Collectez des armes, des armures et bien plus encore avec l'Or que vous obtenez en accomplissant vos tâches. Avec des centaines d'objets à collectionner et à essayer, vous ne serez jamais à court de combinaisons à tester. Optimisez vos choix pour les stats, le style, ou les deux ! ", "marketing1Lead3Title": "Obtenez des récompenses pour vos efforts", - "marketing1Lead3": "Certains trouvent leur motivation dans le jeu et le hasard : un système appelé \"récompense stochastique\". Habitica accueille touts les styles de consolidations et de punitions : positives, négatives, prévisibles et aléatoires.", - "marketing2Header": "Soyez en compétition avec vos amis", + "marketing1Lead3": "Avoir un objectif clair et une récompense à la clef peut faire toute la différence pour accomplir une tâche, plutôt que de la garder en tête pendant des semaines. Quand la vie ne vous fait pas de cadeaux, Habitica s'en occupe ! Vous serez récompensé·e pour chaque tâche accomplie, et d'autres surprises pourraient apparaître de temps à autres, alors ne relâchez pas vos efforts ! ", + "marketing2Header": "Faites équipe avec des ami·e·s", "marketing2Lead1Title": "Productivité sociale", - "marketing2Lead1": "Même si vous pouvez jouer en solo à Habitica, tout devient réellement intéressant dès lors que vous commencez à vous associer, à entrer en compétition et à rendre des comptes. La partie la plus efficace de n'importe quel programme d'amélioration personnelle est la responsabilité sociale, et quel meilleur environnement pour la responsabilité et la compétition qu'un jeu vidéo ?", - "marketing2Lead2Title": "Combattez des monstres", - "marketing2Lead2": "Qu'est-ce qu'un jeu de rôle sans batailles ? Combattez des monstres avec votre équipe. Les monstres vous mettent en mode \"super responsable\" : un jour où vous loupez la gym, c'est un jour où le monstre attaque *tout le monde !*", - "marketing2Lead3Title": "Défiez-vous les uns les autres", - "marketing2Lead3": "Les défis vous permettent d'être en compétition avec vos amis ou des inconnus. Celui ou celle qui a fait de son mieux à la fin du défi remporté des prix spéciaux.", - "marketing3Header": "Applications et extensions", - "marketing3Lead1": "Les applications iPhone et Android vous permettent de vous occuper de vos affaires en déplacement. Nous somme conscients que se connecter sur le site web pour cliquer sur des boutons peut être un frein.", - "marketing3Lead2Title": "Intégrations", - "marketing3Lead2": "D'autres **outils tiers** connectent Habitica à d'autres aspects de votre vie. Notre API permet l’intégration facile de choses comme l'[extension Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=fr-FR), avec laquelle vous perdez des points en naviguant sur des sites non-productifs, et en gagnez sur des sites productifs. [Plus d'informations ici](https://habitica.fandom.com/fr/wiki/Extensions,_modules_compl%C3%A9mentaires_et_personnalisations).", - "marketing4Header": "Utilisation par une organisation", - "marketing4Lead1": "L'éducation est l'un des meilleurs domaines pour la ludification. Nous savons tous à quel point les étudiants sont collés à leurs téléphones ; exploitez ce pouvoir ! Dressez vos élèves les uns contre les autres dans une compétition amicale. Récompensez les bons résultats avec des récompenses rares. Observez leurs notes et leur comportement monter en flèche.", + "marketing2Lead1": "Obtenez un surplus de motivation en collaborant, interagissant et/ou en vous mesurant à d'autres personnes ! Habitica a été conçu pour utiliser une partie essentielle du développement personnel : la dynamique de groupe.", + "marketing2Lead2Title": "Mesurez-vous à des monstres via des Quêtes", + "marketing2Lead2": "Participez à des centaines de Quêtes avec une Équipe d'ami·e·s pour vous jete dans la bataille. Les monstres de Quêtes vous encouragent toujours plus à effectuer vos tâches. Si vous oubliez de faire votre lit, et toute votre équipe prendra des dégâts !", + "marketing2Lead3Title": "Défiez-vous les un·e·s les autres", + "marketing2Lead3": "Rejoignez des Défis créés par notre communauté pour accomplir des tâches pré-définies qui correspondent à vos intérêts et vos objectifs. Faites de votre mieux pour obtenir les Gemmes qui seront obtenues par l·e·a gagnant·e !", + "marketing3Header": "Plus de façons d'exploiter Habitica", + "marketing3Lead1": "Vous pouvez utiliser Habitica sur votre appareil Android ou iOS pour valider vos tâches où que vous soyez. Consultez notre application primée pour aborder vos tâches sous un nouvel angle.", + "marketing3Lead2Title": "Communauté Open-Source", + "marketing3Lead2": "Nous sommes fier·ère·s de porter un projet open-source qui accueille les contributions de notre communauté dévouée. Adaptez Habitica à vos besoins ou participez à l'amélioration de l'expérience pour tou·te·s les joueur·euse·s à travers le monde. Rendez-vous sur [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) (site Anglais) pour en savoir plus !", + "marketing4Header": "Au-delà des tâches domestiques", + "marketing4Lead1": "L’apprentissage devient bien plus motivant avec un soupçon de ludification ! Brisez la routine quotidienne de votre classe en ajoutant que une expérience de jeu unique. Habitica peut offrir une manière ludique de suivre les devoirs, de créer des Défis en classe et de permettre aux élèves de mettre en valeur leurs réussites.", "marketing4Lead1Title": "La ludification dans l'éducation", - "marketing4Lead2": "Les coûts liés à la santé augmentent et quelqu'un doit forcément les payer. Des centaines de programmes sont conçus pour réduire ces coûts et améliorer le bien-être général. Nous sommes convaincus qu'Habitica peut apporter une réelle solution vers un mode de vie plus sain.", + "marketing4Lead2": "Adopter un mode de vie plus sain peut vite sembler décourageant. Habitica vous aide à suivre tous les aspects de vos objectifs fitness grâce à un planning flexible et une intensité adaptable à votre rythme. De quoi joindre l’utile à l’agréable sur le chemin du mieux-être !", "marketing4Lead2Title": "La ludification dans la santé et le bien-être", - "marketing4Lead3-1": "Vous voulez faire de votre vie un jeu ?", + "marketing4Lead3-1": "Prêt·e à joindre l’utile à l’agréable ?", "marketing4Lead3-2": "Intéressé par la gestion d'un groupe dans l'éducation, le bien-être, et davantage ?", - "marketing4Lead3Title": "Transformez tout en jeu", + "marketing4Lead3Title": "Commencez votre voyage !", "mobileAndroid": "Application Android", "mobileIOS": "Application iOS", "oldNews": "Nouvelles", @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "par exemple habitrabbit ou gryphon@example.com", "footerProduct": "Produit", "translateHabitica": "Traduire Habitica", - "incorrectResetPhrase": "Merci de taper <%= magicWord %> en lettres capitales pour réinitialiser votre compte." + "incorrectResetPhrase": "Merci de taper <%= magicWord %> en lettres capitales pour réinitialiser votre compte.", + "marketing3Lead1Title": "Applications Android et iOS", + "marketing4Lead3Button": "Commencez dès Aujourd'hui" } diff --git a/website/common/locales/fr/subscriber.json b/website/common/locales/fr/subscriber.json index 4b6392aa88..c902fa0be9 100644 --- a/website/common/locales/fr/subscriber.json +++ b/website/common/locales/fr/subscriber.json @@ -264,5 +264,6 @@ "mysterySet202503": "Ensemble Poids Lourd de Jade", "mysterySet202504": "Ensemble Yéti Insaisissable", "mysterySet202505": "Ensemble Machaon Majestueux", - "mysterySet202506": "Ensemble Rayonnement Solaire" + "mysterySet202506": "Ensemble Rayonnement Solaire", + "mysterySet202507": "Ensemble Skateu·r·se Stylé·e" } diff --git a/website/common/locales/nl/faq.json b/website/common/locales/nl/faq.json index 976fb723e9..d3a773fa48 100644 --- a/website/common/locales/nl/faq.json +++ b/website/common/locales/nl/faq.json @@ -73,5 +73,16 @@ "faqQuestion34": "Welke soort Voedsel vindt mijn Huisdier lekker?", "webFaqAnswer34": "Huisdieren houden van Voedsel dat bij hun kleur past. Basis-Huisdieren zijn de uitzondering, maar alle Basis-Huisdieren houden van hetzelfde item. Hieronder zie je welk voedsel elk Huisdier lekker vindt:\n\n* Basis-Huisdieren houden van Vlees\n* Witte Huisdieren houden van Melk\n* Woestijn-Huisdieren houden van Aardappelen\n* Rode Huisdieren houden van Aardbeien\n* Schaduw-Huisdieren houden van Chocolade\n* Skelet-Huisdieren houden van Vis\n* Zombie-Huisdieren houden van Bedorven Vlees\n* Suikerspin Roze Huisdieren houden van Roze Suikerspin\n* Suikerspin Blauwe Huisdieren houden van Blauwe Suikerspin\n* Gouden Huisdieren houden van Honing", "faqQuestion35": "Ik heb mijn Huisdier gevoerd en het is verdwenen! Wat is er gebeurd?", - "webFaqAnswer35": "Zodra je je Huisdier genoeg hebt gevoerd om het in een Rijdier te veranderen, moet je dat type Huisdier opnieuw uitbroeden om het weer in je stal te hebben.\n\nOm Rijdieren te bekijken in de mobiele apps:\n\n* Open het Menu, selecteer “Huisdieren & Rijdieren” en schakel naar het tabblad Rijdieren\n\nOm Rijdieren te bekijken op de website:\n\n* Ga naar het menu Inventaris, selecteer “Huisdieren en Rijdieren” en scroll naar beneden naar de sectie Rijdieren" + "webFaqAnswer35": "Zodra je je Huisdier genoeg hebt gevoerd om het in een Rijdier te veranderen, moet je dat type Huisdier opnieuw uitbroeden om het weer in je stal te hebben.\n\nOm Rijdieren te bekijken in de mobiele apps:\n\n* Open het Menu, selecteer “Huisdieren & Rijdieren” en schakel naar het tabblad Rijdieren\n\nOm Rijdieren te bekijken op de website:\n\n* Ga naar het menu Inventaris, selecteer “Huisdieren en Rijdieren” en scroll naar beneden naar de sectie Rijdieren", + "faqQuestion36": "Hoe wijzig ik het uiterlijk van mijn avatar?", + "faqQuestion38": "Waarom kan ik bepaalde voorwerpen niet kopen?", + "webFaqAnswer38": "Nieuwe Habitica-spelers kunnen alleen de basisuitrusting van de Krijgerklasse kopen. Spelers moeten uitrusting in opeenvolgende volgorde kopen om het volgende stuk te ontgrendelen.\n\nVeel uitrustingsstukken zijn klassegebonden, wat betekent dat een speler alleen uitrusting kan kopen die bij zijn of haar huidige klasse hoort.", + "faqQuestion39": "Waar kan ik meer uitrusting krijgen?", + "webFaqAnswer36": "Er zijn eindeloos veel manieren om het uiterlijk van je Habitica-avatar aan te passen! Je kunt het lichaamsmodel, kapsel en haarkleur, huidskleur wijzigen of een bril of mobiliteitshulpmiddel toevoegen via het menu \"Avatar aanpassen\".\n\nOm je avatar aan te passen in de mobiele apps:\n* Selecteer in het menu \"Avatar aanpassen\"\n\nOm je avatar aan te passen op de website:\n* Selecteer \"Avatar aanpassen\" in het gebruikersmenu in de navigatiebalk", + "faqQuestion37": "Waarom wordt mijn uitrusting niet weergegeven op mijn avatar?", + "webFaqAnswer37": "Controleer of de optie Kostuum is ingeschakeld. Als je avatar een kostuum draagt, wordt die uitrusting weergegeven in plaats van je gevechtsuitrusting.\n\nOm het kostuum in te schakelen in de mobiele apps:\n* Selecteer in het menu \"Uitrusting\" om de kostuumschakelaar te vinden\n\nOm het kostuum in te schakelen op de website:\n* Ga naar je inventaris, selecteer \"Uitrusting\" en zoek de kostuumschakelaar in het tabblad Kostuum van de uitrustinglade", + "faqQuestion41": "Wat zijn Mystieke Zandlopers en hoe krijg ik ze?", + "webFaqAnswer41": "Mystieke Zandlopers zijn de exclusieve abonnementsvaluta van Habitica die gebruikt worden in de Tijdreizigerwinkel. Abonnees ontvangen aan het begin van elke maand met abonnementsvoordelen een Mystieke Zandloper, samen met een heleboel andere extra’s. Bekijk zeker onze abonnementsopties als je interesse hebt in de speciale achtergronden, huisdieren, queesten en uitrusting die in de Tijdreizigerwinkel worden aangeboden!", + "webFaqAnswer39": "Als je op zoek bent naar meer uitrusting, kun je een Habitica-abonnee worden, je kans wagen met de Betoverde Kist, of jezelf trakteren tijdens een van Habitica’s Grote Gala’s.\n\nHabitica-abonnees ontvangen elke maand een exclusieve uitrustingsset en Mystieke Zandlopers om vroegere uitrustingssets te kopen in de Tijdreizigerwinkel.\n\nDe Betoverde Kist in je beloningen bevat meer dan 350 uitrustingsstukken! Voor 100 goud krijg je een kans op speciale uitrusting, voedsel om je huisdier in een rijdier te veranderen, of ervaring om een level te stijgen!\n\nTijdens de vier seizoensgebonden Grote Gala’s wordt er gloednieuwe klasse-uitrusting beschikbaar gesteld om met goud te kopen, en eerdere Gala-sets kunnen met edelstenen worden aangeschaft.", + "webFaqAnswer40": "Edelstenen zijn de betaalde in-app valuta van Habitica die je kunt gebruiken om uitrusting, avatar-aanpassingen, achtergronden en meer te kopen! Edelstenen kunnen in bundels worden gekocht of met goud als je een Habitica-abonnee bent. Je kunt ook edelstenen winnen door als winnaar van een uitdaging geselecteerd te worden." } diff --git a/website/common/locales/pt_BR/content.json b/website/common/locales/pt_BR/content.json index 8e72796983..460ae80943 100644 --- a/website/common/locales/pt_BR/content.json +++ b/website/common/locales/pt_BR/content.json @@ -183,7 +183,7 @@ "questEggVelociraptorMountText": "Velociraptor", "questEggVelociraptorAdjective": "um inteligente", "eggNotes": "Ache uma poção de eclosão e use-a neste ovo e ele chocará como <%= eggAdjective(locale) %> <%= eggText(locale) %>.", - "hatchingPotionBase": "​", + "hatchingPotionBase": " ", "hatchingPotionWhite": "das Neves", "hatchingPotionDesert": "do Deserto", "hatchingPotionRed": "Escarlate", diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index 74376859ca..ee28436c25 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -231,5 +231,10 @@ "selectPayment": "選擇付款方式", "giftSubscriptionLeadText": "請在下方選擇您想要贈送的訂閱!此購買不會自動續訂。", "mysterySet202411": "鬃毛鬥士套裝", - "mysterySet202307": "危險海怪套裝" + "mysterySet202307": "危險海怪套裝", + "mysterySet202308": "紫色主角套裝", + "mysterySet202306": "炫目彩虹套裝", + "mysterySet202309": "巨型彗星飛蛾套裝", + "mysterySet202305": "黃昏之龍套裝", + "mysterySet202304": "頭等茶壺套裝" } From fa97852e38f5e08e7818134c7d8ca822963faae5 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Sat, 21 Jun 2025 08:57:40 -0500 Subject: [PATCH 12/38] 5.37.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4841fd7212..d69c4df9df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "habitica", - "version": "5.36.6", + "version": "5.37.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "habitica", - "version": "5.36.6", + "version": "5.37.0", "hasInstallScript": true, "dependencies": { "@babel/core": "^7.22.10", diff --git a/package.json b/package.json index 5db16dbacb..074af58dac 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.36.6", + "version": "5.37.0", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.10", From 2727da6f6cb7a69d3fcaa77ff2f915219b3c70b3 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 25 Jun 2025 21:56:29 +0200 Subject: [PATCH 13/38] Correctly define components (#15458) --- .../client/src/components/achievements/questInvitation.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/client/src/components/achievements/questInvitation.vue b/website/client/src/components/achievements/questInvitation.vue index 0caa878667..cca4c60e30 100644 --- a/website/client/src/components/achievements/questInvitation.vue +++ b/website/client/src/components/achievements/questInvitation.vue @@ -97,9 +97,9 @@ import { mapState } from '@/libs/store'; import Sprite from '@/components/ui/sprite'; export default { - components: [ + components: { Sprite, - ], + }, data () { return { maxHealth, From f8a3e4d673f3187aebd2c8fcb94a158cecf7734b Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Wed, 25 Jun 2025 14:56:50 -0500 Subject: [PATCH 14/38] perf(groups): use simplest possible query for cron script (#15457) --- scripts/team-cron.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/team-cron.js b/scripts/team-cron.js index 11f67fbf4f..2e83671912 100644 --- a/scripts/team-cron.js +++ b/scripts/team-cron.js @@ -8,7 +8,16 @@ const TASK_VALUE_CHANGE_FACTOR = 0.9747; const MIN_TASK_VALUE = -47.27; async function updateTeamTasks (team) { + if (team.purchased.plan.dateTerminated) { + const dateTerminated = new Date(team.purchased.plan.dateTerminated); + if (dateTerminated < new Date()) { + team.purchased.plan.customerId = undefined; + return team.save(); + } + } + const toSave = []; + let teamLeader = await User.findOne({ _id: team.leader }, 'preferences').exec(); if (!teamLeader) { // why would this happen? @@ -93,12 +102,7 @@ async function updateTeamTasks (team) { export default async function processTeamsCron () { const activeTeams = await Group.find({ 'purchased.plan.customerId': { $exists: true }, - $or: [ - { 'purchased.plan.dateTerminated': { $exists: false } }, - { 'purchased.plan.dateTerminated': null }, - { 'purchased.plan.dateTerminated': { $gt: new Date() } }, - ], - }).exec(); + }, { cron: 1, leader: 1, purchased: 1 }).exec(); const cronPromises = activeTeams.map(updateTeamTasks); return Promise.all(cronPromises); From ba6940eb81bd59e3bd8eb480523677cbf471323d Mon Sep 17 00:00:00 2001 From: Natalie <78037386+CuriousMagpie@users.noreply.github.com> Date: Wed, 25 Jun 2025 16:12:23 -0400 Subject: [PATCH 15/38] chore: update time travelers shop to display seasonal backgrounds (#15445) * chore: update time travelers shop to display seasonal backgrounds * chore: update time travelers banner (note CSS borken rn) * chore: fix borken CSS and update logic in shop * chore: added isSubscribed function, not working * chore: isSubscribed working but no bg for subscribers * chore: logic and css updates * chore: add check for trinket * chore: more time traveler shop logicking * chore(git): heckin habitica-images * refactor(style): indents/readability * refactor(style): one more line break * refactor(style): still more indents * refactor(style): I wonder if lint can help with this stuff * refactor(style): tighten up --------- Co-authored-by: Kalista Payne --- website/client/src/assets/scss/shops.scss | 11 +++- .../components/shops/timeTravelers/index.vue | 66 ++++++++++++++----- website/common/locales/en/subscriber.json | 2 +- 3 files changed, 57 insertions(+), 22 deletions(-) diff --git a/website/client/src/assets/scss/shops.scss b/website/client/src/assets/scss/shops.scss index afcb8353a4..7a8596cadd 100644 --- a/website/client/src/assets/scss/shops.scss +++ b/website/client/src/assets/scss/shops.scss @@ -46,13 +46,11 @@ .background { background-repeat: repeat-x; - + height:216px; width: 100%; position: absolute; - top: 0; left: 0; - display: flex; flex-direction: column; justify-content: center; @@ -67,6 +65,13 @@ flex-direction: column; } + .shop-message { + position: relative; + height: 76px; + margin: 71px auto; + width: 240px; + } + .npc { position: absolute; left: 0; diff --git a/website/client/src/components/shops/timeTravelers/index.vue b/website/client/src/components/shops/timeTravelers/index.vue index ce0d4aac03..e31597c877 100644 --- a/website/client/src/components/shops/timeTravelers/index.vue +++ b/website/client/src/components/shops/timeTravelers/index.vue @@ -41,30 +41,58 @@

-
+
+
+
- +
@@ -163,6 +191,7 @@ import _throttle from 'lodash/throttle'; import _groupBy from 'lodash/groupBy'; import _map from 'lodash/map'; import _find from 'lodash/find'; +import moment from 'moment'; import isPinned from '@/../../common/script/libs/isPinned'; import shops from '@/../../common/script/libs/shops'; import { mapState } from '@/libs/store'; @@ -233,15 +262,18 @@ export default { userItems: 'user.data.items', currentEventList: 'worldState.data.currentEventList', }), - - closed () { - return this.user.purchased.plan.consecutive.trinkets === 0; + isSubscribed () { + const now = new Date(); + const { plan } = this.user.purchased; + return plan && plan.customerId + && (!plan.dateTerminated || moment(plan.dateTerminated).isAfter(now)); + }, + hasTrinket () { + return this.user.purchased.plan.consecutive.trinkets > 0; }, - shop () { return shops.getTimeTravelersShop(this.user); }, - categories () { const apiCategories = this.shop.categories; @@ -302,10 +334,8 @@ export default { } }); this.currentEvent = _find(this.currentEventList, event => Boolean(['winter', 'spring', 'summer', 'fall'].includes(event.season))); - if (!this.currentEvent || !this.currentEvent.season || this.currentEvent.season === 'thanksgiving' || this.closed) { + if (!this.currentEvent || !this.currentEvent.season || this.currentEvent.season === 'thanksgiving') { this.imageURLs.background = 'url(/static/npc/normal/time_travelers_background.png)'; - this.imageURLs.npc = this.closed ? 'url(/static/npc/normal/time_travelers_closed_banner.png)' - : 'url(/static/npc/normal/time_travelers_open_banner.png)'; } else { this.imageURLs.background = `url(/static/npc/${this.currentEvent.season}/time_travelers_background.png)`; this.imageURLs.npc = `url(/static/npc/${this.currentEvent.season}/time_travelers_open_banner.png)`; diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index f4eba78f95..eb4fc803bd 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -32,7 +32,7 @@ "subGemName": "Subscriber Gems", "maxBuyGems": "You have bought all the Gems you can this month. More become available within the first three days of each month. Thanks for subscribing!", "timeTravelers": "Time Travelers", - "timeTravelersPopoverNoSubMobile": "Looks like you’ll need a Mystic Hourglass to open the time portal and summon the Mysterious Time Travelers.", + "timeTravelersPopoverNoSubMobile": "Subscribers receive a rare Mystic Hourglass every month to use in the Time Travelers Shop!", "timeTravelersPopover": "Your Mystic Hourglass has opened our time portal! Choose what you’d like us to fetch from the past or future.", "mysticHourglassNeededNoSub": "This item requires a Mystic Hourglass. You earn Mystic Hourglasses by being a Habitica subscriber.", "mysterySetNotFound": "Mystery set not found, or set already owned.", From eaec39188eb31fdb7c81f5e666bc40373e2c9db6 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Thu, 26 Jun 2025 17:55:24 -0500 Subject: [PATCH 16/38] chore(subproj): update habitica-images --- habitica-images | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/habitica-images b/habitica-images index 8b0cae9e63..992d838120 160000 --- a/habitica-images +++ b/habitica-images @@ -1 +1 @@ -Subproject commit 8b0cae9e63a901a2a426924a082e27a64765ba36 +Subproject commit 992d8381200857d0962814f3435c4c7ce8fcbe30 From 63c9b7a894a605857227e617093e5b9fe0ad71f1 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Thu, 26 Jun 2025 18:08:57 -0500 Subject: [PATCH 17/38] fix(groups): add missing markModified --- scripts/team-cron.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/team-cron.js b/scripts/team-cron.js index 2e83671912..6e84acaa5f 100644 --- a/scripts/team-cron.js +++ b/scripts/team-cron.js @@ -12,6 +12,7 @@ async function updateTeamTasks (team) { const dateTerminated = new Date(team.purchased.plan.dateTerminated); if (dateTerminated < new Date()) { team.purchased.plan.customerId = undefined; + team.markModified('purchased.plan'); return team.save(); } } From 4f567592ea015d2797176b86c23b71e9c6ca4043 Mon Sep 17 00:00:00 2001 From: Weblate Date: Tue, 1 Jul 2025 05:18:55 +0200 Subject: [PATCH 18/38] Translated using Weblate (Italian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 84.6% (237 of 280 strings) Translated using Weblate (Swedish) Currently translated at 52.0% (139 of 267 strings) Translated using Weblate (German) Currently translated at 99.6% (266 of 267 strings) Translated using Weblate (Swedish) Currently translated at 94.6% (53 of 56 strings) Translated using Weblate (Swedish) Currently translated at 92.3% (12 of 13 strings) Translated using Weblate (Swedish) Currently translated at 86.8% (99 of 114 strings) Translated using Weblate (Swedish) Currently translated at 74.6% (100 of 134 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (22 of 22 strings) Translated using Weblate (Swedish) Currently translated at 66.0% (284 of 430 strings) Translated using Weblate (Swedish) Currently translated at 75.5% (139 of 184 strings) Translated using Weblate (Swedish) Currently translated at 72.0% (621 of 862 strings) Translated using Weblate (Swedish) Currently translated at 47.2% (43 of 91 strings) Translated using Weblate (Swedish) Currently translated at 87.2% (41 of 47 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (3377 of 3377 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (3377 of 3377 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Hungarian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (3377 of 3377 strings) Translated using Weblate (Spanish) Currently translated at 99.9% (3375 of 3377 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 10.2% (25 of 245 strings) Translated using Weblate (Spanish) Currently translated at 99.8% (3372 of 3377 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 7.7% (19 of 245 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 94.6% (390 of 412 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 93.2% (125 of 134 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (French) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (Spanish) Currently translated at 99.7% (3369 of 3377 strings) Translated using Weblate (German) Currently translated at 98.9% (3341 of 3377 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 5.7% (14 of 245 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 83.8% (223 of 266 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 92.5% (124 of 134 strings) Translated using Weblate (Portuguese) Currently translated at 54.1% (1829 of 3377 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (167 of 167 strings) Translated using Weblate (Portuguese) Currently translated at 53.5% (1808 of 3377 strings) Translated using Weblate (Italian) Currently translated at 28.1% (69 of 245 strings) Translated using Weblate (Italian) Currently translated at 100.0% (91 of 91 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (267 of 267 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (3377 of 3377 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Russian) Currently translated at 100.0% (114 of 114 strings) Translated using Weblate (Russian) Currently translated at 100.0% (412 of 412 strings) Translated using Weblate (Polish) Currently translated at 52.3% (1768 of 3377 strings) Translated using Weblate (Polish) Currently translated at 52.3% (1768 of 3377 strings) Translated using Weblate (Polish) Currently translated at 52.3% (1768 of 3377 strings) Translated using Weblate (Polish) Currently translated at 61.4% (172 of 280 strings) Translated using Weblate (Polish) Currently translated at 52.3% (1768 of 3377 strings) Translated using Weblate (French) Currently translated at 100.0% (3377 of 3377 strings) Translated using Weblate (Polish) Currently translated at 100.0% (243 of 243 strings) Translated using Weblate (Polish) Currently translated at 32.2% (79 of 245 strings) Translated using Weblate (Polish) Currently translated at 94.4% (389 of 412 strings) Translated using Weblate (Polish) Currently translated at 100.0% (193 of 193 strings) Translated using Weblate (Polish) Currently translated at 100.0% (110 of 110 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (French) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Italian) Currently translated at 100.0% (58 of 58 strings) Translated using Weblate (Polish) Currently translated at 100.0% (243 of 243 strings) Translated using Weblate (Italian) Currently translated at 92.3% (170 of 184 strings) Translated using Weblate (Italian) Currently translated at 27.3% (67 of 245 strings) Translated using Weblate (Italian) Currently translated at 100.0% (412 of 412 strings) Translated using Weblate (Polish) Currently translated at 100.0% (47 of 47 strings) Translated using Weblate (Italian) Currently translated at 100.0% (47 of 47 strings) Translated using Weblate (Italian) Currently translated at 100.0% (193 of 193 strings) Translated using Weblate (Polish) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Polish) Currently translated at 99.1% (241 of 243 strings) Translated using Weblate (Polish) Currently translated at 96.2% (234 of 243 strings) Translated using Weblate (Polish) Currently translated at 96.2% (234 of 243 strings) Translated using Weblate (Polish) Currently translated at 86.5% (231 of 267 strings) Translated using Weblate (Polish) Currently translated at 94.6% (89 of 94 strings) Translated using Weblate (Polish) Currently translated at 91.3% (222 of 243 strings) Translated using Weblate (Polish) Currently translated at 30.6% (75 of 245 strings) Translated using Weblate (Polish) Currently translated at 30.6% (75 of 245 strings) Translated using Weblate (Polish) Currently translated at 100.0% (193 of 193 strings) Translated using Weblate (Polish) Currently translated at 100.0% (110 of 110 strings) Translated using Weblate (Polish) Currently translated at 100.0% (110 of 110 strings) Translated using Weblate (Polish) Currently translated at 84.2% (225 of 267 strings) Translated using Weblate (Polish) Currently translated at 84.2% (225 of 267 strings) Translated using Weblate (Polish) Currently translated at 84.2% (225 of 267 strings) Translated using Weblate (Russian) Currently translated at 100.0% (134 of 134 strings) Translated using Weblate (Russian) Currently translated at 100.0% (243 of 243 strings) Translated using Weblate (Russian) Currently translated at 99.1% (241 of 243 strings) Translated using Weblate (Russian) Currently translated at 99.1% (241 of 243 strings) Translated using Weblate (Russian) Currently translated at 96.2% (234 of 243 strings) Translated using Weblate (Russian) Currently translated at 96.2% (234 of 243 strings) Translated using Weblate (Russian) Currently translated at 93.4% (227 of 243 strings) Translated using Weblate (Russian) Currently translated at 93.4% (227 of 243 strings) Translated using Weblate (Russian) Currently translated at 100.0% (184 of 184 strings) Translated using Weblate (Russian) Currently translated at 88.8% (2992 of 3367 strings) Translated using Weblate (Russian) Currently translated at 88.8% (2992 of 3367 strings) Translated using Weblate (Russian) Currently translated at 88.8% (2992 of 3367 strings) Translated using Weblate (Italian) Currently translated at 86.3% (2907 of 3367 strings) Translated using Weblate (Russian) Currently translated at 71.8% (176 of 245 strings) Translated using Weblate (Russian) Currently translated at 70.2% (172 of 245 strings) Translated using Weblate (Russian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Russian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Russian) Currently translated at 66.9% (164 of 245 strings) Translated using Weblate (Russian) Currently translated at 100.0% (911 of 911 strings) Translated using Weblate (Italian) Currently translated at 100.0% (134 of 134 strings) Translated using Weblate (Italian) Currently translated at 22.0% (54 of 245 strings) Translated using Weblate (Italian) Currently translated at 22.0% (54 of 245 strings) Translated using Weblate (Italian) Currently translated at 100.0% (110 of 110 strings) Translated using Weblate (Italian) Currently translated at 100.0% (908 of 908 strings) Translated using Weblate (Italian) Currently translated at 100.0% (908 of 908 strings) Translated using Weblate (Italian) Currently translated at 100.0% (167 of 167 strings) Co-authored-by: Bartosz Babik Co-authored-by: Goldy Co-authored-by: Jackal Co-authored-by: Jaime Martí Co-authored-by: Jan P Co-authored-by: Jezzica Israelsson Co-authored-by: Jonathan Niessen <37.friedrich@gmail.com> Co-authored-by: Karmelkowy Co-authored-by: Kernis Co-authored-by: LaiYi Co-authored-by: Nicolas Samuel Reuter Co-authored-by: Nik Co-authored-by: Pasquale Bosso Co-authored-by: R. J Co-authored-by: Sophie LE MASLE Co-authored-by: Sugo Gangotti Co-authored-by: Summer_GUI Co-authored-by: Svetlana Co-authored-by: Tetiana Co-authored-by: Toro Mor Co-authored-by: Val <3qes0hnzh@mozmail.com> Co-authored-by: Viktor Révész Co-authored-by: Weblate Co-authored-by: Zuz Q Co-authored-by: fitria nabila Co-authored-by: konhi Co-authored-by: razil Co-authored-by: 吳昀錡 Co-authored-by: ? Translate-URL: https://translate.habitica.com/projects/habitica/achievements/it/ Translate-URL: https://translate.habitica.com/projects/habitica/achievements/pt/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/es/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/hu/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/id/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/it/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/uk/ Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/challenge/it/ Translate-URL: https://translate.habitica.com/projects/habitica/challenge/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/character/it/ Translate-URL: https://translate.habitica.com/projects/habitica/character/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/it/ Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/content/it/ Translate-URL: https://translate.habitica.com/projects/habitica/content/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/content/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/content/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/contrib/it/ Translate-URL: https://translate.habitica.com/projects/habitica/contrib/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/contrib/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/it/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/front/hu/ Translate-URL: https://translate.habitica.com/projects/habitica/front/it/ Translate-URL: https://translate.habitica.com/projects/habitica/front/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/front/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/de/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/es/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/hu/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/it/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/pt/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/generic/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/generic/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/groups/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/limited/it/ Translate-URL: https://translate.habitica.com/projects/habitica/limited/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/loginincentives/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/messages/it/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/it/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/npc/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/pets/ru/ Translate-URL: https://translate.habitica.com/projects/habitica/pets/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/quests/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/questscontent/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/rebirth/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/spells/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/de/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/es/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/fr/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/hu/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/pl/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/sv/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/subscriber/zh_Hant/ Translation: Habitica/Achievements Translation: Habitica/Backgrounds Translation: Habitica/Challenge Translation: Habitica/Character Translation: Habitica/Communityguidelines Translation: Habitica/Content Translation: Habitica/Contrib Translation: Habitica/Faq Translation: Habitica/Front Translation: Habitica/Gear Translation: Habitica/Generic Translation: Habitica/Groups Translation: Habitica/Limited Translation: Habitica/Loginincentives Translation: Habitica/Messages Translation: Habitica/Npc Translation: Habitica/Pets Translation: Habitica/Quests Translation: Habitica/Questscontent Translation: Habitica/Rebirth Translation: Habitica/Spells Translation: Habitica/Subscriber --- website/common/locales/de/gear.json | 3 +- website/common/locales/de/subscriber.json | 3 +- website/common/locales/es/backgrounds.json | 5 +- website/common/locales/es/gear.json | 12 ++- website/common/locales/es/subscriber.json | 2 +- website/common/locales/fr/backgrounds.json | 5 +- website/common/locales/fr/gear.json | 12 ++- website/common/locales/fr/subscriber.json | 2 +- website/common/locales/hu/backgrounds.json | 5 +- website/common/locales/hu/front.json | 50 +++++----- website/common/locales/hu/gear.json | 12 ++- website/common/locales/hu/subscriber.json | 5 +- website/common/locales/id/backgrounds.json | 39 +++++++- website/common/locales/it/achievements.json | 2 +- website/common/locales/it/backgrounds.json | 16 ++- website/common/locales/it/challenge.json | 12 ++- website/common/locales/it/character.json | 6 +- .../locales/it/communityguidelines.json | 2 +- website/common/locales/it/content.json | 12 ++- website/common/locales/it/contrib.json | 4 +- website/common/locales/it/faq.json | 23 ++++- website/common/locales/it/front.json | 24 ++--- website/common/locales/it/gear.json | 2 +- website/common/locales/it/limited.json | 25 ++++- website/common/locales/it/messages.json | 3 +- website/common/locales/it/npc.json | 15 +-- website/common/locales/pl/backgrounds.json | 18 +++- website/common/locales/pl/challenge.json | 8 +- website/common/locales/pl/character.json | 18 ++-- website/common/locales/pl/content.json | 27 +++-- website/common/locales/pl/contrib.json | 4 +- website/common/locales/pl/faq.json | 8 +- website/common/locales/pl/gear.json | 62 ++++++------ website/common/locales/pl/generic.json | 26 ++++- website/common/locales/pl/limited.json | 2 +- website/common/locales/pl/quests.json | 8 +- website/common/locales/pl/subscriber.json | 42 ++++++-- website/common/locales/pt/achievements.json | 8 +- website/common/locales/pt/gear.json | 99 ++++++++++++------- website/common/locales/ru/backgrounds.json | 25 ++--- website/common/locales/ru/content.json | 20 +++- website/common/locales/ru/faq.json | 20 +++- website/common/locales/ru/front.json | 54 +++++----- website/common/locales/ru/gear.json | 20 +++- website/common/locales/ru/generic.json | 28 +++++- website/common/locales/ru/npc.json | 7 +- website/common/locales/ru/pets.json | 2 +- .../locales/sv/communityguidelines.json | 10 +- website/common/locales/sv/contrib.json | 4 +- website/common/locales/sv/front.json | 4 +- website/common/locales/sv/groups.json | 4 +- .../common/locales/sv/loginincentives.json | 2 +- website/common/locales/sv/npc.json | 2 +- website/common/locales/sv/pets.json | 2 +- website/common/locales/sv/questscontent.json | 4 +- website/common/locales/sv/rebirth.json | 2 +- website/common/locales/sv/spells.json | 2 +- website/common/locales/sv/subscriber.json | 4 +- website/common/locales/uk/backgrounds.json | 7 +- website/common/locales/zh/backgrounds.json | 5 +- website/common/locales/zh/gear.json | 16 ++- website/common/locales/zh/subscriber.json | 5 +- website/common/locales/zh_TW/content.json | 10 +- website/common/locales/zh_TW/faq.json | 16 ++- website/common/locales/zh_TW/npc.json | 5 +- website/common/locales/zh_TW/subscriber.json | 13 ++- 66 files changed, 658 insertions(+), 266 deletions(-) diff --git a/website/common/locales/de/gear.json b/website/common/locales/de/gear.json index 0e93d2ffbd..1520916c6f 100644 --- a/website/common/locales/de/gear.json +++ b/website/common/locales/de/gear.json @@ -3341,5 +3341,6 @@ "armorSpecialSummer2025MageText": "Zwerglippfisch Anzug", "armorSpecialSummer2025MageNotes": "Dieser Anzug hat nicht nur atemberaubende Farben, sondern ermöglicht dir auch, anmutig durch's Wasser zu gleiten. Schwimmen oder Tanzen - du hast die Wahl! Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025.", "armorArmoireBeekeepersSuitText": "Imkeranzug", - "armorArmoireBeekeepersSuitNotes": "Schütze dich, während du nach deinen fleißigen Hummeln schaust. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Imker Set (Gegenstand 2 von 4)" + "armorArmoireBeekeepersSuitNotes": "Schütze dich, während du nach deinen fleißigen Hummeln schaust. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Imker Set (Gegenstand 2 von 4)", + "headSpecialSummer2025RogueNotes": "Deiner Sehkraft wird sich verbessern sobald Du diese Maske aufsetzt. Erhöht Wahrnehmung um <%= per %>." } diff --git a/website/common/locales/de/subscriber.json b/website/common/locales/de/subscriber.json index abdd84c219..35036bcd60 100644 --- a/website/common/locales/de/subscriber.json +++ b/website/common/locales/de/subscriber.json @@ -264,5 +264,6 @@ "mysterySet202503": "Jade Juggernaut Set", "mysterySet202504": "Scheues Yeti Set", "mysterySet202505": "Hochfliegender Schwalbenschwanz Set", - "mysterySet202506": "Sonnenschein Set" + "mysterySet202506": "Sonnenschein Set", + "mysterySet202507": "Draufgängerisches Skater Set" } diff --git a/website/common/locales/es/backgrounds.json b/website/common/locales/es/backgrounds.json index 2ad10f8fbb..1dacac195a 100644 --- a/website/common/locales/es/backgrounds.json +++ b/website/common/locales/es/backgrounds.json @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Dembulando bajo en un sendero en el bosque.", "backgrounds062025": "Conjunto 133: Publicado en Junio 2025", "backgroundSummerSeashoreText": "Verano en la Costa", - "backgroundSummerSeashoreNotes": "Atrapa una ola este Verano en la Costa." + "backgroundSummerSeashoreNotes": "Atrapa una ola este Verano en la Costa.", + "backgrounds072025": "Conjunto 134: Publicado en Julio 2025", + "backgroundSirensLairText": "Guarida de Sirena", + "backgroundSirensLairNotes": "Atrévete a sumergirte en la Guarida de Sirena." } diff --git a/website/common/locales/es/gear.json b/website/common/locales/es/gear.json index 4aead5802f..a054bcf8e6 100644 --- a/website/common/locales/es/gear.json +++ b/website/common/locales/es/gear.json @@ -3365,5 +3365,15 @@ "shieldSpecialSummer2025HealerText": "Escudo Ángel de Mar", "shieldArmoireBeekeepersHiveText": "Panal", "backMystery202506Text": "Aureola de Brillo Solar", - "backMystery202506Notes": "Derrocha un aura de calidez mientras completas tus tareas diarias. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025." + "backMystery202506Notes": "Derrocha un aura de calidez mientras completas tus tareas diarias. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025.", + "armorArmoireFlyFishingWadersText": "Katiuskas para Pesca Fluvial", + "armorArmoireFlyFishingWadersNotes": "Te mantienen perfectamente calentito y seco mientras te dedicas a lo tuyo ya sea dentro de un arroyo, estanque, lago o río. Aumenta la fuerza y la constitución en <%= attrs %> cada uno. Armario Encantado: Conjunto Pescador Fluvial (Artículo 2 de 3)", + "headMystery202507Text": "Gorra de Patinador Audaz", + "headMystery202507Notes": "Llevar la gorra hacia atrás o ladeada es aún guay, ¿verdad tronco, fliiipas? No otorga ningún beneficio. Artículo de Suscriptor Julio 2025.", + "headArmoireFlyFishingHatText": "Gorro de Pescador Fluvial", + "headArmoireFlyFishingHatNotes": "Con un ala ancha y su espacio para colocar un señuelo de repuesto, no salgas a pescar con mosca sin esta hermosura. Aumenta la Fuerza y la Percepción en <%= attrs %> cada uno. Armario Encantado: Conjunto de Pescador Fluvial (Artículo 1 de 3)", + "shieldArmoireFlyFishingRodNotes": "Coloca un cebo en esta caña larga y flexible y engañará a los peces que lo confundirán con una auténtica mosca vez tras vez, garantizado. Aumenta la Fuerza y la Inteligencia en <%= attrs %> cada uno. Armario Encantado: Conjunto de Pescador Fluvial (Artículo 3 de 3)", + "shieldArmoireFlyFishingRodText": "Caña de Pescador Fluvial", + "backMystery202507Text": "Tabla del Audaz", + "backMystery202507Notes": "Tu montura para las aceras y los medio-tubos. No otorga ningún beneficio. Artículo de Suscriptor Julio 2025." } diff --git a/website/common/locales/es/subscriber.json b/website/common/locales/es/subscriber.json index 4470f16051..d2828a68f8 100644 --- a/website/common/locales/es/subscriber.json +++ b/website/common/locales/es/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Gemas de suscriptor", "maxBuyGems": "Has comprado todas las Gemas que podías comprar este mes. Habrá más gemas disponibles a partir de los tres primeros días de cada mes. ¡Gracias por suscribirte!", "timeTravelers": "Viajeros del tiempo", - "timeTravelersPopoverNoSubMobile": "Parece que necesitarás un Reloj de Arena Místico para abrir el portal del tiempo y convocar a los Misteriosos Viajeros del Tiempo.", + "timeTravelersPopoverNoSubMobile": "¡Los suscriptores reciben uno de los raros Relojes de arena Místico cada mes para usarlo en la Tienda de los Viajeros del Tiempo!", "timeTravelersPopover": "¡Tu Reloj de Arena Místico ha abierto nuestro portal del tiempo! Elige lo que deseas que obtengamos del pasado o futuro.", "mysterySetNotFound": "El conjunto misterioso no se ha encontrado, o bien ya lo tienes.", "mysteryItemIsEmpty": "Artículos misteriosos están vacíos", diff --git a/website/common/locales/fr/backgrounds.json b/website/common/locales/fr/backgrounds.json index fc2443092d..47990b8aa3 100644 --- a/website/common/locales/fr/backgrounds.json +++ b/website/common/locales/fr/backgrounds.json @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Randonnez sur les Chemins d'une Forêt.", "backgrounds062025": "Ensemble 133 : Sortie en Juin 2025", "backgroundSummerSeashoreText": "Bord de Mer Estival", - "backgroundSummerSeashoreNotes": "Faites des vagues sur ce Bord de Mer Estival." + "backgroundSummerSeashoreNotes": "Faites des vagues sur ce Bord de Mer Estival.", + "backgrounds072025": "Ensemble 133 : Sortie Juillet 2025", + "backgroundSirensLairText": "Antre des Sirènes", + "backgroundSirensLairNotes": "Osez nager au cœur de l'Antre des Sirènes." } diff --git a/website/common/locales/fr/gear.json b/website/common/locales/fr/gear.json index 5a6002c959..911e817787 100644 --- a/website/common/locales/fr/gear.json +++ b/website/common/locales/fr/gear.json @@ -3365,5 +3365,15 @@ "shieldArmoireBeekeepersHiveNotes": "Les ruches servent à la fois de domicile et de lieu de travail. Il faudrait peut-être discuter d'un bon équilibre entre vie professionnelle et vie privée avec vos abeilles. Augmente la Force de <%= str %>. Armoire Enchantée : Ensemble d'Apicult·eur·rice (Objet 4 sur 4)", "backMystery202506Text": "Auréole de Rayonnement Solaire", "backMystery202506Notes": "Apporte une douce chaleur à vos tâches quotidiennes. Ne confère aucun bonus. Équipement d'Abonnement Juin 2025.", - "shieldSpecialSummer2025RogueNotes": "Ce tentacule sembles fébrile, mais ses ventouses ont une sacrée poigne. Ennemi·e·s, gare à vous ! Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025." + "shieldSpecialSummer2025RogueNotes": "Ce tentacule sembles fébrile, mais ses ventouses ont une sacrée poigne. Ennemi·e·s, gare à vous ! Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025.", + "armorArmoireFlyFishingWadersNotes": "Restez au chaud et au sec en vous immergeant dans un ruisseau, une mare, un lac ou une rivière. Augmente la Force et la Constitution de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 2 sur 3)", + "headArmoireFlyFishingHatNotes": "Avec sa large visière et son espace prévu pour fixer un leurre supplémentaire, n'oubliez pas de l'emporter avec pour partir à la pêche à la mouche. Augmente la Force et la Perception de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 1 sur 3)", + "shieldArmoireFlyFishingRodNotes": "Metter un appât sur cette canne longue et flexible, et les poissons penseront à chaque fois que c'est un insecte. Augmente la Force et l'Intelligence de <%= attrs %> chacune. Armoire Enchantée : Ensemble Pêche à la Mouche (Objet 3 sur 3)", + "armorArmoireFlyFishingWadersText": "Cuissardes de Pêche à la Mouche", + "headMystery202507Text": "Casquette Skateu·r·se Stylé·e", + "headMystery202507Notes": "La casquette à l'envers est toujours à la mode, hein ? Ne confère aucun bonus. Équipement d'Abonnement Juillet 2025.", + "headArmoireFlyFishingHatText": "Chapeau de Pêche à la Mouche", + "shieldArmoireFlyFishingRodText": "Canne à Mouche", + "backMystery202507Text": "Planche de Skate Stylée", + "backMystery202507Notes": "Votre fidèle destrier pour affronter le bitume et les rampes. Ne confère aucun bonus. Équipement d'Abonnement Juillet 2025." } diff --git a/website/common/locales/fr/subscriber.json b/website/common/locales/fr/subscriber.json index c902fa0be9..a4ff6b63f1 100644 --- a/website/common/locales/fr/subscriber.json +++ b/website/common/locales/fr/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Gemmes d'abonnement", "maxBuyGems": "Vous avez acheté toutes vos gemmes pour ce mois-ci. De nouvelles sont remises en circulation chaque mois, au cours des trois premiers jours !", "timeTravelers": "Voyageurs temporels", - "timeTravelersPopoverNoSubMobile": "Il semblerait que vous ayez besoin d'un sablier mystique pour ouvrir le portail temporel et invoquer les mystérieux voyageurs temporels.", + "timeTravelersPopoverNoSubMobile": "Les Abonné·e·s reçoivent un Sablier Mystique à dépenser dans la Boutique des Voyageu·r·se·s Temporel·le·s tous les mois !", "timeTravelersPopover": "Votre sablier mystique a ouvert notre portail temporel ! Choisissez ce que vous voudriez que l'on récupère dans le passé ou dans le futur.", "mysterySetNotFound": "Ensemble mystère non trouvé, ou ensemble déjà possédé.", "mysteryItemIsEmpty": "Les objets mystère sont vides", diff --git a/website/common/locales/hu/backgrounds.json b/website/common/locales/hu/backgrounds.json index 0d78d66384..fa036dd9b9 100644 --- a/website/common/locales/hu/backgrounds.json +++ b/website/common/locales/hu/backgrounds.json @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Barangolj egy ösvényen az erdőn át.", "backgrounds062025": "KÉSZLET 133: Megjelent 2025. június", "backgroundSummerSeashoreText": "Nyári tengerpart", - "backgroundSummerSeashoreNotes": "Kapj el egy hullámot a nyári tengerparton." + "backgroundSummerSeashoreNotes": "Kapj el egy hullámot a nyári tengerparton.", + "backgrounds072025": "KÉSZLET 134: Megjelent 2025. július", + "backgroundSirensLairText": "A szirén búvóhelye", + "backgroundSirensLairNotes": "Merészkedj le egy szirén búvóhelyére." } diff --git a/website/common/locales/hu/front.json b/website/common/locales/hu/front.json index 3e3e9f1328..4a554d85aa 100644 --- a/website/common/locales/hu/front.json +++ b/website/common/locales/hu/front.json @@ -25,32 +25,32 @@ "invalidEmail": "A jelszó visszaállításhoz érvényes e-mail cím megadása szükséges.", "login": "Bejelentkezés", "logout": "Kijelentkezés", - "marketing1Header": "Javítsd a szokásaid játék közben", - "marketing1Lead1Title": "Az életed, mint szerepjáték", - "marketing1Lead1": "A Habitica egy videojáték, amely segít a való életbeli szokásaid fejlesztésében. \"Játékká alakítja\" az életed azzal, hogy minden feladatodat (szokásokat, napi teendőket és a tennivalókat) apró szörnyekké változtatja, akiket le kell győznöd. Minél jobban teljesítesz, annál tovább jutsz a játékban. Ha viszont elhanyagolod a feladataidat, a karaktered is visszaesik.", - "marketing1Lead2Title": "Szerezd meg a menő felszereléseket", - "marketing1Lead2": "Fejleszd a szokásaidat, és építsd fel az avatárod. Mutasd meg a menő felszereléseidet, amiket kiérdemeltél!", - "marketing1Lead3Title": "Találj véletlenszerű jutalmakat", - "marketing1Lead3": "Vannak, akiket a szerencsejáték izgalma motivál: ezt nevezik „stochasztikus jutalmazási rendszernek”. A Habitica mindenféle megerősítési és büntetési stílust támogat: pozitív, negatív, kiszámítható és véletlenszerű rendszereket egyaránt.", - "marketing2Header": "Versenyezz a barátaiddal", - "marketing2Lead1Title": "Közösségi produktivitás", - "marketing2Lead1": "A Habiticát játszhatod egyedül is, de igazán akkor lesz izgalmas, amikor együttműködtök, versenyeztek és felelősségre vonjátok egymást. Minden önfejlesztő program leghatásosabb eleme a közösségi felelősségvállalás – és mi lenne jobb hely erre, mint egy videojáték?", - "marketing2Lead2Title": "Harcoljatok szörnyekkel", - "marketing2Lead2": "Mi lenne egy szerepjáték csaták nélkül? Harcolj szörnyekkel a csapatoddal! A szörnyek az „ultra felelősségvállalási módot” képviselik – ha egy nap kihagyod az edzést, azzal *mindenki* sebzést szenved el!", + "marketing1Header": "Egyre jobb szokások, szintenként!", + "marketing1Lead1Title": "Tedd játékossá az életed", + "marketing1Lead1": "A Habitica tökéletes app mindenkinek, aki nehezen boldogul a tennivalólistákkal. Ismerős játékmechanikákat használunk, mint például az arany, TP és tárgyjutalmak, hogy produktívabbnak érezd magad, és elégedettséggel töltsön el, amikor elvégzel egy feladatot. Minél jobban teljesítesz, annál gyorsabban haladsz a játékban.", + "marketing1Lead2Title": "Öltözz stílusosan", + "marketing1Lead2": "Gyűjts kardokat, páncélokat és sok minden mást az elvégzett feladatokért kapott aranyból. Több száz tárgy vár rád, így mindig lesz új kombináció, amit kipróbálhatsz. Optimalizálj tulajdonságokra, stílusra vagy mindkettőre! ", + "marketing1Lead3Title": "Jutalom a befektetett munkáért", + "marketing1Lead3": "Egy kis jutalom sokszor pont elég ahhoz, hogy elvégezd a feladatot ahelyett, hogy hetekig csak halogatnád. Ha az élet épp nem kínál jutalmat, a Habitica igen! Minden feladatért kapsz valamit, de meglepetések is várnak – tarts ki, és haladj tovább! ", + "marketing2Header": "Csapatban még jobb", + "marketing2Lead1Title": "Közösségi motiváció", + "marketing2Lead1": "Motiválódj azáltal, hogy együtt dolgozol, versenyzel és kapcsolatba lépsz másokkal! A Habitica a legjobb önfejlesztő programok legerősebb elemére épít: a közösségi elszámoltathatóságra.", + "marketing2Lead2Title": "Szörnyek ellen küldetésekben", + "marketing2Lead2": "Vágjatok bele barátaiddal a több száz küldetésünk egyikébe, és csatlakozzatok a küzdelemhez! A küldetésszörnyek igazán próbára teszik a felelősségtudatot – ha elfelejted a fogmosást, mindenki sebzést kap!", "marketing2Lead3Title": "Hívjátok ki egymást", - "marketing2Lead3": "A kihívások lehetőséget adnak arra, hogy barátaiddal és idegenekkel versenyezz. A kihívás végén a legjobban teljesítő játékos különleges jutalmakat nyer.", - "marketing3Header": "Alkalmazások és bővítmények", - "marketing3Lead1": "Az **iPhone és Android** alkalmazások segítségével útközben is intézheted a dolgaidat. Tudjuk, hogy a weboldalra belépni és gombokat nyomogatni néha fárasztó lehet.", - "marketing3Lead2Title": "Integrációk", - "marketing3Lead2": "Más **3- féltől származó eszközök** is összekapcsolhatók a Habiticával, hogy az életed különböző területein segítsenek. API-nk lehetővé teszi az egyszerű integrációt olyan eszközökkel, mint például a [Chrome-bővítmény](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=en-US), amely pontokat von le, ha nem produktív weboldalakat böngészel és pontokat ad, ha produktív oldalakon jársz. [További információk itt](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", - "marketing4Header": "Szervezeti felhasználás", - "marketing4Lead1": "Az oktatás az egyik legjobb terület a játékosításra. Mind tudjuk, mennyire rá vannak tapadva a diákok a telefonjukra és a játékokra – használd ki ezt az erőt! Állítsd őket barátságos versenyhelyzetbe, és jutalmazd a jó magaviseletet ritka nyereményekkel. Figyeld, ahogy a jegyeik és a viselkedésük javul!", + "marketing2Lead3": "Vegyél részt a közösség által létrehozott kihívásokban, ahol érdeklődésedhez és céljaidhoz illő feladatlistákat kapsz. Tedd oda magad, és versenyezz a gyémántjutalomért, amit a nyertes kap!", + "marketing3Header": "Többféleképpen is használhatod a Habiticát", + "marketing3Lead1": "Töltsd le a Habiticát Androidra vagy iOS-re, hogy bárhol kipipálhasd a feladataid. Próbáld ki díjnyertes alkalmazásainkat, és tapasztald meg, milyen hatékony lehet egy friss megközelítés!", + "marketing3Lead2Title": "Nyílt forráskódú közösség", + "marketing3Lead2": "Büszkék vagyunk arra, hogy nyílt forráskódú projektként működünk, amely örömmel fogadja a lelkes közösségünk hozzájárulásait. Igazítsd Habiticát a saját igényeidhez, vagy segíts, hogy mások számára is jobb legyen az élmény. Látogass el a [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica) oldalunkra, ha többet szeretnél megtudni!", + "marketing4Header": "Több, mint házimunka", + "marketing4Lead1": "Egy kis játékosság csodákat tehet az oktatásban! Törd meg a mindennapi iskolai feladatok egyhangúságát egy kis játékkal. A Habitica szórakoztató módja lehet a házi feladatok nyomon követésének, osztálytermi kihívások létrehozásának, és annak, hogy a diákok megmutathassák, mit értek el.", "marketing4Lead1Title": "Játékosítás az oktatásban", - "marketing4Lead2": "Az egészségügyi költségek egyre növekednek, és valamit tenni kell. Több száz programot hoznak létre a költségek csökkentésére és a jólét javítására. Hisszük, hogy a Habitica jelentős szerepet játszhat az egészséges életmód kialakításában.", - "marketing4Lead2Title": "Játékosítás az egészség és jólét terén", - "marketing4Lead3-1": "Szeretnéd játékossá tenni az életed?", + "marketing4Lead2": "Egészségesebb életmódot kialakítani könnyen túl soknak tűnhet. A Habitica segít abban, hogy rugalmasan, a saját tempódban követhesd a fittségi céljaidat. Tedd élvezetessé az utat a jobb közérzet felé!", + "marketing4Lead2Title": "Játékosítás az egészség és jóllét szolgálatában", + "marketing4Lead3-1": "Készen állsz, hogy szórakozva haladj a feladataiddal?", "marketing4Lead3-2": "Érdekel egy csoport vezetése az oktatás, jólét vagy más területeken?", - "marketing4Lead3Title": "Játékosíts mindent!", + "marketing4Lead3Title": "Indulj el az utadon!", "mobileAndroid": "Android alkalmazás", "mobileIOS": "iOS alkalmazás", "oldNews": "Hírek", @@ -180,5 +180,7 @@ "minPasswordLength": "A jelszónak legalább 8 karakter hosszúnak kell lennie.", "socialAlreadyExists": "Ez a közösségi bejelentkezés már hozzá van kapcsolva egy meglévő Habitica-fiókhoz.", "emailUsernamePlaceholder": "pl. habitnyuszi vagy griff@example.com", - "translateHabitica": "Fordítsd le a Habiticát" + "translateHabitica": "Fordítsd le a Habiticát", + "marketing3Lead1Title": "Android és iOS appok", + "marketing4Lead3Button": "Kezdd el még ma" } diff --git a/website/common/locales/hu/gear.json b/website/common/locales/hu/gear.json index fc65b78b1b..250678d38a 100644 --- a/website/common/locales/hu/gear.json +++ b/website/common/locales/hu/gear.json @@ -3365,5 +3365,15 @@ "shieldArmoireBeekeepersHiveNotes": "A méhkas otthon és munkahely egyben. Talán ideje lenne beszélned a méheiddel a munka és a pihenés egyensúlyáról. Növeli az erődet <%= str %> ponttal. Megbűvölt komód: Méhész szett (4/4 tárgy)", "backMystery202506Text": "Napfényes ragyogás dicsfény", "backMystery202506Notes": "Vigyél magaddal meleg ragyogást a napi teendőid során. Nem jár semmilyen előnnyel. 2025. júniusi előfizetői tárgy.", - "headSpecialSummer2025MageNotes": "Mindenkit elbűvöl majd, ahogy az uszonyaid együtt táncolnak az áramlatokkal. Növeli az észlelésedet <%= per %> ponttal. Korlátozott kiadású nyári 2025-ös felszerelés." + "headSpecialSummer2025MageNotes": "Mindenkit elbűvöl majd, ahogy az uszonyaid együtt táncolnak az áramlatokkal. Növeli az észlelésedet <%= per %> ponttal. Korlátozott kiadású nyári 2025-ös felszerelés.", + "headMystery202507Notes": "A hátrafelé hordott sapka még mindig menő, ugye? Nem jár semmilyen előnnyel. 2025. júliusi előfizetői tárgy.", + "headArmoireFlyFishingHatNotes": "Széles karimája és csalitartó helye nélkülözhetetlenné teszi a legyezőhorgászathoz. Növeli az erődet és az észlelésedet egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (1/3. tárgy)", + "shieldArmoireFlyFishingRodNotes": "Tegyél csalit erre a hosszú és hajlékony botra, és a halak biztosan rovarnak nézik. Növeli az erődet és az intelligenciádat egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (3/3. tárgy)", + "armorArmoireFlyFishingWadersText": "Legyezőhorgász nadrág", + "armorArmoireFlyFishingWadersNotes": "Maradj teljesen száraz és meleg, akár patakban, tóban vagy folyóban gázolsz. Növeli az erődet és a szívósságodat egyaránt <%= attrs %> ponttal. Megbűvölt komód: Legyezőhorgász szett (2/3. tárgy)", + "headMystery202507Text": "Vagány gördeszkás sapka", + "headArmoireFlyFishingHatText": "Legyezőhorgász kalap", + "shieldArmoireFlyFishingRodText": "Legyezőhorgász bot", + "backMystery202507Text": "Vagány gördeszka", + "backMystery202507Notes": "A hátasod a járdákon és félcsövekben. Nem jár semmilyen előnnyel. 2025. júliusi előfizetői tárgy." } diff --git a/website/common/locales/hu/subscriber.json b/website/common/locales/hu/subscriber.json index daf84f4ba0..7c1f9c3dc5 100644 --- a/website/common/locales/hu/subscriber.json +++ b/website/common/locales/hu/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "Előfizetői gyémántok", "maxBuyGems": "Ebben a hónapban már megvásároltad az összes elérhető gyémántot. Újra elérhetővé válnak minden hónap első három napjában. Köszönjük, hogy előfizettél!", "timeTravelers": "Időutazók", - "timeTravelersPopoverNoSubMobile": "Úgy tűnik, szükséged lesz egy misztikus homokórára, hogy megnyisd az időkaput és megidézd a titokzatos időutazókat.", + "timeTravelersPopoverNoSubMobile": "Az előfizetők minden hónapban kapnak egy ritka misztikus homokórát, amit az Időutazók boltjában használhatnak fel!", "timeTravelersPopover": "A misztikus homokórád megnyitotta az időkaput! Válaszd ki, mit szeretnél, hogy elhozzunk a múltból vagy a jövőből.", "mysterySetNotFound": "A rejtélyes szett nem található, vagy már a birtokodban van.", "mysteryItemIsEmpty": "A rejtélyes tárgyak üresek", @@ -264,5 +264,6 @@ "mysterySet202503": "Jáde kolosszus szett", "mysterySet202504": "Ritka jeti szett", "mysterySet202505": "Szárnyaló fecskefark szett", - "mysterySet202506": "Napfényes ragyogás szett" + "mysterySet202506": "Napfényes ragyogás szett", + "mysterySet202507": "Vagány gördeszkás szett" } diff --git a/website/common/locales/id/backgrounds.json b/website/common/locales/id/backgrounds.json index f827676cd9..302a919657 100644 --- a/website/common/locales/id/backgrounds.json +++ b/website/common/locales/id/backgrounds.json @@ -759,7 +759,7 @@ "backgroundSnowyTempleNotes": "Memandangi pemandangan kuil bersalju.", "backgroundWinterLakeWithSwansText": "Danau Musim Dingin dengan Angsa", "backgroundWinterLakeWithSwansNotes": "Menikmati pemandangan danau musim dingin dengan angsa.", - "eventBackgrounds": "Latar belakang Even", + "eventBackgrounds": "Latar belakang Event", "backgroundBirthdayBashText": "Pesta Ulang Tahun", "backgroundBirthdayBashNotes": "Habitica mengadakan pesta ulang tahun, dan semua orang diundang!", "backgrounds032023": "SET 106: Dirilis Maret 2023", @@ -874,5 +874,40 @@ "backgroundMaypoleNotes": "Menari di sekitar Tiang Mei.", "backgroundShellGateNotes": "Berbaris dan lewati koral Gerbang Kerang yang didekorasi.", "monthlyBackgrounds": "Latar Belakang Bulanan", - "backgrounds082024": "SET 123: Dirilis Agustus 2024" + "backgrounds082024": "SET 123: Dirilis Agustus 2024", + "backgrounds092024": "SET 124: Dirilis September 2024", + "backgroundMagicDoorInForestText": "Pintu ajaib di dalam hutan", + "backgroundMagicDoorInForestNotes": "Tantangan unuk memasuki pintu ajaib di dalam hutan.", + "backgrounds102024": "SET 125: Dirilis Oktober 2024", + "backgroundSurroundedByGhostsText": "Dikelilingi banyak hantu", + "backgroundSurroundedByGhostsNotes": "melewati malam mengerikan Dikelilingi banyak hantu.", + "backgrounds0420205": "SET 131: Dirilis April 2025", + "backgroundGardenWithFlowerBedsText": "Kebun dengan Hamparan bunga", + "backgroundGardenWithFlowerBedsNotes": "nikmati mekarnya musim semi di Kebun dengan Hamparan bunga.", + "backgrounds022025": "SET 129: Dirilis Februari 2025", + "backgroundOldFashionedTeaShopText": "Kedai teh tua", + "backgroundOldFashionedTeaShopNotes": "Nikmati minuman hangat dan nyaman di sebuah Kedai teh tua.", + "backgroundSavannaText": "Padang rumput berkabut", + "backgroundSavannaNotes": "Perjalanan melewati padang rumput berkabut.", + "backgrounds122024": "SET 127: Dirilis Desember 2024", + "backgroundFirstSnowForestText": "Salju pertama Di hutan", + "backgroundFirstSnowForestNotes": "menapaki Salju pertama Di hutan.", + "backgrounds012025": "SET 128: Dirilis January 2025", + "backgroundWinterLandscapeWithCabinText": "Pemandangan musim dingin dengan kabin", + "backgroundWinterLandscapeWithCabinNotes": "tetap nyaman di Pemandangan musim dingin dengan kabin.", + "backgrounds032025": "SET 130: Dirilis Maret 2025", + "backgroundMountainSceneWithBlossomsText": "Pemandangan pegunungan dengan bunga-bunga", + "backgroundMountainSceneWithBlossomsNotes": "nikmati pemandangan dan aroma dari pemandangan pegunungan dengan hamparan bunga.", + "backgrounds112024": "SET 126: Dirilis November 2024", + "backgroundCastleHallWithHearthText": "Aula Kastil dengan Perapian", + "backgroundCastleHallWithHearthNotes": "menikmati kehangatan dari Aula Kastil dengan Perapian.", + "backgrounds062025": "SET 135: Dirilis Juni 2025", + "backgroundSummerSeashoreText": "pantai Di musim panas", + "backgroundSummerSeashoreNotes": "melihat deburan ombak di pantai saat musim panas.", + "backgrounds052025": "SET 132: Dirilis Mei 2025", + "backgroundTrailThroughAForestText": "Jalan setapak menembus hutan", + "backgroundTrailThroughAForestNotes": "Berjalan-jalan di Jalan setapak menembus hutan.", + "backgrounds072025": "SET 134: Dirilis Juli 2025", + "backgroundSirensLairText": "Sarang Siren", + "backgroundSirensLairNotes": "Tantangan untuk menyelam ke dalam Sarang Siren." } diff --git a/website/common/locales/it/achievements.json b/website/common/locales/it/achievements.json index 12b9019131..f6d1a695d8 100644 --- a/website/common/locales/it/achievements.json +++ b/website/common/locales/it/achievements.json @@ -151,7 +151,7 @@ "achievementDinosaurDynasty": "Dinastia dei dinosauri", "achievementDinosaurDynastyText": "Hai schiuso tutti i colori standard degli Animali Domestici Uccelli e Dinosauri: Falco, Gufo, Pappagallo, Pavone, Pinguino, Gallo, Pterodattilo, Tirannosauro, Triceratopo e Velociraptor!", "achievementDinosaurDynastyModalText": "Hai collezionato tutti gli animali domestici Uccelli e Dinosauri!", - "achievementBonelessBoss": "Mostro Senza Ossa", + "achievementBonelessBoss": "Boss Senza Ossa", "achievementBonelessBossText": "Tutti i colori standard degli animali invertebrati sono stati schiusi: Coleottero, farfalla, seppia, nudibranchia, polpo, lumaca e ragno!", "achievementBonelessBossModalText": "Hai raccolto tutti gli animali invertebrati!", "achievementDuneBuddy": "Amico delle dune", diff --git a/website/common/locales/it/backgrounds.json b/website/common/locales/it/backgrounds.json index d6ac6009df..2273e1bceb 100644 --- a/website/common/locales/it/backgrounds.json +++ b/website/common/locales/it/backgrounds.json @@ -747,7 +747,7 @@ "backgroundSnowyVillageNotes": "Ammira un Villaggio Innevato.", "backgrounds012023": "SET 104: Rilasciato a gennaio 2023", "backgroundRimeIceText": "Brinata Scintillante", - "backgroundRimeIceNotes": "Ammira la Brina Lucente.", + "backgroundRimeIceNotes": "Ammira una Brinata Scintillante.", "backgroundSnowyTempleText": "Templio Innevato", "backgroundSnowyTempleNotes": "Osserva un Tempio Sereno Innevato.", "backgroundWinterLakeWithSwansText": "Lago Invernale con i Cigni", @@ -808,7 +808,7 @@ "backgrounds072023": "SET 110: Rilasciato a Luglio 2023", "backgrounds102023": "SET 113: Rilasciato ad Ottobre 2023", "backgroundBonsaiCollectionNotes": "Ammira una splendida Collezione di Bonsai.", - "backgroundDreamyIslandText": "Isola da Sogno", + "backgroundDreamyIslandText": "Isola da sogno", "backgroundDreamyIslandNotes": "Goditi il panorama su un'Isola da Sogno.", "backgroundRockGardenText": "Giardino Roccioso", "backgroundRockGardenNotes": "Rilassati in un Giardino Roccioso.", @@ -896,5 +896,15 @@ "backgroundWinterLandscapeWithCabinNotes": "Rimani comodo/a nel Paesaggio Invernale con una Baita.", "backgroundWinterLandscapeWithCabinText": "Paesaggio Invernale con Baita", "backgrounds032025": "SET 130: rilasciato a marzo 2025", - "backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori" + "backgroundMountainSceneWithBlossomsText": "Scena Montana con Fiori", + "backgrounds0420205": "SET 131: Rilasciato ad Aprile 2025", + "backgroundGardenWithFlowerBedsText": "Giardino con Aiuole Fiorite", + "backgroundGardenWithFlowerBedsNotes": "Goditi le fioriture primaverili in un Giardino con Aiuole Fiorite.", + "backgroundMountainSceneWithBlossomsNotes": "Ammira i panorami e i profumi incantevoli di uno Scenario Montano In Fiore.", + "backgrounds062025": "SET 133: Rilasciato a Giugno 2025", + "backgroundSummerSeashoreText": "Spiaggia Estiva", + "backgroundSummerSeashoreNotes": "Cavalca un'onda su una Spiaggia Estiva.", + "backgrounds052025": "SET 132: Rilasciato a Maggio 2025", + "backgroundTrailThroughAForestText": "Sentiero Attraverso una Foresta", + "backgroundTrailThroughAForestNotes": "Passeggia lungo un Sentiero Attraverso una Foresta." } diff --git a/website/common/locales/it/challenge.json b/website/common/locales/it/challenge.json index 28c6dfea8b..2b7c15e9aa 100644 --- a/website/common/locales/it/challenge.json +++ b/website/common/locales/it/challenge.json @@ -86,7 +86,7 @@ "summaryRequired": "Il riepilogo è richiesto", "summaryTooLong": "Il riassunto è troppo lungo", "descriptionRequired": "La descrizione è richiesta", - "locationRequired": "Location of Challenge is required ('Add to')", + "locationRequired": "La posizione della Sfida è obbligatoria ('Aggiungi a')", "categoiresRequired": "Devono essere selezionate una o più categorie", "viewProgressOf": "Vedi i progressi di", "viewProgress": "Vedi il Progresso", @@ -100,5 +100,13 @@ "messageChallengeFlagOfficial": "Le sfide ufficiali non possono essere segnalate.", "whyReportingChallenge": "Perchè stai segnalando questa sfida?", "whyReportingChallengePlaceholder": "Motivo della segnalazione", - "messageChallengeFlagAlreadyReported": "Hai già segnalato questa sfida." + "messageChallengeFlagAlreadyReported": "Hai già segnalato questa sfida.", + "resetFlagCount": "Reimposta Conteggio Segnalazioni", + "flaggedNotHidden": "Sfida segnalata una volta, non nascosta", + "flaggedAndHidden": "Sfida segnalata e nascosta", + "resetFlags": "Reimposta Segnalazioni", + "cannotClone": "Questa Sfida non può essere clonata perché uno o più giocatori l'hanno segnalata come inappropriata. Un membro dello staff ti contatterà a breve con le istruzioni. Se sono trascorse più di 48 ore e non hai ricevuto loro notizie, invia un'email a admin@habitica.com per assistenza.", + "cannotMakeChallenge": "Non puoi creare Sfide pubbliche perché il tuo account attualmente non dispone dei privilegi di inviare messaggi in chat. Contatta admin@habitica.com per maggiori informazioni.", + "abuseFlagModalBodyChallenge": "Dovresti segnalare una Sfida solo se viola le <%= firstLinkStart %>Linee Guida della Community<%= linkEnd %> e/o i <%= secondLinkStart %>Termini di Servizio di Habitica<%= linkEnd %>. L'invio di una segnalazione falsa costituisce una violazione delle Linee Guida della Community di Habitica.", + "cannotClose": "Questa Sfida non può essere chiusa perché uno o più giocatori l'hanno segnalata come inappropriata. Un membro dello staff ti contatterà a breve con le istruzioni. Se sono trascorse più di 48 ore e non hai ricevuto loro notizie, invia un'email a admin@habitica.com per assistenza." } diff --git a/website/common/locales/it/character.json b/website/common/locales/it/character.json index 761a2f6733..98436ac674 100644 --- a/website/common/locales/it/character.json +++ b/website/common/locales/it/character.json @@ -2,7 +2,7 @@ "communityGuidelinesWarning": "Ricorda che il tuo nome pubblico, la tua foto profilo e la tua descrizione personale devono rispettare le linee guida della community (ad esempio sono vietate parolacce, argomenti per adulti, insulti, ecc.). Se vuoi sapere se ciò che hai scritto è appropriato, non esitare a inviare un'e-mail a <%= hrefBlankCommunityManagerEmail %>!", "profile": "Profilo", "avatar": "Personalizza Avatar", - "editAvatar": "Modifica l'Avatar", + "editAvatar": "Personalizza l'Avatar", "noDescription": "Questo Habitante non ha aggiunto una descrizione.", "noPhoto": "Questo Habitante non ha aggiunto una foto.", "other": "Altro", @@ -189,5 +189,7 @@ "nextReward": "Prossima ricompensa per l'accesso", "titleHaircolor": "Colore dei capelli", "titleHairbase": "Capigliatura", - "customizations": "Personalizzazioni" + "customizations": "Personalizzazioni", + "skins": "Pelli", + "titleFacialHair": "Peli del Volto" } diff --git a/website/common/locales/it/communityguidelines.json b/website/common/locales/it/communityguidelines.json index 2ce76f4fa9..b08ad2c312 100644 --- a/website/common/locales/it/communityguidelines.json +++ b/website/common/locales/it/communityguidelines.json @@ -15,7 +15,7 @@ "commGuideList02G": "Conformati immediatamente a qualsiasi richiesta di un membro dello Staff. Ciò può includere, ma non si limita a richieste di restrizioni sui tuoi post in un particolare spazio, di modificare il tuo profilo per rimuovere contenuto inadatto, ecc. Non discutere con lo Staff. Se hai dubbi o commenti sulle azioni dello Staff, invia un'email a admin@habitica.com per contattare il nostro responsabile per la community.", "commGuideList02J": "Non spammare. Per spam s'intende (ma non solo): mandare più messaggi privati non richiesti, inviare messaggi insensati, inviare molteplici messaggi promozionali riguardo a una Squadra o una Sfida, o creare più Sfide simili o di bassa qualità di fila. Lo Staff può determinare a sua discrezione cosa è considerato spam.", "commGuideList02K": "Non inviare link senza spiegazione o contesto. Se il fatto che un giocatore clicchi sul link ti beneficia in alcun modo devi esplicitarlo. Questa regola si applica sia ai messaggi che alle Sfide.", - "commGuideList02L": "Scoraggiamo fortemente lo scambio di informazioni personali nelle chat pubbliche, in particolare quelle che possono essere usate per identificarti.. Le informazioni di questo tipo possono essere (ma non solo): il tuo indirizzo fisico, il tuo indirizzo email e la tua Chiave API/password. Se ti vengono chieste informazioni personali in una chat della Squadra o tramite messaggio privato, ti consigliamo caldamente di non rispondere ed informare lo Staff segnalando il messaggio, oppure contattando admin@habitica.com ed allegando gli screenshot dei messaggi nel caso in cui sia necessario approfondire il contesto.", + "commGuideList02L": "Scoraggiamo fortemente lo scambio di informazioni personali nelle chat pubbliche, in particolare quelle che possono essere usate per identificarti.. Le informazioni di questo tipo possono essere (ma non solo): il tuo indirizzo fisico, il tuo indirizzo email e la tua Chiave API/password. Se ti vengono chieste informazioni personali in una chat della Squadra o tramite messaggio privato, ti consigliamo caldamente di non rispondere ed informare lo Staff segnalando il messaggio, oppure contattando admin@habitica.com ed allegando gli screenshot dei messaggi nel caso in cui sia necessario approfondire il contesto.", "commGuidePara037": "Nessuna Squadra o Gruppo dev'essere creato allo scopo di attaccare qualsiasi gruppo o individuo. Combatti le cattive abitudini, non i tuoi compagni di avventura !", "commGuideHeadingInfractionsEtc": "Infrazioni, sanzioni e riabilitazione", "commGuideHeadingInfractions": "Infrazioni", diff --git a/website/common/locales/it/content.json b/website/common/locales/it/content.json index 454ac6a6db..f9dbb2c429 100644 --- a/website/common/locales/it/content.json +++ b/website/common/locales/it/content.json @@ -119,8 +119,8 @@ "questEggTreelingText": "Alberello", "questEggTreelingMountText": "Alberello", "questEggTreelingAdjective": "un frondoso", - "questEggAxolotlText": "Axolotl", - "questEggAxolotlMountText": "Axolotl", + "questEggAxolotlText": "Assolotto", + "questEggAxolotlMountText": "Assolotto", "questEggAxolotlAdjective": "un piccolo", "questEggTurtleText": "Tartaruga Marina", "questEggTurtleMountText": "Tartaruga Marina Gigante", @@ -211,7 +211,7 @@ "hatchingPotionGlow": "Fosforescente", "hatchingPotionFrost": "Gelo", "hatchingPotionIcySnow": "Neve Ghiacciata", - "hatchingPotionNotes": "Versa questa pozione su un uovo, e nascerà un animale <%= potText(locale) %>.", + "hatchingPotionNotes": "Versa questa pozione su un uovo, e nascerà un Animale Domestico <%= potText(locale) %>.", "foodMeat": "Carne", "foodMeatThe": "la Carne", "foodMeatA": "Carne", @@ -354,7 +354,7 @@ "foodPieBaseA": "una Fetta di Torta di Mele Classica", "foodPieBaseThe": "la Torta di Mele Classica", "foodPieBase": "Torta di Mele Classica", - "premiumPotionUnlimitedNotes": "Non utilizzabile su uova di animali ottenute dalle missioni.", + "premiumPotionUnlimitedNotes": "Non utilizzabile su uova di Animali Domestici ottenute dalle Missioni.", "hatchingPotionDessert": "Dolcetto", "hatchingPotionBirchBark": "Corteccia di Betulla", "hatchingPotionRuby": "Rubino", @@ -408,5 +408,7 @@ "hatchingPotionGingerbread": "Pan di Zenzero", "hatchingPotionOpal": "Opale", "hatchingPotionPinkMarble": "Marmo Rosa", - "hatchingPotionTeaShop": "Negozio di Tè" + "hatchingPotionTeaShop": "Negozio di Tè", + "wackyPotionNotes": "Versalo su un uovo, e si schiuderà uno Strano <%= potText(locale) %> Animale Domestico.", + "wackyPotionAddlNotes": "Non può essere trasformato in Cavalcature né usato su uova di animali domestici ottenuti attraverso una Missione." } diff --git a/website/common/locales/it/contrib.json b/website/common/locales/it/contrib.json index 5068d5249a..9e58999fd2 100644 --- a/website/common/locales/it/contrib.json +++ b/website/common/locales/it/contrib.json @@ -40,10 +40,10 @@ "backerTier": "Grado sostenitore Kickstarter", "playerTiers": "Gradi giocatore", "tier": "Grado", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Ha aiutato Habitica a crescere, compilando un questionario o aiutando in un test. Grazie!", "surveysMultiple": "Ha aiutato Habitica a crescere in <%= count %> occasioni, compilando un questionario o aiutando in una fase di test importante. Grazie!", "blurbHallPatrons": "Questo è il salone dei Mecenati, nel quale vengono onorati i nobili avventurieri che hanno sostenuto la nostra campagna su Kickstarter. Li ringraziamo per aver aiutato a far nascere Habitica!", - "blurbHallContributors": "Questo è il Salone dei Collaboratori, dove coloro che hanno contribuito ad Habitica sono onorati. Che sia attraverso programmazione, arte, musica, scrittura, o anche solo disponibilità, hanno guadagnato gemme, equipaggiamento esclusivo, e titoli prestigiosi. Anche tu puoi contribuire ad Habitica! Scopri di più qui. ", + "blurbHallContributors": "Questo è il Salone dei Collaboratori, dove coloro che hanno contribuito ad Habitica sono onorati. Che sia attraverso programmazione, arte, musica, scrittura, o anche solo disponibilità, hanno guadagnato Gemme, Equipaggiamento esclusivo, e titoli prestigiosi. Anche tu puoi contribuire ad Habitica! Scopri di più qui.", "noPrivAccess": "Non disponi dei privilegi richiesti." } diff --git a/website/common/locales/it/faq.json b/website/common/locales/it/faq.json index 5d17a7c93b..c5150b64c5 100644 --- a/website/common/locales/it/faq.json +++ b/website/common/locales/it/faq.json @@ -42,11 +42,30 @@ "webFaqAnswer42": "Uno dei modi migliori per motivarti e rafforzare la tua responsabilità nel completare le tue attività è unirti a una Squadra! Collaborare con altri giocatori di Habitica è un ottimo modo per completare Missioni e ottenere Animali ed Equipaggiamento, ricevere potenziamenti dalle abilità dei compagni di squadra, e aumentare la tua motivazione.\n\nUn altro modo è partecipare a una Sfida. Le Sfide creano alcune attività relative a un obiettivo specifico direttamente nella tua lista! Le Sfide aggiungono anche un elemento di competizione contro gli altri giocatori di Habitica, che dà una spinta alla tua motivazione attraverso il premio in Gemme. Ci sono Sfide ufficiali create dal Team di Habitica così come Sfide create da altri giocatori.", "faqQuestion43": "Come posso partecipare a una Missione?", "webFaqAnswer43": "Per iniziare una Missione devi essere parte di una Squadra. Le Squadre possono essere avventure in solitaria in cui affronti le missioni da solo, oppure puoi invitare altri giocatori di Habitica per concludere le missioni più velocemente!\n\nScegli una Missione dal tuo inventario selezionando \"Inizia Missione\" da dentro la tua Squadra. Completa le tua attività come al solito per progredire nella Missione! Se stai affrontando una Missione Boss accumulerai danni contro un mostro, oppure avrai la possibilità di trovare oggetti se stai affrontando una Missione di Raccolta. Tutti i progressi in sospeso vengono applicati il giorno successivo.\n\nQuando avrai causato abbastanza danni o raccolto tutti gli oggetti, la Missione sarà completata e riceverai le tue ricompense!", - "faqQuestion44": "Come posso cancellare le attività di una sfida?", + "faqQuestion44": "Come posso rimuovere le Attività di una Sfida?", "webFaqAnswer44": "Dovrai abbandonare la Sfida o attendere che la Sfida venga chiusa per cancellare le attività associate. L'icona di un megafono rosso significa the la Sfida è stata chiusa mentre un megafono grigio significa che la Sfida è ancora in corso.\n\nPer cancellare attività di una Sfida dall'app **Android**:\n1. Tocca l'attività appartenente alla Sfida.\n2. Tocca su \"Cancella\" nell'angolo in alto a destra dello schermo.\n3. Scegli i rimuovere le attività della Sfida dalla tua lista delle attività.\n\nPer cancellare attività di una sfida dall'app **iOS**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, tocca sull'attività e seleziona \"Cancella\" dal fondo.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.\n\nPer cancellare attività di una sfida dalla **pagina web**:\n1. Trova l'attività Sfida che desideri cancellare e cerca l'icona del megafono.\n2. Se l'icona del megafono è rossa, cliccala e poi scegli di rimuovere le attività dalla tua lista delle attività.\n3. Se l'icona del megafono è grigia, avrai bisogno di trovare la Sfida e abbandonarla per rimuovere l'attività.", "faqQuestion45": "Il mio Avatar si è trasformato in un pupazzo di neve, in una stella marina, un fiore o un fantasma. Come faccio a tornare come prima?", "webFaqAnswer45": "Uno dei membri della tua Squadra ha usato un oggetto di trasformazione del Negozio Stagionale su di te! Il tuo Avatar tornerà normale il giorno dopo. Se vuoi rimuovere la trasformazione prima, puoi acquistare un antidoto (Sale, Sabbia, Rimuovi-petali, o Pozione Opaca) dalle Ricompense.", "faqQuestion46": "Come posso segnalare un bug?", "webFaqAnswer46": "Se pensi di aver riscontrato un bug, per favore informaci!\n\nPer segnalare un bug nell'app mobile:\n*Dal menù, seleziona Aiuto & FAQ, poi seleziona \"Aiuto\" e scorri fino a \"Segnala un Bug\"\n\nPer segnalare un bug da sito web:\n*Dal menù Aiuto seleziona \"Segnala un Bug\"", - "faqQuestion47": "Posso vedere i dati su come stanno andando le mie attività e abitudini?" + "faqQuestion47": "Posso vedere i dati su come stanno andando le mie attività e abitudini?", + "faqQuestion48": "Posso giocare ad Habitica in compagnia?", + "webFaqAnswer48": "Sì, attraverso le Squadre! Puoi creare la tua Squadra o entrare in una esistente. Fare squadra con altri giocatori di Habitica è un ottimo modo per affrontare le Missioni, ricevere potenziamenti dalle abilità dei compagni di squadra e aumentare la tua motivazione grazie a una maggiore responsabilizzazione.", + "faqQuestion49": "Come posso trovare una Squadra se non ne faccio già parte?", + "webFaqAnswer49": "Se vuoi provare Habitica in compagnia ma non conosci altri giocatori, la soluzione migliore è cercare una Squadra! Se conosci già altri giocatori che hanno una Squadra, puoi condividere con loro il tuo @nome_utente per essere invitato. In alternativa, puoi creare una nuova Squadra e invitarli usando il loro @nome_utente o indirizzo email.\n\nPer creare o cercare una Squadra, seleziona \"Squadra\" nel menu di navigazione, e scegli l'opzione che fa per te.", + "webFaqAnswer47": "Al momento, Habitica non ha una rappresentazione visiva dei dati delle tue attività nel tempo. Tuttavia, sul sito web di Habitica, puoi esportare i dati delle tue attività dalla scheda Dati del sito nella sezione Impostazioni.", + "faqQuestion50": "Come funziona la ricerca di una Squadra?", + "webFaqAnswer50": "Dopo aver selezionato \"Cerca una Squadra\", sarai aggiunto a un elenco di giocatori che desiderano unirsi a una Squadra. I leader delle Squadre possono visualizzare questo elenco e inviare inviti. Una volta ricevuto un invito, puoi accettarlo dalle tue notifiche per unirti alla Squadra che preferisci!\n\nPotresti ricevere più inviti a Squadre diverse. Tuttavia, puoi essere membro di una sola Squadra alla volta.", + "faqQuestion51": "Per quanto tempo posso cercare una Squadra dopo essermi unito all'elenco?", + "webFaqAnswer51": "Rimarrai nell'elenco finché non accetterai un invito a una Squadra o non effettuerai l'accesso per 7 giorni, a seconda di quale evento si verifica per primo. Se effettui l'accesso dopo 7 giorni di inattività, ti aggiungeremo automaticamente di nuovo all'elenco, a condizione che tu non abbia un invito in sospeso.", + "faqQuestion52": "Posso smettere di cercare una Squadra?", + "faqQuestion53": "Ho una Squadra, come trovo altri membri?", + "webFaqAnswer53": "Se stai usando il sito web di Habitica, seleziona \"Trova Membri\" dal menu a tendina \"Squadra\". Se stai usando l'app Android, tocca \"Trova Membri\" sopra l'elenco dei membri della tua Squadra. Questo mostrerà un elenco di giocatori che stanno attivamente cercando una Squadra e possono essere invitati a unirsi.\n\nPer aiutarti a trovare un buon abbinamento per la tua Squadra, vedrai alcune informazioni come la lingua, la classe, il livello e quanti giorni hanno usato Habitica. Se desideri chattare con qualcuno prima di inviare un invito, puoi visualizzare il loro profilo e inviare un messaggio.", + "webFaqAnswer52": "Se non desideri più trovare una Squadra, puoi interrompere la ricerca in qualsiasi momento.\n\nPer interrompere la ricerca di una Compagnia sulle app per dispositivi mobili\n * Dal menu, seleziona \"Squadra\" e tocca \"Abbandona\" nella parte inferiore dello schermo.\n\nPer interrompere la ricerca di una Squadra dal sito web di Habitica\n * Seleziona \"Squadra\" dalla barra di navigazione e clicca su \"Abbandona\" nel pop-up.", + "faqQuestion54": "Quanti membri posso invitare alla mia Squadra?", + "webFaqAnswer54": "Le Squadre hanno un limite massimo di 30 membri e un minimo di 1 membro. Gli inviti in sospeso contano ai fini del numero di membri. Ad esempio, 29 membri e 1 invito in sospeso conterebbero come 30 membri. Per eliminare un invito in sospeso, il giocatore invitato deve accettare o rifiutare, oppure il leader della Squadra deve annullare l'invito.", + "faqQuestion55": "Posso invitare qualcuno che già conosco?", + "parties": "Squadre", + "webFaqAnswer55": "Sì! Se hai già il nome utente o l'indirizzo email di un giocatore di Habitica, puoi invitarlo a unirsi al tuo Gruppo. Ecco come inviare un invito sulle diverse piattaforme:\n\nPer invitare qualcuno dalle app mobili:\n1. Dal menu, seleziona \"Gruppo\" e scorri verso il basso fino alla sezione Membri\n2. Tocca \"Trova membri\", poi passa alla scheda \"Tramite invito\"\n3. Inserisci i nomi utente o gli indirizzi email dei giocatori che vuoi invitare e clicca su \"Invia invito\"\n\nPer invitare qualcuno dal sito web:\n1. Vai al tuo Gruppo e clicca su \"Invita al gruppo\"\n2. Inserisci i nomi utente o gli indirizzi email dei giocatori che vuoi invitare e clicca su \"Invia inviti\"", + "faqQuestion56": "Come posso annullare un invito in sospeso al mio Gruppo?" } diff --git a/website/common/locales/it/front.json b/website/common/locales/it/front.json index b7d8c0ab3d..be51743205 100644 --- a/website/common/locales/it/front.json +++ b/website/common/locales/it/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Per resettare la password è necessario un indirizzo email valido.", "login": "Accedi", "logout": "Esci", - "marketing1Header": "Migliora le tue abitudini giocando", - "marketing1Lead1Title": "La tua vita, un gioco di ruolo", + "marketing1Header": "Migliora le tue abitudini un livello alla volta!", + "marketing1Lead1Title": "Rendi la tua vita un gioco", "marketing1Lead1": "Habitica è un videogioco il cui obiettivo è aiutarti a migliorare le tue abitudini nella vita reale. Rende le tue giornate più stimolanti trasformando tutti i tuoi impegni (Abitudini, Attività Giornaliere, Cose da Fare) in piccoli mostri che devi sconfiggere. Più diventi bravo in questo, maggiori saranno i tuoi progressi nel gioco. Se trascuri qualcosa nella vita reale, il tuo personaggio ne risente nel gioco.", "marketing1Lead2Title": "Ottieni oggetti straordinari", "marketing1Lead2": "Migliora le tue abitudini per migliorare il tuo avatar. Mostra gli oggetti che hai ottenuto!", - "marketing1Lead3Title": "Trova premi casuali", + "marketing1Lead3Title": "Ricevi premi per il tuo impegno", "marketing1Lead3": "Certe persone sono motivate dall'azzardo: un sistema chiamato \"ricompense stocastiche\". Con Habitica è possibile ogni tipo di rafforzamento e di punizione: positivi, negativi, prevedibili ed aleatori.", "marketing2Header": "Competi con gli amici", - "marketing2Lead1Title": "Produttività sociale", + "marketing2Lead1Title": "Produttività Sociale", "marketing2Lead1": "Puoi giocare ad Habitica da solo, ma il bello viene quando inizi a collaborare, competere e condividere le tue responsabilità. La parte più importante di un programma di automiglioramento è la responsabilità sociale, e quale ambiente migliore per la responsabilità e la competizione se non un videogioco?", - "marketing2Lead2Title": "Combatti i mostri", + "marketing2Lead2Title": "Combatti i mostri nelle Missioni", "marketing2Lead2": "Cosa sarebbe un gioco di ruolo senza delle battaglie? Combatti i mostri insieme alla tua squadra. I mostri sono la \"modalità super responsabilità\" - il giorno che salti palestra è il giorno che il mostro danneggia *tutti!*", "marketing2Lead3Title": "Sfida gli altri", "marketing2Lead3": "Le sfide ti permettono di competere con i tuoi amici e utenti di tutto il mondo. Al termine della sfida, chi ha dato il meglio di sé riceve dei premi speciali.", - "marketing3Header": "App ed estensioni", + "marketing3Header": "Altri modi per usare Habitca", "marketing3Lead1": "Le app per **iPhone e Android** ti permettono di gestire le tue attività in qualsiasi momento. Sappiamo che accedere al sito web solamente per premere dei bottoni può essere noioso.", - "marketing3Lead2Title": "Integrazioni", + "marketing3Lead2Title": "Comunità Open-Source", "marketing3Lead2": "Altri **Strumenti di Terze Parti** legano Habitica a vari aspetti della tua vita. Le nostre API provvedono integrazione per cose come l'[Estensione per Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=it), con la quale perdi punti navigando siti web che ti distraggono e guadagni punti navigando su siti produttivi. [Più informazioni qui (in inglese)](https://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations).", "marketing4Header": "Utilizzo Organizzativo", "marketing4Lead1": "L'educazione è uno dei settori in cui le meccaniche dei giochi sono più efficaci. Sappiamo tutti come al giorno d'oggi gli studenti siano attaccati a videogiochi e cellulari, sfruttiamo questo potere! Mettete alla prova i vostri studenti organizzando competizioni amichevoli. Ricompensate i comportamenti positivi con premi importanti. La loro disciplina e i loro voti miglioreranno visibilmente.", - "marketing4Lead1Title": "L'introduzione dei videogiochi nell'educazione", + "marketing4Lead1Title": "Rendere l'educazione un gioco", "marketing4Lead2": "I costi del settore sanitario sono in continua crescita. Centinaia di programmi vengono sviluppati per ridurre i costi e aumentare il benessere. Noi crediamo fermamente che Habitica possa aprire un percorso verso uno stile di vita sano.", "marketing4Lead2Title": "L'introduzione dei videogiochi nel settore sanitario e del benessere", - "marketing4Lead3-1": "Vuoi vivere la tua vita come in un gioco?", + "marketing4Lead3-1": "Sei pronto a divertirti mentre porti a termine i tuoi impegni?", "marketing4Lead3-2": "Sei interessato a gestire un gruppo nel settore dell'educazione, del benessere e in altri settori?", - "marketing4Lead3Title": "Trasforma tutto in gioco", + "marketing4Lead3Title": "Inizia la tua avventura!", "mobileAndroid": "App su Android", "mobileIOS": "App su iOS", "oldNews": "Novità", @@ -180,5 +180,7 @@ "emailUsernamePlaceholder": "es. habitrabbit oppure grifone@example.com", "footerProduct": "Prodotto", "incorrectResetPhrase": "Per reimpostare il tuo account, digita <%= magicWord %> in lettere maiuscole.", - "translateHabitica": "Traduci Habitica" + "translateHabitica": "Traduci Habitica", + "marketing3Lead1Title": "Applicazioni Android e iOS", + "marketing4Lead3Button": "Inizia Oggi" } diff --git a/website/common/locales/it/gear.json b/website/common/locales/it/gear.json index a02c0ecaf0..6218953923 100644 --- a/website/common/locales/it/gear.json +++ b/website/common/locales/it/gear.json @@ -2822,7 +2822,7 @@ "weaponSpecialFall2024HealerText": "Falce Spaziale", "weaponSpecialFall2024MageText": "Bastone del Mondo Sotterraneo", "weaponSpecialFall2024WarriorNotes": "Le attività che ti ostacolano saranno tagliate immediatamente da questa formidabile arma. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Estate 2024.", - "weaponSpecialFall2024RogueNotes": "Le attività saranno bloccate sul posto grazie ai giri e alle giravolte di questa arma ipnotica. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Estate 2024.", + "weaponSpecialFall2024RogueNotes": "Le attività saranno bloccate sul posto grazie ai giri e alle giravolte di questa arma ipnotica. Aumenta la Forza di <%= str %>. Equipaggiamento in edizione limitata, Autunno 2024.", "weaponSpecialFall2024HealerNotes": "Le attività che una volta erano cosmicamente complicate sono stati decimate dai colpi di questa lama. Aumenta l'Intelligenza di <%= int %>. Equipaggiamento in edizione limitata, Autunno 2024.", "weaponArmoireScholarlyTextbooksNotes": "Ecco la tua occasione per imparare ed approfondire ogni materia che ti interessa. Qual è il tuo livello di fissazione? Aumenta l'Intelligenza di <%= int %>. Scrigno Incantato: Set della Divisa Scolastica (Oggetto 3 di 4).", "weaponArmoireOptimistsCloverText": "Quadrifoglio", diff --git a/website/common/locales/it/limited.json b/website/common/locales/it/limited.json index 6875c0e9c5..c037df72f1 100644 --- a/website/common/locales/it/limited.json +++ b/website/common/locales/it/limited.json @@ -214,5 +214,28 @@ "limitedEvent": "evento a tempo limitato", "celebrateAnniversary": "Festaggia il decimo compleanno di Habitica coi regali e gli oggetti esclusivi scritto sotto!", "celebrateBirthday": "Festeggia il decimo compleanno di Habitica con regali e oggetti esclusivi!", - "anniversaryLimitations": "Questo è un evento a tempo limitato che comincia il 30 gennaio alle 8.00 ET (13.00 UTC) e finisce il 8 febbraio alle 23.59 ET (04.59 UTC). L'edizione limitata Grifatrice Giubilante e dieci Pozioni di Schiusa Magiche saranno disponibili a comprare durante questo periodo. Gli altri regali listati nella sezione \"Four for Free\" saranno inseriti automaticamente negli account che sono stati attivi negli 30 giorni precendenti al giorno che il regalo è mandato. Gli account creati dopo qualsiasi regalo è mandato non possono ricevere i regali." + "anniversaryLimitations": "Questo è un evento a tempo limitato che comincia il 30 gennaio alle 8.00 ET (13.00 UTC) e finisce il 8 febbraio alle 23.59 ET (04.59 UTC). L'edizione limitata Grifatrice Giubilante e dieci Pozioni di Schiusa Magiche saranno disponibili a comprare durante questo periodo. Gli altri regali listati nella sezione \"Four for Free\" saranno inseriti automaticamente negli account che sono stati attivi negli 30 giorni precendenti al giorno che il regalo è mandato. Gli account creati dopo qualsiasi regalo è mandato non possono ricevere i regali.", + "spring2024FluoriteWarriorSet": "Set di Fluorite (Guerriero)", + "spring2024HibiscusMageSet": "Set di Ibisco (Mago)", + "spring2024BluebirdHealerSet": "Set dell'Uccello Azzurro (Guaritore)", + "spring2024MeltingSnowRogueSet": "Set di Neve Sciolta (Ladro)", + "summer2024WhaleSharkWarriorSet": "Set dello Squalo Balena (Guerriero)", + "summer2024SeaAnemoneMageSet": "Set dell'Anemone di Mare (Mago)", + "summer2024SeaSnailHealerSet": "Set della Lumaca di Mare (Guaritore)", + "summer2024NudibranchRogueSet": "Set del Nudibranco (Ladro)", + "winter2024SnowyOwlRogueSet": "Gufo delle Nevi (Ladro)", + "winter2024PeppermintBarkWarriorSet": "Set della Corteccia di Menta Piperita (Guerriero)", + "winter2024NarwhalWizardMageSet": "Set del Mago Narvalo (Mago)", + "spring2023CaterpillarRogueSet": "Millepiedi (Ladro)", + "spring2023HummingbirdWarriorSet": "Colibrì (Guerriero)", + "spring2023MoonstoneMageSet": "Pietra lunare (Mago)", + "spring2023LilyHealerSet": "Lily (Guaritore)", + "summer2023GoldfishWarriorSet": "Pesce rosso (Guerriero)", + "summer2023GuppyRogueSet": "Guppy (Ladro)", + "summer2023KelpHealerSet": "Alga (Guaritore)", + "summer2023CoralMageSet": "Corallo (Mago)", + "fall2023ScaryMovieWarriorSet": "Film dell'Orrore (Guerriero)", + "fall2023ScarletWarlockMageSet": "Stregone Scarlatto (Mago)", + "fall2023WitchsBrewRogueSet": "Infuso della Strega (Ladro)", + "fall2023BogCreatureHealerSet": "Creatura della Palude (Guaritore)" } diff --git a/website/common/locales/it/messages.json b/website/common/locales/it/messages.json index ad0c4fdb4b..49e870ac3e 100644 --- a/website/common/locales/it/messages.json +++ b/website/common/locales/it/messages.json @@ -55,5 +55,6 @@ "messageBackgroundUnEquipped": "Sfondo rimosso.", "messagePetMountUnEquipped": "Animale e cavalcatura rimossi.", "messageCostumeUnEquipped": "Costume rimosso.", - "messageBattleGearUnEquipped": "Equipaggiamento da combattimento rimosso." + "messageBattleGearUnEquipped": "Equipaggiamento da combattimento rimosso.", + "featureRetired": "Questa funzionalità non è più supportata." } diff --git a/website/common/locales/it/npc.json b/website/common/locales/it/npc.json index 5ec8b594b8..16e2ce49a6 100644 --- a/website/common/locales/it/npc.json +++ b/website/common/locales/it/npc.json @@ -19,7 +19,7 @@ "sleepDescription": "Hai bisogno di una pausa? Sospendi i danni (dalle Impostazioni) per mettere in pausa alcune meccaniche di gioco di Habitica:", "sleepBullet1": "Le tue Attività Giornaliere non completate non ti danneggeranno (i boss potranno causarti danno comunque in base alle Attività Giornaliere non completate dei tuoi compagni di Squadra)", "sleepBullet2": "Il conteggio di serie delle tue attività giornaliere e delle tue abitudini non verranno resettate", - "sleepBullet3": "Il danno che provochi ai boss delle missioni o gli oggetti trovati nelle missioni di tipo collezione, rimarranno in sospeso finché non riattiverai i Danni.", + "sleepBullet3": "Il danno che provochi ai boss delle missioni o gli oggetti trovati nelle missioni di tipo collezione, rimarranno in sospeso finché non riattiverai i Danni", "pauseDailies": "Sospendi danni", "unpauseDailies": "Riattiva danni", "staffAndModerators": "Staff e Moderatori", @@ -96,11 +96,11 @@ "toDo": "Cosa da Fare", "tourStatsPage": "Questa è la pagina delle tue Statistiche! Guadagna delle medaglie compiendo le azioni elencate.", "tourTavernPage": "Benvenuto nella Taverna, una chat per tutte le età! Puoi fare in modo che le tue Attività Giornaliere non ti danneggino in caso di malattia o di viaggio facendo click su \"Sospendi danni\". Vieni a farci un saluto!", - "tourPartyPage": "La tua Squadra ti aiuterà a restare in riga. Invita degli amici per sbloccare una Pergamena!", + "tourPartyPage": "Benvenuto nella tua nuova Squadra! Puoi invitare altri giocatori alla tua Squadra tramite nome utente, email o da un elenco di giocatori che cercano una Squadra per guadagnare l'esclusiva Pergamena Missione Basi-Lista.

Seleziona FAQ dal menu a tendina \"Aiuto\" per saperne di più su come funzionano le Squadre.", "tourChallengesPage": "Le Sfide sono liste di attività a tema create dagli utenti! Partecipando a una Sfida, la lista delle sue attività verrà aggiunta al tuo account. Competi con altri utenti per vincere dei premi in Gemme!", "tourMarketPage": "Ogni volta che completi un'attività, avrai una possibilità casuale di ricevere un Uovo, una Pozione di Schiusa o del Cibo per Animali. Puoi anche acquistare questi oggetti qui.", - "tourHallPage": "Benvenuto nel Salone degli Eroi, dove viene reso onore agli aiutanti open-source di Habitica. Che sia attraverso codice, arte, musica, testi o anche semplice disponibilità, hanno guadagnato Gemme, equipaggiamento esclusivo e titoli prestigiosi. Anche tu puoi contribuire ad Habitica!", - "tourPetsPage": "Benvenuto alla Scuderia! Ogni volta che completi una attività, hai una chance casuale di ricevere un Uovo o una Pozioni di Schiusa. Quando fai schiudere un uovo apparirà qui! Clicca sull'immagine di un Animale per aggiungerlo al tuo Avatar. Dagli da mangiare del cibo e crescerà fino a diventare una potente Cavalcatura.", + "tourHallPage": "Benvenuto nel Salone degli Eroi, dove viene reso onore agli aiutanti open-source di Habitica. Che sia attraverso codice, arte, musica, testi o anche semplice disponibilità, hanno guadagnato Gemme, Equipaggiamento esclusivo e titoli prestigiosi. Anche tu puoi contribuire ad Habitica!", + "tourPetsPage": "Benvenuto alla scuderia! Ogni volta che completi una attività, hai una chance casuale di ricevere un Uovo o una Pozioni di Schiusa. Quando fai schiudere un uovo apparirà qui! Clicca sull'immagine di un Animale per aggiungerlo al tuo Avatar. Dagli da mangiare del cibo e crescerà fino a diventare una potente Cavalcatura.", "tourMountsPage": "Una volta che avrai dato abbastanza cibo al tuo animale da trasformarlo in una cavalcatura, apparirà qui. Clicca su una cavalcatura per montare in sella!", "tourEquipmentPage": "Qui è dove viene riposto il tuo Equipaggiamento! Il tuo equipaggiamento da battaglia influenza le tue Statistiche. Se desideri mostrare un equipaggiamento diverso sul tuo avatar senza modificare le tue statistiche, clicca su \"Usa costume.\"", "equipmentAlreadyOwned": "Possiedi già quel pezzo di equipaggiamento", @@ -116,7 +116,7 @@ "limitedOffer": "Disponibile fino al <%= date %>", "paymentCanceledDisputes": "Abbiamo inviato una conferma per l'annullamento alla tua email. Se non vedi l'email, ti preghiamo di contattarci per evitare future controversie sulla fatturazione.", "paymentAutoRenew": "Questo abbonamento si rinnoverà automaticamente fino a quando non verrà annullato. Se è necessario annullare questo abbonamento, è possibile farlo dalle proprie impostazioni.", - "paymentSubBillingWithMethod": "Il tuo abbonamento verrà fatturato $<%= amount %> ogni <%= months %> mesi tramite <%= paymentMethod %>.", + "paymentSubBillingWithMethod": "Il tuo abbonamento verrà fatturato
$<%= amount %>.00 USD ogni <%= months %> mesi tramite <%= paymentMethod %>", "invalidUnlockSet": "Questo set di elementi non è valido e non può essere sbloccato.", "cannotUnpinItem": "Questo oggetto non può essere rimosso.", "nMonthsSubscriptionGift": "<%= nMonths %> mese(i) di abbonamento (Regalo)", @@ -129,5 +129,8 @@ "helpSupportHabitica": "Aiutare a Supportare Habitica", "groupsPaymentAutoRenew": "Questo abbonamento si rinnoverà automaticamente fino a quando non verrà annullato. Se hai bisogno di annullarlo, puoi farlo dal pannello Fatturazione di Gruppo.", "groupsPaymentSubBilling": "La tua prossima data di fatturazione è <%= renewalDate %>.", - "customizationsShopText": "Vuoi cambiare il tuo stile? Sei nel posto giusto! Abbiamo in magazzino i look più freschi adatti alla stagione." + "customizationsShopText": "Vuoi cambiare il tuo stile? Sei nel posto giusto! Abbiamo in magazzino i look più freschi adatti alla stagione.", + "notAvailable": "Questo Oggetto non è disponibile.", + "paymentYouSentSubscriptionG1G1": "Hai inviato a <%- name %>
un abbonamento Habitica di <%= months %> mese(i) e lo stesso abbonamento è stato applicato al tuo account grazie alla nostra promozione \"Regala uno, ricevi uno\"!", + "sellItems": "Vendi Oggetti" } diff --git a/website/common/locales/pl/backgrounds.json b/website/common/locales/pl/backgrounds.json index 6fbd5b3dc4..eb8744f924 100644 --- a/website/common/locales/pl/backgrounds.json +++ b/website/common/locales/pl/backgrounds.json @@ -308,7 +308,7 @@ "backgroundFiberArtsRoomNotes": "Pokręć kołowrotkiem w Zakładzie Włókienniczym.", "backgroundMidnightCastleText": "Zamek o północy", "backgroundMidnightCastleNotes": "Spaceruj przy zamku o północy.", - "backgroundTornadoText": "Tornado", + "backgroundTornadoText": "backgroundTornadoText", "backgroundTornadoNotes": "Przeleć przez tornado.", "backgrounds122017": "ZESTAW 43: Opublikowany w grudniu 2017", "backgroundCrosscountrySkiTrailText": "Trasa narciarska przez kraj", @@ -432,7 +432,7 @@ "backgroundParkWithStatueNotes": "Podążaj ścieżką kwiatową przez park z rzeźbą.", "backgroundParkWithStatueText": "Park z Pomnikiem", "backgroundDojoNotes": "Naucz się nowych technik w sali treningowej Dojo.", - "backgroundDojoText": "Dojo", + "backgroundDojoText": "backgroundDojoText", "backgrounds052019": "Zestaw 60: Wydany w maju 2019", "backgroundBlossomingDesertNotes": "Zostań naocznym świadkiem rzadkiego, niesamowitego rozkwitu na Kwitnącej Pustyni.", "backgroundBlossomingDesertText": "Kwitnąca pustynia", @@ -897,5 +897,17 @@ "backgroundMonstrousCaveText": "Potworna Jaskinia", "backgroundMonstrousCaveNotes": "Spójrz w paszczę Potwornej Jaskini.", "backgroundJackOLanternStacksText": "Stosy Jack O'Lantern", - "backgroundJackOLanternStacksNotes": "Podziwiaj pole stosów Jack O'Lantern." + "backgroundJackOLanternStacksNotes": "Podziwiaj pole stosów Jack O'Lantern.", + "backgroundGardenWithFlowerBedsText": "Ogród Usłany Kwiatami", + "backgroundGardenWithFlowerBedsNotes": "Ciesz się rozkwitem wiosny w Ogrodzie Usłanym Kwiatami.", + "backgrounds0420205": "SET 131: Wydany w kwietniu 2025", + "backgrounds062025": "SET 133: Wydany w czerwcu 2025", + "backgroundSummerSeashoreText": "Letnie Wybrzeże", + "backgroundSummerSeashoreNotes": "Chwytaj fale nad Letnim Wybrzeżem.", + "backgrounds052025": "SET 132: Wydany w maju 2025", + "backgroundTrailThroughAForestText": "Szlak Przez Las", + "backgroundTrailThroughAForestNotes": "Wędruj Szlakiem Przez Las.", + "backgrounds072025": "SET 134: Wydany w lipcu 2025", + "backgroundSirensLairText": "Jaskinia Syreny", + "backgroundSirensLairNotes": "Odważ się zanurkować w Jaskini Syreny." } diff --git a/website/common/locales/pl/challenge.json b/website/common/locales/pl/challenge.json index 429439861c..f8d3e4f052 100644 --- a/website/common/locales/pl/challenge.json +++ b/website/common/locales/pl/challenge.json @@ -102,7 +102,11 @@ "resetFlagCount": "Zresetuj Licznik Oznaczeń", "whyReportingChallenge": "Dlaczego zgłaszasz to Wyzwanie?", "whyReportingChallengePlaceholder": "Powód zgłoszenia", - "messageChallengeFlagAlreadyReported": "To Wyzwanie zostało już przez Ciebie zgłoszone.", + "messageChallengeFlagAlreadyReported": "Już zgłosiłeś to Wyzwanie.", "flaggedNotHidden": "Wyzwanie oznaczone raz, nieukryte", - "cannotClose": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownicy wkrótce skontaktują się z Tobą, aby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc." + "cannotClose": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownicy wkrótce skontaktują się z Tobą, aby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc.", + "cannotClone": "To Wyzwanie nie może zostać zamknięte, ponieważ jeden lub więcej graczy zgłosiło je jako niewłaściwe. Pracownik wkrótce skontaktuje się z Tobą, żeby przekazać dalsze instrukcje. Jeśli nie nastąpi to w przeciągu 48 godzin, prosimy o wysłanie maila na adres admin@habitica.com z prośbą o pomoc.", + "cannotMakeChallenge": "Nie możesz tworzyć publicznych Wyzwań, ponieważ twoje konto ma ograniczone pozwolenia dotyczące czatu. Skontaktuj się z nami na adres admin@habitica.com, aby uzyskać więcej informacji.", + "resetFlags": "Wyzeruj Oznaczenia", + "abuseFlagModalBodyChallenge": "Powinieneś zgłaszać wyłącznie Wyzwanie, które narusza <%= firstLinkStart %>Regulamin Społeczności<%= linkEnd %> i/lub <%= secondLinkStart %>Warunki korzystania z Usług<%= linkEnd %>. Złożenie mylnego zgłoszenia narusza Regulamin Społeczności Habitica." } diff --git a/website/common/locales/pl/character.json b/website/common/locales/pl/character.json index 23b826a555..9ce3244df9 100644 --- a/website/common/locales/pl/character.json +++ b/website/common/locales/pl/character.json @@ -2,7 +2,7 @@ "communityGuidelinesWarning": "Pamiętaj, że twoja nazwa gracza, zdjęcie profilowe oraz krótki opis muszą zgadzać się z wytycznymi społeczności (np. brak przekleństw, brak tematów dla dorosłych, brak obelg itd.) Jeśli masz jakieś pytania odnośnie poprawności, skontaktuj się z nami <%= hrefBlankCommunityManagerEmail %>!", "profile": "Profil", "avatar": "Dostosuj Postać", - "editAvatar": "Edytuj Postać", + "editAvatar": "Personalizuj Postać", "noDescription": "Ten użytkownik nie dodał opisu.", "noPhoto": "Ten użytkownik nie dodał zdjęcia.", "other": "Inne", @@ -83,7 +83,7 @@ "allocatePerPop": "Dodaj punkt do Percepcji", "allocateInt": "Punkty przydzielone do Inteligencji:", "allocateIntPop": "Dodaj punkt do Inteligencji", - "noMoreAllocate": "Teraz, gdy osiągnąłeś poziom 100, nie będziesz już zyskiwać punktów statystyk. Możesz dalej podnosić poziom lub zacząć nową przygodę od poziomu 1 używając Kuli Odrodzenia!", + "noMoreAllocate": "Teraz, gdy osiągnąłeś poziom 100, nie będziesz już zyskiwać Punktów Statystyk. Możesz dalej podnosić poziom lub zacząć nową przygodę od poziomu 1 używając Orb of Rebirth!", "stats": "Statystyki", "strength": "Siła", "strText": "Siła zwiększa szansę na losowe \"trafienia krytyczne\", a także wpływa na ilość otrzymanego za nie Złota, Doświadczenia i prawdopodobieństwa łupów. Pomaga także zadawać obrażenia bossom.", @@ -129,8 +129,8 @@ "healerText": "Uzdrowiciele są bardzo wytrzymali i otaczają swą ochroną bliskich. Niedopełnione Codzienne i złe Nawyki nie są dla nich zbyt groźne, zawsze też mogą uzdrowić się po dotkliwej porażce. Graj jako Uzdrowiciel, jeśli lubisz pomagać członkom Drużyny, lub jeśli bawi Cię wymykanie się śmierci poprzez sumienną pracę!", "optOutOfClasses": "Nie teraz", "chooseClass": "Wybierz swoją klasę", - "chooseClassLearnMarkdown": "[Dowiedz się więcej na temat systemu klas](https://habitica.fandom.com/pl/wiki/System_klas)", - "optOutOfClassesText": "Nie interesują Cię klasy? Chcesz wybrać później? Zrezygnuj z wyboru – będziesz wojownikiem bez umiejętności specjalnych. Później możesz poczytać o systemie klasowym w wiki i w dowolnym momencie włączyć klasy w Użytkownik > Statystyki.", + "chooseClassLearnMarkdown": "[Dowiedz się więcej na temat systemu klas Habitica](/static/faq#what-classes)", + "optOutOfClassesText": "Nie jesteś gotowy na wybór? Nie ma pośpiechu! Jeśli na ten moment rezygnujesz, możesz przeczytać o każdej klasie w naszym FAQ i odwiedzić Ustawienia, aby włączyć System Klas, kiedy tylko będziesz gotowy.", "selectClass": "Wybierz <%= heroClass %>", "select": "Wybierz", "stealth": "Ukrycie", @@ -167,7 +167,7 @@ "photo": "Zdjęcie", "info": "Informacje", "joined": "Dołączył", - "totalLogins": "Razem wizyt", + "totalLogins": "Całkowita liczba wizyt", "latestCheckin": "Ostatnia wizyta", "editProfile": "Edytuj profil", "challengesWon": "Wygrane wyzwania", @@ -185,5 +185,11 @@ "purchaseForGold": "Kupić za <%= cost %> szt. złota?", "notEnoughGold": "Masz za mało złota.", "chatCastSpellPartyTimes": "<%= username %> rzuca zaklęcie <%= spell %> dla drużyny <%= times %> raz.", - "chatCastSpellUserTimes": "<%= username %> rzuca zaklęcie <%= spell %> na <%= target %> <%= times %> raz." + "chatCastSpellUserTimes": "<%= username %> rzuca zaklęcie <%= spell %> na <%= target %> <%= times %> raz.", + "skins": "Skórki", + "titleFacialHair": "Zarost", + "titleHaircolor": "Kolory Włosów", + "titleHairbase": "Fryzury", + "customizations": "Personalizacje", + "nextReward": "Najbliższa nagroda za logowanie się" } diff --git a/website/common/locales/pl/content.json b/website/common/locales/pl/content.json index 7f43693544..1268625f90 100644 --- a/website/common/locales/pl/content.json +++ b/website/common/locales/pl/content.json @@ -8,13 +8,13 @@ "dropEggWolfText": "wilk", "dropEggWolfMountText": "Wilk", "dropEggWolfAdjective": "lojalny", - "dropEggTigerCubText": "tygrysiątko", + "dropEggTigerCubText": "tygrysek", "dropEggTigerCubMountText": "tygrys", "dropEggTigerCubAdjective": "dziki", - "dropEggPandaCubText": "mała panda", - "dropEggPandaCubMountText": "panda", - "dropEggPandaCubAdjective": "łagodna", - "dropEggLionCubText": "lwiątko", + "dropEggPandaCubText": "mały niedźwiedź panda", + "dropEggPandaCubMountText": "niedźwiedź panda", + "dropEggPandaCubAdjective": "łagodny", + "dropEggLionCubText": "mały lew", "dropEggLionCubMountText": "lew", "dropEggLionCubAdjective": "królewski", "dropEggFoxText": "lis", @@ -373,5 +373,20 @@ "hatchingPotionPorcelain": "Porcelana", "hatchingPotionVirtualPet": "Wirtualny Zwierzak", "hatchingPotionPinkMarble": "Różowy Marmur", - "hatchingPotionTeaShop": "Sklep Herbaciany" + "hatchingPotionTeaShop": "Sklep Herbaciany", + "questEggRaccoonText": "Szop pracz", + "questEggRaccoonMountText": "Szop pracz", + "questEggRaccoonAdjective": "wygłodniały", + "questEggDogText": "Szczeniak", + "questEggDogMountText": "Pies", + "questEggDogAdjective": "przyjacielski", + "questEggGiraffeText": "Żyrafa", + "questEggGiraffeMountText": "Żyrafa", + "questEggChameleonText": "Kameleon", + "questEggChameleonMountText": "Kameleon", + "questEggChameleonAdjective": "chaotyczny", + "questEggCrabText": "Krab", + "questEggCrabMountText": "Krab", + "questEggCatText": "Kotek", + "questEggCatMountText": "Kot" } diff --git a/website/common/locales/pl/contrib.json b/website/common/locales/pl/contrib.json index addea17bdc..6f55b22b7f 100644 --- a/website/common/locales/pl/contrib.json +++ b/website/common/locales/pl/contrib.json @@ -40,10 +40,10 @@ "backerTier": "Ranga wspieracza", "playerTiers": "Rangi graczy", "tier": "Ranga", - "conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards", + "conRewardsURL": "https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica#contributor-tier-rewards", "surveysSingle": "Pomógł rozwinąć Habitica poprzez wypełnienie ankiet lub testowanie. Dziękujemy!", "surveysMultiple": "Pomagał w rozwoju Habitiki przy <%= count %> okazjach, czy to wypełniając ankiety, czy też wkładając dużo wysiłku w testowanie. Dziękujemy!", "blurbHallPatrons": "To jest Sala patronów, gdzie oddajemy cześć szlachetnym poszukiwaczom przygód, którzy wsparli Habitica w pierwszej zbiórce na Kickstarterze. Dziękujemy im za pomoc w powołaniu Habitiki do życia!", - "blurbHallContributors": "To jest Sala Współtwórców, gdzie uhonorowani zostali open-source'owi współtwórcy Habitica. Czy to za pomocą kodu, sztuki, muzyki, pisania, czy jedynie uczynności, zdobyli oni klejnoty, ekskluzywne wyposażenie oraz prestiżowe tytuły. Ty również możesz współtworzyć Habitica! Tutaj dowiesz się więcej. ", + "blurbHallContributors": "To jest Sala Współtwórców, gdzie uhonorowani zostali open-source'owi współtwórcy Habitica. Czy to za pomocą kodu, sztuki, muzyki, pisania, czy jedynie uczynności, zdobyli oni Klejnoty, ekskluzywne Wyposażenie oraz prestiżowe tytuły. Ty również możesz współtworzyć Habitikę! Tutaj dowiesz się więcej.", "noPrivAccess": "Nie masz wymaganych przywilejów." } diff --git a/website/common/locales/pl/faq.json b/website/common/locales/pl/faq.json index 17c5b8a0ef..7a85506be8 100644 --- a/website/common/locales/pl/faq.json +++ b/website/common/locales/pl/faq.json @@ -71,5 +71,11 @@ "webFaqAnswer32": "Każdy gracz zaczyna jako klasa Wojownika i pozostaje w niej do osiągnięcia 10 poziomu. W momencie osiągnięcia poziomu 10 zostaniesz postawiony przed wyborem między zmianą klasy na nową a kontynuowaniem ścieżki Wojownika.\n\nKażda klasa ma unikalne Wyposażenie oraz Umiejętności. Jeśli nie chcesz podejmować wyboru, możesz wybrać opcję \"Zrezygnuj\", aby nie decydować o tym od razu. Jeśli nie zdecydujesz się od razu, możesz włączyć system klasowy w dowolnym momencie później z poziomu Ustawień.\n\nJeśli chciałbyś zmienić wybraną przez siebie klasę po poziomie 10, możesz zrobić to używając Kuli Odrodzenia. Kula Odrodzenia jest dostępna w Sklepie za 6 Klejnotów od poziomu 50 lub za darmo od poziomu 100.\n\nInnym sposobem jest zmiana klasy w dowolnym momencie z poziomu Ustawień za 3 Klejnoty. To nie zresetuje twojego poziomu jak Kula Odrodzenia, ale pozwoli ci na ponowne rozdanie punktów umiejętności, które zebrałeś nabijając kolejne poziomy, tak by dopasować je do twojej nowej klasy.", "faqQuestion33": "Czym jest niebieski pasek, który pojawia się po osiągnięciu poziomu 10?", "faqQuestion35": "Nakarmiłem mojego zwierzaka i zniknął! Co się stało?", - "faqQuestion36": "Jak mogę zmienić wygląd mojej Postaci?" + "faqQuestion36": "Jak mogę zmienić wygląd mojej Postaci?", + "webFaqAnswer34": "Zwierzęta lubią jedzenie w kolorze, który pasuje do ich koloru. Podstawowe zwierzęta są wyjątkiem, ale wszystkie podstawowe zwierzęta lubią ten sam przedmiot. Poniżej możesz zobaczyć konkretne jedzenie, które lubi każde ze zwierząt:\n\n* Podstawowe zwierzęta lubią Mięso\n* Białe zwierzęta lubią Mleko\n* Pustynne zwierzęta lubią Ziemniaki\n* Czerwone zwierzęta lubią Truskawki\n* Cieniste zwierzęta lubią Czekoladę\n* Szkieletowe zwierzęta lubią Ryby\n* Zombie zwierzęta lubią Zgniłe mięso\n* Różowe zwierzęta z waty cukrowej lubią Różową watę cukrową\n* Niebieskie zwierzęta z waty cukrowej lubią Niebieską watę cukrową\n* Złote zwierzęta lubią Miód", + "faqQuestion38": "Dlaczego nie mogę zakupić niektórych przedmiotów?", + "faqQuestion37": "Dlaczego nie widzę mojego wyposażenia na Postaci?", + "faqQuestion39": "Gdzie mogę zdobyć więcej elementów Wyposażenia?", + "faqQuestion40": "Czym są Klejnoty i jak je zdobyć?", + "faqQuestion41": "Czym są Mistyczne Klepsydry i jak je zdobyć?" } diff --git a/website/common/locales/pl/gear.json b/website/common/locales/pl/gear.json index 7e71d95d16..9bc0b525d3 100644 --- a/website/common/locales/pl/gear.json +++ b/website/common/locales/pl/gear.json @@ -144,7 +144,7 @@ "weaponSpecialFallMageText": "Magiczna miotła", "weaponSpecialFallMageNotes": "Ta zaczarowana miotła lata szybciej niż smok! Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %> . Edycja Limitowana Jesień 2014.", "weaponSpecialFallHealerText": "Różdżka skarabeusza", - "weaponSpecialFallHealerNotes": "Skarabeusz na tej różdżce chroni i leczy dzierżącego ją bohatera. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Jesień 2014.", + "weaponSpecialFallHealerNotes": "Skarabeusz na tej różdżce chroni i leczy dzierżącego ją bohatera. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Jesień 2014.", "weaponSpecialWinter2015RogueText": "Kolec Lodu", "weaponSpecialWinter2015RogueNotes": "Z całą pewnością, zdecydowanie, najzwyczajniej to po prostu leżało sobie na ziemi. Zwiększa Siłę o <%= str %>. Edycja Limitowana Zima 2014-2015.", "weaponSpecialWinter2015WarriorText": "Żelkowy Miecz", @@ -198,7 +198,7 @@ "weaponSpecialSummer2016WarriorText": "Zakrzywiony Miecz", "weaponSpecialSummer2016WarriorNotes": "Ugryź te trudne zadania tym hakowatym mieczem! Zwiększa Siłę o <%= str %>. Edycja Limitowana Letniego Wyposażenia 2016.", "weaponSpecialSummer2016MageText": "Laska z piany morskiej", - "weaponSpecialSummer2016MageNotes": "Cała moc mórz sączy się z tego berła. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", + "weaponSpecialSummer2016MageNotes": "Cała moc mórz sączy się z tego berła. Zwiększa Inteligencję o <%= int %> i Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "weaponSpecialSummer2016HealerText": "Leczniczy Trójząb", "weaponSpecialSummer2016HealerNotes": "Jeden kolec rani, inny leczy. Zwiększa Inteligencję o <%= int %>. Edycja Limitowana Letniego Wyposażenia 2016.", "weaponSpecialFall2016RogueText": "Sztylet z jadem pająka", @@ -278,7 +278,7 @@ "weaponSpecialWinter2019WarriorText": "Snowflake Halberd", "weaponSpecialWinter2019WarriorNotes": "This snowflake was grown, ice crystal by ice crystal, into a diamond-hard blade! Increases Strength by <%= str %>. Limited Edition 2018-2019 Winter Gear.", "weaponSpecialWinter2019MageText": "Fiery Dragon Staff", - "weaponSpecialWinter2019MageNotes": "Ostrożnie! Ta wybuchowa laska jest gotowa pomóc Ci znaleźć się we wszystkich kątach jednocześnie. Zwiększa Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana 2018-2019 Zimowe Wyposażenie.", + "weaponSpecialWinter2019MageNotes": "Ostrożnie! Ta wybuchowa laska jest gotowa pomóc Ci znaleźć się we wszystkich kątach jednocześnie. Zwiększa Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana 2018-2019 Zimowe Wyposażenie.", "weaponSpecialWinter2019HealerText": "Zimowa Różdżka", "weaponSpecialWinter2019HealerNotes": "Winter can be a time of rest and healing, and so this wand of winter magic can help to soothe the most grievous hurts. Increases Intelligence by <%= int %>. Limited Edition 2018-2019 Winter Gear.", "weaponMystery201411Text": "Widły Ucztowania", @@ -298,7 +298,7 @@ "weaponArmoireBasicCrossbowText": "Zwyczajna kusza", "weaponArmoireBasicCrossbowNotes": "Ta kusza potrafi przebić pancerz zadania z bardzo daleka! Zwiększa Siłę o <%= str %>, Percepcję o <%= per %> i Kondycję o <%= con %>. Zaczarowana Skrzynia: przedmiot niezależny.", "weaponArmoireLunarSceptreText": "Księżycowe Kojące Berło", - "weaponArmoireLunarSceptreNotes": "Moc uzdrawiania tej różdżki przybywa i ubywa. Zwiększa Kondycję o <%= con %> i Inteligencję o <%= int %>. Zaczarowana Skrzynia: kojący zestaw księżycowy (przedmiot 3 z 3).", + "weaponArmoireLunarSceptreNotes": "Moc uzdrawiania tej różdżki przybywa i ubywa. Zwiększa Kondycję o <%= con %> i Inteligencję o <%= int %>. Zaczarowana Skrzynia: kojący zestaw księżycowy (przedmiot 3 z 3).", "weaponArmoireRancherLassoText": "Lasso farmerskie", "weaponArmoireRancherLassoNotes": "Lassa: idealne narzędzia do robienia obław i zaganiania. Zwiększają siłę o <%= str %>, percepcję o <%= per %> i inteligencję o <%= int %>. Zaczarowana Skrzynia: zestaw farmerski (przedmiot 3 z 3).", "weaponArmoireMythmakerSwordText": "Miecz Twórca Legend", @@ -314,7 +314,7 @@ "weaponArmoireCrystalCrescentStaffText": "Laska Kryształowego Półksiężyca", "weaponArmoireCrystalCrescentStaffNotes": "Przyzwij moc półksiężyca dzięki tej błyszczącej lasce! Zwiększa Inteligencję i Siłę o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Kryształowego Półksiężyca (przedmiot 3 z 3).", "weaponArmoireBlueLongbowText": "Niebieski długi łuk", - "weaponArmoireBlueLongbowNotes": "Gotów... Cel... Pal! Ten łuk ma wielki zasięg. Zwiększa Percepcję o <%= per %>, Kondycję o <%= con %>, i Siłę <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 3 z 3).", + "weaponArmoireBlueLongbowNotes": "Gotów... Cel... Pal! Ten łuk ma wielki zasięg. Zwiększa Percepcję o <%= per %>, Kondycję o <%= con %>, i Siłę <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 3 z 3).", "weaponArmoireGlowingSpearText": "Włócznia Pobrzasku", "weaponArmoireGlowingSpearNotes": "Ta włócznia hipnotyzuje zdziczałe zadania, żeby je łatwiej pokonać. Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Przedmiot niezależny.", "weaponArmoireBarristerGavelText": "Młotek Sędziowski", @@ -398,15 +398,15 @@ "armorRogue5Text": "Zbroja mroku", "armorRogue5Notes": "Pozwala się skradać na widoku, w pełnym świetle. Zwiększa Percepcję o <%= per %>.", "armorWizard1Text": "Szata magika", - "armorWizard1Notes": "Strój maga-samouka. Zwiększa Inteligencję o <%= int %>.", + "armorWizard1Notes": "Strój maga-samouka. Zwiększa Inteligencję o <%= int %>.", "armorWizard2Text": "Szata czarodzieja", - "armorWizard2Notes": "Odzienie wędrownego sprzedawcy cudów. Zwiększa Inteligencję o <%= int %>.", + "armorWizard2Notes": "Odzienie wędrownego sprzedawcy cudów. Zwiększa Inteligencję o <%= int %>.", "armorWizard3Text": "Szata tajemnic", - "armorWizard3Notes": "Symbolizuje wtajemniczenie do najpilniej strzeżonych tajemnic. Zwiększa Inteligencję o <%= int %>.", + "armorWizard3Notes": "Symbolizuje wtajemniczenie do najpilniej strzeżonych tajemnic. Zwiększa Inteligencję o <%= int %>.", "armorWizard4Text": "Szata arcymaga", - "armorWizard4Notes": "Duchy i żywiołaki kłaniają się przed nią. Zwiększa Inteligencję o <%= int %>.", + "armorWizard4Notes": "Duchy i żywiołaki kłaniają się przed nią. Zwiększa Inteligencję o <%= int %>.", "armorWizard5Text": "Szata królewskiego maga", - "armorWizard5Notes": "Symbol mocy zza tronu. Zwiększa Inteligencję o <%= int %>.", + "armorWizard5Notes": "Symbol mocy zza tronu. Zwiększa Inteligencję o <%= int %>.", "armorHealer1Text": "Szata akolity", "armorHealer1Notes": "Tkanina ukazująca pokorę i celowość. Zwiększa Kondycję o <%= con %>.", "armorHealer2Text": "Szata medyka", @@ -462,7 +462,7 @@ "armorSpecialSnowflakeText": "Szata śnieżynki", "armorSpecialSnowflakeNotes": "Szata zapewni Ci ciepło nawet podczas zamieci. Podnosi kondycję o <%= con %>. Edycja Limitowana Zima 2013-2014.", "armorSpecialBirthdayText": "Absurdalne szaty imprezowe", - "armorSpecialBirthdayNotes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Niedorzeczne Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", + "armorSpecialBirthdayNotes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Niedorzeczne Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialBirthday2015Text": "Głupawe Szaty Urodzinowe", "armorSpecialBirthday2015Notes": "Wszystkiego najlepszego z okazji urodzin, Habitiko! Załóż Głupawe Szaty Urodzinowe, aby świętować ten wspaniały dzień. Nie dają żadnych korzyści.", "armorSpecialBirthday2016Text": "Niedorzeczne Szaty Urodzinowe", @@ -490,7 +490,7 @@ "armorSpecialSummerMageText": "Szmaragdowy ogon", "armorSpecialSummerMageNotes": "Takie stroje ze lśniących łusek potrafią przemieniać ludzi w prawdziwych syrenomagów! Dodaje <%= int %> punktów inteligencji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialSummerHealerText": "Ogon Morskozdrowiciela", - "armorSpecialSummerHealerNotes": "Ten strój ze lśniących łusek zapewnia moc prawdziwego Morskozdrowiciela! Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, lato 2014.", + "armorSpecialSummerHealerNotes": "Ten strój ze lśniących łusek zapewnia moc prawdziwego Morskozdrowiciela! Dodaje <%= con %> punktów kondycji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialFallRogueText": "Krwistoczerwone szaty", "armorSpecialFallRogueNotes": "Wyrazisty. Welurowy. Wampiryczny. Dodaje <%= per %> punktów percepcji. Limitowana Edycja Wyposażenia, lato 2014.", "armorSpecialFallWarriorText": "Kitel nauki", @@ -506,7 +506,7 @@ "armorSpecialWinter2015MageText": "Północna Szata", "armorSpecialWinter2015MageNotes": "W tej szacie możesz ujrzeć migoczące światła północy. Zwiększa inteligencję o <%= int %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", "armorSpecialWinter2015HealerText": "Strój Łyżwiarski", - "armorSpecialWinter2015HealerNotes": "Łyżwiarstwo jest bardzo relaksujące, ale nie powinno się go próbować bez ochronnego wyposażenia na wypadek ataku soplowych smoków. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", + "armorSpecialWinter2015HealerNotes": "Łyżwiarstwo jest bardzo relaksujące, ale nie powinno się go próbować bez ochronnego wyposażenia na wypadek ataku soplowych smoków. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2014-2015.", "armorSpecialSpring2015RogueText": "Piskliwa Szata", "armorSpecialSpring2015RogueNotes": "Futrzana, miękka oraz zdecydowanie niełatwopalna. Zwiększa percepcję o<%= per %>. Edycja Limitowana, wiosna 2015.", "armorSpecialSpring2015WarriorText": "Zbroja \"Strzeż Się\"", @@ -548,13 +548,13 @@ "armorSpecialSpring2016HealerText": "Puchate Królicze Bryczesy", "armorSpecialSpring2016HealerNotes": "Kic, kic! Kicaj od wzgórza do wzgórza i lecz osoby w potrzebie. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Wiosna 2016.", "armorSpecialSummer2016RogueText": "Ogon węgorza", - "armorSpecialSummer2016RogueNotes": "Ten elektryzujący strój przemienia w prawdziwego węgorza łotrzyka. Zwiększa percepcję o <%= per %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016RogueNotes": "Ten elektryzujący strój przemienia w prawdziwego węgorza łotrzyka. Zwiększa percepcję o <%= per %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016WarriorText": "Ogon rekina", - "armorSpecialSummer2016WarriorNotes": "Ten szorstki strój przemienia w prawdziwego rekina wojownika. Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016WarriorNotes": "Ten szorstki strój przemienia w prawdziwego rekina wojownika. Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016MageText": "Ogon delfina", "armorSpecialSummer2016MageNotes": "Ten śliski strój przemienia w prawdziwego delfinomaga! Zwiększa inteligencję o <%= int %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialSummer2016HealerText": "Ogon konika morskiego", - "armorSpecialSummer2016HealerNotes": "Ten kolczasty strój przemienia w prawdziwego Konika morskiego uzdrawiacza! Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "armorSpecialSummer2016HealerNotes": "Ten kolczasty strój przemienia w prawdziwego Konika morskiego uzdrawiacza! Zwiększa kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "armorSpecialFall2016RogueText": "Zbroja Czarnej Wdowy", "armorSpecialFall2016RogueNotes": "Oczy na tej zbroi nieustannie mrugają. Zwiększa Percepcję o <%= per %>.\nLimitowana Edycja Wyposażenia, jesień 2016.", "armorSpecialFall2016WarriorText": "Zbroja ze smugą mułu", @@ -564,7 +564,7 @@ "armorSpecialFall2016HealerText": "Szaty Gorgony", "armorSpecialFall2016HealerNotes": "Te szaty naprawdę są zrobione z kamienia. Jak mogą być tak wygodne? Zwiększa Kondycję o <%= con %>.\nLimitowana Edycja Wyposażenia, jesień 2016.", "armorSpecialWinter2017RogueText": "Szronowa Zbroja", - "armorSpecialWinter2017RogueNotes": "Ten maskujący strój odbija światło by oślepić niczego nieświadome zadania, podczas gdy ty weźmiesz nagrody za nie! Zwiększa percepcję o <%= per %>. Edycja Limitowana Zima 2016-2017.", + "armorSpecialWinter2017RogueNotes": "Ten maskujący strój odbija światło by oślepić niczego nieświadome zadania, podczas gdy ty weźmiesz nagrody za nie! Zwiększa percepcję o <%= per %>. Edycja Limitowana Zima 2016-2017.", "armorSpecialWinter2017WarriorText": "Zbroja Hokeisty", "armorSpecialWinter2017WarriorNotes": "Okaż współpracę i siłę w tej ciepłej, wyściełanej zbroi. Zwiększa Kondycję o <%= con %>. Edycja Limitowana Zima 2016-2017.", "armorSpecialWinter2017MageText": "Wilcza Zbroja", @@ -748,7 +748,7 @@ "armorArmoireStripedSwimsuitText": "Pasiasty Strój Kąpielowy", "armorArmoireStripedSwimsuitNotes": "Co może dać więcej radości niż walka z morskimi potworami na plaży? Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Nadmorski (przedmiot 2 z 3).", "armorArmoireCannoneerRagsText": "Łachmany Kanoniera", - "armorArmoireCannoneerRagsNotes": "Te łachmany są wytrzymalsze niż na to wygląda. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Kanoniera (Przedmiot 2 z 3).", + "armorArmoireCannoneerRagsNotes": "Te łachmany są wytrzymalsze niż na to wygląda. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Kanoniera (Przedmiot 2 z 3).", "armorArmoireFalconerArmorText": "Zbroja Sokolnika", "armorArmoireFalconerArmorNotes": "Chroń się przed atakami pazurów w tej porządnej zbroi! Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw Sokolnika (Element 1 z 3).", "armorArmoireVermilionArcherArmorText": "Pancerz Cynobrowego Łucznika", @@ -756,7 +756,7 @@ "armorArmoireOgreArmorText": "Zbroja ogra", "armorArmoireOgreArmorNotes": "Ta zbroja imituje twardą skórę Ogra, ale jest wyłożona wełną dla komfortu! Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Wyposażenie Ogra (przedmiot 3 z 3).", "armorArmoireIronBlueArcherArmorText": "Niebieski żelazny pancerz łucznika", - "armorArmoireIronBlueArcherArmorNotes": "Ta zbroja ochroni cię przed latającymi na polu bitwy strzałami! Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 2 z 3).", + "armorArmoireIronBlueArcherArmorNotes": "Ta zbroja ochroni cię przed latającymi na polu bitwy strzałami! Zwiększa Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 2 z 3).", "armorArmoireRedPartyDressText": "Czerwona wyjściowa sukienka", "armorArmoireRedPartyDressNotes": "Jesteś silny, wytrzymały, inteligentny i taki wytworny! Zwiększa Siłę, Kondycję i Inteligencję o <%= attrs %>. Zaczarowana Skrzynia: Zestaw czerwonej kokardy (przedmiot 2 z 2).", "armorArmoireWoodElfArmorText": "Drewniana zbroja elfa", @@ -848,7 +848,7 @@ "headWizard4Text": "Kapelusz arcymaga", "headWizard4Notes": "Skupia umysł na intensywnym rzucaniu zaklęć. Zwiększa Percepcję o <%= per %>.", "headWizard5Text": "Kapelusz królewskiego maga", - "headWizard5Notes": "Pokazuje władzę nad losem, pogodą i niższymi magami. Zwiększa Percepcję o <%= per %>.", + "headWizard5Notes": "Pokazuje władzę nad losem, pogodą i niższymi magami. Zwiększa Percepcję o <%= per %>.", "headHealer1Text": "Kwarcowa opaska", "headHealer1Notes": "Wysadzane klejnotami nakrycie głowy, pomaga skupić się na wykonywanym zadaniu. Zwiększa Inteligencję o <%= int %>.", "headHealer2Text": "Ametystowa opaska", @@ -878,7 +878,7 @@ "headSpecialMammothRiderHelmText": "Hełm Jeźdźca Mamutów", "headSpecialMammothRiderHelmNotes": "Nie daj się zwieść jego puszystości -- to nakrycie głowy obdarzy cię przeszywającą mocą percepcji! Zwiększa Percepcję o <%= per %>.", "headSpecialPageHelmText": "Hełm giermka", - "headSpecialPageHelmNotes": "Kolczuga: dla elegancji i praktyki. Zwiększa Percepcję o <%= per %>.", + "headSpecialPageHelmNotes": "Kolczuga: dla elegancji i praktyki. Zwiększa Percepcję o <%= per %>.", "headSpecialRoguishRainbowMessengerHoodText": "Tęczowy Kaptur Łobuzerskiego Posłańca", "headSpecialRoguishRainbowMessengerHoodNotes": "Ten jasny kaptur emanuje kolorową poświatą, która ochroni cię przed nieprzyjemną pogodą! Zwiększa Kondycję o <%= con %>.", "headSpecialClandestineCowlText": "Tajemnicza Maska", @@ -986,7 +986,7 @@ "headSpecialSummer2016RogueText": "Hełm węgorza", "headSpecialSummer2016RogueNotes": "W tym ukrywającym hełmie możesz wyjrzeć spomiędzy skał. Zwiększa Percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "headSpecialSummer2016WarriorText": "Hełm rekina", - "headSpecialSummer2016WarriorNotes": "Ugryź ciężkie zadania z tym przerażającym hełmem. Zwiększa siłę o <%= str %>. Limitowana edycja letniego wyposażenia 2016.", + "headSpecialSummer2016WarriorNotes": "Ugryź ciężkie zadania z tym przerażającym hełmem. Zwiększa siłę o <%= str %>. Limitowana edycja letniego wyposażenia 2016.", "headSpecialSummer2016MageText": "Kapelusz z Deszczu Pod Rynnę", "headSpecialSummer2016MageNotes": "Magiczna woda ciągle tryska z tego kapelusza. Zwiększa percepcję o <%= per %>. Edycja Limitowana Lato 2016.", "headSpecialSummer2016HealerText": "Hełm konika morskiego", @@ -996,7 +996,7 @@ "headSpecialFall2016WarriorText": "Hełm z Sękatej Kory", "headSpecialFall2016WarriorNotes": "Ten przemoczony hełm jest pokryty kawałkami bagna. Zwiększa Siłę o <%= str %>. Edycja Limitowana Jesiennego Wyposażenia 2016.", "headSpecialFall2016MageText": "Kaptur Nikczemności", - "headSpecialFall2016MageNotes": "Ukryj swoje niecne zamiary pod tym cienistym kapturem. Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2016.", + "headSpecialFall2016MageNotes": "Ukryj swoje niecne zamiary pod tym cienistym kapturem. Zwiększa Percepcję o <%= per %>. Limitowana Edycja Wyposażenia, jesień 2016.", "headSpecialFall2016HealerText": "Korona Meduzy", "headSpecialFall2016HealerNotes": "Biada każdemu kto spojrzy ci w oczy... Zwiększa Inteligencję o <%= int %>. Edycja limitowana jesiennego wyposażenia 2016.", "headSpecialNye2016Text": "Fikuśna Czapka Imprezowa", @@ -1012,7 +1012,7 @@ "headSpecialSpring2017RogueText": "Hełm chytrego królika", "headSpecialSpring2017RogueNotes": "Ta maska pozwoli ci ukryć swoją bystrość przed niczego nie spodziewającymi się Codziennymi (i koniczynami)! Zwiększa percepcję o <%= per %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017WarriorText": "Koci hełm", - "headSpecialSpring2017WarriorNotes": "Chroń swój cudowny puszysty czerep tym pięknie wykończonym hełmem. Zwiększa siłę o <%= str %>. Edycja Limitowana Wiosna 2017.", + "headSpecialSpring2017WarriorNotes": "Chroń swój cudowny puszysty czerep tym pięknie wykończonym hełmem. Zwiększa siłę o <%= str %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017MageText": "Magiczny psi kapelusz", "headSpecialSpring2017MageNotes": "Ten kapelusz pomoże ci rzucać potężne zaklęcia... Lub po prostu wyczarować piłki tenisowe. Twój wybór. Zwiększa percepcję o <%= per %>. Edycja Limitowana Wiosna 2017.", "headSpecialSpring2017HealerText": "Płatkowy diadem", @@ -1228,7 +1228,7 @@ "headArmoireIronBlueArcherHelmText": "Niebieski żelazny hełm łucznika", "headArmoireIronBlueArcherHelmNotes": "Twardogłowy? Nie, po prostu dobrze chroniony. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw żelaznego łucznika (przedmiot 1 z 3).", "headArmoireWoodElfHelmText": "Drewniany hełm elfa", - "headArmoireWoodElfHelmNotes": "Ten hełm z liści może wydawać się delikatny, ale zapewnia Ci ochronę przed srogą pogodą i groźnymi przeciwnikami. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw drewnianego elfa (przedmiot 1 z 3).", + "headArmoireWoodElfHelmNotes": "Ten hełm z liści może wydawać się delikatny, ale zapewnia Ci ochronę przed srogą pogodą i groźnymi przeciwnikami. Zwiększa Kondycję o <%= con %>. Zaczarowana Skrzynia: Zestaw drewnianego elfa (przedmiot 1 z 3).", "headArmoireRamHeaddressText": "Baranie nakrycie głowy", "headArmoireRamHeaddressNotes": "This elaborate helm is fashioned to look like a ram's head. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: Ram Barbarian Set (Item 1 of 3).", "headArmoireCrownOfHeartsText": "Sercowa korona", @@ -1315,7 +1315,7 @@ "shieldSpecialYetiText": "Tarcza poskramiacza Yeti", "shieldSpecialYetiNotes": "Tarcza błyszczy światłem bijącym od śniegu. Zwiększa kondycję o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", "shieldSpecialSnowflakeText": "Tarcza śnieżynki", - "shieldSpecialSnowflakeNotes": "Każda tarcza jest niepowtarzalna. Wzrost kondycji o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", + "shieldSpecialSnowflakeNotes": "Każda tarcza jest niepowtarzalna. Wzrost kondycji o <%= con %>. Edycja Limitowana Zimowego Wyposażenia 2013-2014.", "shieldSpecialSpringWarriorText": "Jajeczna tarcza", "shieldSpecialSpringWarriorNotes": "Ta tarcza nigdy nie pęknie, niezależnie od siły, która na nią naprze! Zwiększa kondycję o <%= con %>. Edycja Limitowana, wiosna 2014.", "shieldSpecialSpringHealerText": "Piszcząca piłka ostatecznej ochrony", @@ -1355,9 +1355,9 @@ "shieldSpecialSummer2016WarriorText": "Ząb rekina", "shieldSpecialSummer2016WarriorNotes": "Ugryź trudne zadania z tą zębatą tarczą! Zwiększa Kondycję o <%= con %>. Edycja Limitowana Letniego Wyposażenia 2016.", "shieldSpecialSummer2016HealerText": "Tarcza gwiazdy morskiej", - "shieldSpecialSummer2016HealerNotes": "Czasami błędnie nazywana Tarczą Rozgwiazdy. Zwiększa Kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", + "shieldSpecialSummer2016HealerNotes": "Czasami błędnie nazywana Tarczą Rozgwiazdy. Zwiększa Kondycję o <%= con %>. Limitowana edycja letniego wyposażenia 2016.", "shieldSpecialFall2016WarriorText": "Korzenie obronne", - "shieldSpecialFall2016WarriorNotes": "Broń się przed Codziennymi przy pomocy tych wijących się korzeni! Zwiększa kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", + "shieldSpecialFall2016WarriorNotes": "Broń się przed Codziennymi przy pomocy tych wijących się korzeni! Zwiększa kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", "shieldSpecialFall2016HealerText": "Tarcza gorgony", "shieldSpecialFall2016HealerNotes": "W tej tarczy nie podziwiaj swojego odbicia. Zwiększa Kondycję o <%= con %>. Edycja limitowana wyposażenia, jesień 2016.", "shieldSpecialWinter2017WarriorText": "Krążkowa Tarcza", @@ -1645,7 +1645,7 @@ "headAccessoryMystery201403Text": "Poroże przemierzania lasów", "headAccessoryMystery201403Notes": "To poroże lśni od mchów i porostów. Brak dodatkowych korzyści. Przedmiot Abonencki, marzec 2014.", "headAccessoryMystery201404Text": "Czułki motyla zmierzchu", - "headAccessoryMystery201404Notes": "Te czułki umożliwiają noszącemu wykrycie niebezpiecznych źródeł rozproszenia! Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2014.", + "headAccessoryMystery201404Notes": "Te czułki umożliwiają noszącemu wykrycie niebezpiecznych źródeł rozproszenia! Brak dodatkowych korzyści. Przedmiot Abonencki, kwiecień 2014.", "headAccessoryMystery201409Text": "Jesienne poroże", "headAccessoryMystery201409Notes": "To potężne poroże zmienia kolor wraz z liśćmi. Brak dodatkowych korzyści. Przedmiot Abonencki, wrzesień 2014.", "headAccessoryMystery201502Text": "Skrzydła myśli", @@ -1722,7 +1722,7 @@ "weaponArmoireNephriteBowText": "Łuk Nefrytu", "weaponArmoireNephriteBowNotes": "Z tego łuku można strzelać specjalnymi strzałami z jadeitu, które powalą nawet najbardziej uparte, złe nawyki!. Zwiększa Inteligencję o <%= int %> i Siłę o <%= str %>. Zaczarowana Skrzynia: Zestaw Łucznika Nefrytu (Przedmiot 1 z 3).", "weaponArmoireBambooCaneText": "Bambusowa Trzcinka", - "weaponArmoireBambooCaneNotes": "Perfekcyjna, jeśli chodzi o wspomaganie przy spacerach lub podczas tańczenia charlestona. Zwiększa Inteligencję, Percepcję i Kondycję, każde o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Żeglarski (Przedmiot 3 z 3).", + "weaponArmoireBambooCaneNotes": "Perfekcyjna, jeśli chodzi o wspomaganie przy spacerach lub podczas tańczenia charlestona. Zwiększa Inteligencję, Percepcję i Kondycję, każde o <%= attrs %>. Zaczarowana Skrzynia: Zestaw Żeglarski (Przedmiot 3 z 3).", "armorMystery201906Text": "Ogon Uprzejmego Karpia", "eyewearMystery201907Text": "Słodkie Okulary Przeciwsłoneczne", "eyewearMystery201907Notes": "Wyglądają niesamowicie, a dodatkowo chronią oczy przed promieniami UV! Brak dodatkowych korzyści. Przedmiot subskrybenta, lipiec 2019.", @@ -1755,7 +1755,7 @@ "weaponSpecialSpring2019MageText": "Bursztynowa Laska", "weaponSpecialSpring2019HealerText": "Pieśń Wiosny", "weaponSpecialSpring2019MageNotes": "W bursztynie na końcu tej laski jest komar! Może, ale nie musi zawierać DNA dinozaura. Podnosi Inteligencję o <%= int %> oraz Percepcję o <%= per %>. Edycja Limitowana Wiosennego Wyposażenia 2019.", - "weaponSpecialSpring2019HealerNotes": "Twa pieśń kwiatów i deszczu ukoi dusze wszystkich słuchaczy. Zwiększa Inteligencję o <%= int %>. Limitowana Edycja Wiosennego Wyposażenia 2019.", + "weaponSpecialSpring2019HealerNotes": "Twa pieśń kwiatów i deszczu ukoi dusze wszystkich słyszących. Zwiększa Inteligencję o <%= int %>. Limitowana Edycja Wiosennego Wyposażenia 2019.", "weaponSpecialSummer2019RogueText": "Przestarzała Kotwica", "weaponSpecialSummer2019RogueNotes": "Ta pradawna i potężna broń pomoże ci wygrać każdą podwodną bitwę. Podnosi Siłę o <%= str %>.. Limitowana Edycja Wiosennego Wyposażenia 2019.", "weaponSpecialFall2019RogueText": "Pulpit Do Nut", diff --git a/website/common/locales/pl/generic.json b/website/common/locales/pl/generic.json index c8ead4df91..c2fccf857a 100644 --- a/website/common/locales/pl/generic.json +++ b/website/common/locales/pl/generic.json @@ -25,7 +25,7 @@ "user": "Użytkownik", "market": "Targ", "newSubscriberItem": "Masz nowy Tajemniczy Przedmiot", - "subscriberItemText": "W każdym miesiącu abonenci otrzymają Mistyczny Przedmiot. Staje się on dostępny na początku miesiąca. Aby uzyskać więcej informacji, zobacz stronę \"Mystery Item\" na wiki.", + "subscriberItemText": "Abonenci na początku każdego miesiąca otrzymują nowy tajemniczy zestaw do ekwipunku!", "all": "Wszystkie", "none": "Żadne", "more": "<%= count %> więcej", @@ -189,7 +189,7 @@ "dismissAll": "Odrzuć wszystko", "messages": "Wiadomości", "emptyMessagesLine1": "Nie masz żadnych wiadomości", - "emptyMessagesLine2": "Aby wysłać wiadomość do Użytkownika, wejdź na jego profil, a następnie kliknij przycisk \"Wiadomości\".", + "emptyMessagesLine2": "Wyślij wiadomość, aby zacząć rozmowę z członkami Twojej Drużyny lub innymi graczami Habitica", "userSentMessage": "<%- user %> wysłał ci wiadomość", "letsgo": "Jazda!", "selected": "Wybrane", @@ -221,5 +221,25 @@ "question": "Pytanie", "questionPlaceholder": "Zadaj swoje pytanie tutaj", "submitQuestion": "Zadaj pytanie", - "questionDescriptionText": "Możesz zadać pytanie w swoim ojczystym języku, jeżeli nie czujesz się pewnie, mówiąc po angliesku." + "questionDescriptionText": "Możesz zadać pytanie w swoim ojczystym języku, jeżeli nie czujesz się pewnie, mówiąc po angielsku.", + "askQuestionHeaderDescribe": "Pierwszy raz korzystasz z Habitica i nie wiesz, co robisz? A może jesteś weteranem, ale nie możesz zrozumieć jak działa jedna z funkcji? Wypełnij ten formularz, a nasz zespół odezwie się do Ciebie.", + "titleCustomizations": "Personalizacje", + "allNotifications": "Wszystkie Powiadomienia", + "mutePlayer": "Wycisz", + "reportPlayer": "Zgłoś Gracza", + "blockPlayer": "Zablokuj Gracza", + "unblockPlayer": "Odblokuj Gracza", + "adminTools": "Narzędzia Administratora", + "viewAdminPanel": "Wyświetl Panel Administratora", + "newMessage": "Nowa Wiadomość", + "general": "Ogólne", + "playerReportModalBody": "Należy zgłaszać wyłącznie Graczy, którzy naruszają <%= firstLinkStart %>Regulamin Społeczności<%= linkEnd %> i/lub <%= secondLinkStart %>Warunki korzystania z Usług<%= linkEnd %>. Złożenie fałszywego zgłoszenia stanowi naruszenie Regulaminu Społeczności.", + "banPlayer": "Zbanuj Gracza", + "unbanPlayer": "Anuluj zbanowanie Gracza", + "bannedPlayer": "Ten Gracz został zbanowany.", + "whyReportingPlayer": "Dlaczego zgłaszasz tego Gracza?", + "whyReportingPlayerPlaceholder": "Powód zgłoszenia", + "targetUserNotExist": "Docelowy Użytkownik: '<%= userName %>' nie istnieje.", + "shadowMute": "Wygłuszenie Cienia", + "rememberToBeKind": "Pamiętaj proszę o tym, aby być uprzejmym i pełnym szacunku względem innych Graczy oraz aby przestrzegać Regulamin Społeczności." } diff --git a/website/common/locales/pl/limited.json b/website/common/locales/pl/limited.json index e4972ee5bd..113c58d1a8 100644 --- a/website/common/locales/pl/limited.json +++ b/website/common/locales/pl/limited.json @@ -53,7 +53,7 @@ "seasonalItems": "Przedmioty sezonowe", "nyeCardAchievementTitle": "Starzy znajomi", "nyeCardAchievementText": "Szczęśliwego Nowego Roku! Wysłał lub otrzymał <%= count %> kartek noworocznych.", - "nye0": "Szczęśliwego Nowego Roku! Obyś zgładził wiele złych nawyków.", + "nye0": "Szczęśliwego Nowego Roku! Obyś zgładził wiele złych nawyków.", "nye1": "Szczęśliwego Nowego Roku! Obyś zebrał wiele nagród.", "nye2": "Szczęśliwego Nowego Roku! Obyś zdobył wiele doskonałych dni.", "nye3": "Szczęśliwego Nowego Roku! Niech twoja lista zadań Do Zrobienia pozostanie krótka i przyjemna.", diff --git a/website/common/locales/pl/quests.json b/website/common/locales/pl/quests.json index 2d5c76ad58..90533e6d84 100644 --- a/website/common/locales/pl/quests.json +++ b/website/common/locales/pl/quests.json @@ -29,13 +29,13 @@ "collected": "Zebrano", "abort": "Przerwij", "leaveQuest": "Opuść misję", - "sureLeave": "Czy na pewno chcesz opuścić aktywną misję? Cały twój postęp zostanie stracony.", + "sureLeave": "Czy na pewno chcesz opuścić Misję? Cały twój postęp zostanie stracony.", "mustComplete": "Musisz najpierw ukończyć <%= quest %>.", "mustLvlQuest": "Musisz mieć co najmniej poziom <%= level %>, żeby kupić tę misję!", "unlockByQuesting": "By odblokować tę misję, ukończ <%= title %>.", - "questConfirm": "Jesteś pewien? Tylko <%= questmembers %> z <%= totalmembers %> członków drużyny dołączyło do zadania! Zadania rozpoczynają się automatycznie, kiedy wszyscy gracze przyjęli lub odrzucili zaproszenie.", - "sureCancel": "Czy na pewno chcesz zakończyć tę misję? Wszystkie zaakceptowane zaproszenia zostaną stracone. Właściciel misji zachowa zwój misji.", - "sureAbort": "Czy na pewno chcesz porzucić tę misję? Zostanie przerwana dla każdego członka twojej drużyny i cały postęp zostanie stracony. Zwój misji zostanie zwrócony właścicielowi.", + "questConfirm": "Jesteś pewien, że chcesz rozpocząć tę Misję? Jeszcze nie wszyscy członkowie Drużyny zaakceptowali zaproszenie. Misje rozpoczną się automatycznie po tym, jak wszyscy członkowie odpowiedzą na zaproszenie.", + "sureCancel": "Czy na pewno chcesz zakończyć tę Misję? Anulowanie Misji spowoduje anulowanie wszystkich zaakceptowanych i oczekujących zaproszeń. Zwój Misji zostanie zwrócony do ekwipunku właściciela.", + "sureAbort": "Czy na pewno chcesz anulować tę Misję? Cały postęp zostanie utracony. Zwój Misji zostanie zwrócony właścicielowi.", "bossRageDescription": "Gdy pasek się zapełni, boss wykona atak specjalny!", "startQuest": "Rozpocznij Misję", "questInvitationDoesNotExist": "Nie zostały jeszcze wysłane żadne zaproszenia na misję.", diff --git a/website/common/locales/pl/subscriber.json b/website/common/locales/pl/subscriber.json index 745d87f040..7d1d64fd23 100644 --- a/website/common/locales/pl/subscriber.json +++ b/website/common/locales/pl/subscriber.json @@ -2,7 +2,7 @@ "subscription": "Abonament", "subscriptions": "Abonamenty", "sendGems": "Wyślij Klejnoty", - "buyGemsGold": "Kup Klejnoty za Złoto", + "buyGemsGold": "Comiesięczne Darmowe Klejnoty", "mustSubscribeToPurchaseGems": "Musisz mieć abonament żeby kupić klejnoty za złoto", "reachedGoldToGemCapQuantity": "Ilość na która wyraziłeś zapotrzebowanie<%= quantity %> przekracza limit ilości wymian <%= convCap %> na ten miesiąc. Limit resetuje się w pierwszych trzech dniach każdego miesiąca. Dziękujemy, że nas wspierasz!", "mysteryItem": "Wyjątkowe comiesięczne przedmioty", @@ -91,7 +91,7 @@ "mysterySet301703": "Zestaw steampunkowego pawia", "mysterySet301704": "Zestaw steampunkowego bażanta", "mysterySetwondercon": "Konwent Wspaniałości", - "subUpdateCard": "Zmień Kartę Kredytową", + "subUpdateCard": "Edytuj Kartę Kredytową", "subUpdateTitle": "Aktualizuj", "notEnoughHourglasses": "Nie masz wystarczająco Mistycznych Klepsydr.", "petsAlreadyOwned": "Masz już tego chowańca.", @@ -114,13 +114,13 @@ "couponUsed": "Kod promocyjny został wcześniej wykorzystany.", "couponCodeRequired": "Kod promocyjny jest wymagany.", "choosePaymentMethod": "Wybierz metodę płatności", - "support": "WSPARCIE", + "support": "Wsparcie", "gemBenefitLeadin": "Co możesz kupić za Klejnoty?", "gemBenefit1": "Unikalne i modne kostiumy dla Twojego awatara.", "gemBenefit2": "Tła, by zaaklimatyzować Twoją postać w świecie Habitica!", "gemBenefit3": "Ekscytujące misje, które pozwalają zdobyć jaja z chowańcami.", "gemBenefit4": "Zresetuj Statystyki Swojego awatara i zmień jego klasę.", - "subscriptionBenefit1": "Kupiec Alexander sprzeda Ci klejnoty z marketu, każdy za 20 Dukatów!", + "subscriptionBenefit1": "Zdobądź nawet do 50 Klejnotów, które można kupić za złoto na Targu i kupuj za nie Misje, Personalizacje, Chowańce i wiele więcej!", "subscriptionBenefit3": "Odkryj więcej przedmiotów w Habitice z podwojoną szansą na drop.", "subscriptionBenefit4": "Unikalne kosmetyczne przedmioty dla Twojej postaci każdego miesiąca.", "subscriptionBenefit5": "Otrzymaj ekskluzywnego zwierzaka - Purpurowego królewskiego Jackalope, kiedy zostaniesz nowym Abonamentem.", @@ -143,7 +143,7 @@ "mysterySet201912": "Zestaw Polarnej Wróżki", "mysterySet201911": "Zestaw Kryształowego Czarodzieja", "mysterySet201910": "Tajemniczy Zestaw Płomieni", - "backgroundAlreadyOwned": "Już posiadasz te tło.", + "backgroundAlreadyOwned": "Już posiadasz to tło.", "mysticHourglassNeededNoSub": "Ten przedmiot wymaga Mistycznej Klepsydry. Możesz zdobywać Mistyczne Klepsydry zostając subskrybentem w Habitica.", "viewSubscriptions": "Widok abonamentów", "mysterySet202002": "Stylowy Zestaw Zakochanych", @@ -207,10 +207,38 @@ "mysterySet202210": "Zestaw Złowieszczej Żmii", "mysterySet202301": "Zestaw Lotnego Lisa", "mysterySet202211": "Zestaw Elektromanty", - "mysterySet202207": "Zestaw Galanteryjnej Galarety", + "mysterySet202207": "Zestaw Pomyślnej Meduzy", "mysterySet202202": "Turkusowy Zestaw Mysich Ogonków", "mysterySet202212": "Zestaw Śnieżnego Strażnika", "mysterySet202305": "Zestaw Spokojnego Smoka", "mysterySet202302": "Zestaw Dowcipnego Dachowca", - "mysterySet202304": "Zestaw Imponującego Imbryczka" + "mysterySet202304": "Zestaw Imponującego Imbryczka", + "mysterySet202404": "Zestaw Grzybowego Guślarza", + "mysterySet202312": "Zestaw Błękitnej Zimy", + "mysterySet202403": "Zestaw Fortunnej Legendy", + "mysterySet202401": "Zestaw Śnieżnego Czarownika", + "mysterySet202410": "Zestaw Kukurydzianego Lisa Łakoci", + "mysterySet202409": "Zestaw Heliotropowego Maga", + "mysterySet202407": "Zestaw Życzliwego Aksolotla", + "mysterySet202408": "Zestaw Zagadkowej Egidy", + "mysterySet202504": "Zestaw Nieuchwytnego Yeti", + "mysterySet202402": "Zestaw Goździkowego Raju", + "mysterySet202412": "Zestaw Cukierkowego Króliczka", + "mysterySet202503": "Zestaw Jadeitowego Dziwotwora", + "mysterySet202501": "Zestaw Lodożercy", + "mysterySet202308": "Zestaw Purpurowego Protagonisty", + "mysterySet202502": "Zestaw Serdecznego Arlekina", + "mysterySet202405": "Zestaw Pozłacanego Smoka", + "mysterySet202406": "Zestaw Upiornego Pirata", + "mysterySet202411": "Zestaw Najeżonego Awanturnika", + "mysterySet202506": "Zestaw Słonecznego Blasku", + "mysterySet202505": "Zestaw Podniebnego Pazia", + "mysterySet202311": "Zestaw Wszechwidzącego Zaklinacza", + "mysterySet202306": "Zestaw Tęczowej Balangi", + "mysterySet202307": "Zestaw Groźnego Krakena", + "mysterySet202309": "Zestaw Kolosalnej Kometowej Ćmy", + "mysterySet202310": "Zestaw Świetlistego Widma", + "subscribeTo": "Subskrybuj", + "monthlyGemsLabel": "Comiesięczne Klejnoty", + "mysterySet202507": "Zestaw śmiałego Łyżwiarza" } diff --git a/website/common/locales/pt/achievements.json b/website/common/locales/pt/achievements.json index b829596e4f..2af45ad500 100644 --- a/website/common/locales/pt/achievements.json +++ b/website/common/locales/pt/achievements.json @@ -1,7 +1,7 @@ { - "achievement": "Conquista", - "onwards": "Em frente!", - "levelup": "Ao cumprir seus objetivos na vida real, você subiu de nível e está totalmente curado!", + "achievement": "Proeza", + "onwards": "Avante!", + "levelup": "Por ter alcançado os seus objectivos na vida real, subiu de nível e está agora plenamente curado!", "reachedLevel": "Alcançou o nível <%= level %>", "achievementLostMasterclasser": "Completista de Missões: Série de Mestre de Classes", "achievementLostMasterclasserText": "Completou as dezesseis missões na série de Missões de Mestre de Classes e resolveu o mistério do Mestre de Classes Perdido!", @@ -74,7 +74,7 @@ "achievementPrimedForPainting": "Pronto a Pintar", "achievementKickstarter2019Text": "Apoiou o Projeto Pin do Kickstarter de 2019", "achievementKickstarter2019": "Apoiante do Pin Kickstarter", - "yourRewards": "Suas Recompensas", + "yourRewards": "As suas recompensas", "achievementUndeadUndertaker": "Cangalheiro Morto-vivo", "achievementFreshwaterFriendsModalText": "Você completou as missões dos Mascotes Salamandra, Sapo e Hipopótamo!", "achievementFreshwaterFriendsText": "Completou as missões dos Mascotes Salamandra, Sapo e Hipopótamo.", diff --git a/website/common/locales/pt/gear.json b/website/common/locales/pt/gear.json index 4fc75f8e30..8364329c72 100644 --- a/website/common/locales/pt/gear.json +++ b/website/common/locales/pt/gear.json @@ -5,7 +5,7 @@ "groupBy": "Agrupar por <%= type %>", "classBonus": "(Este item coincide com a sua classe por isso recebe um multiplicador adicional de 1.5 às características)", "classArmor": "Armadura de Classe", - "featuredset": "Conjunto promovido <%= name %>", + "featuredset": "Conjunto exibido: <%= name %>", "mysterySets": "Conjuntos Mistério", "gearNotOwned": "Você não possui este ítem.", "noGearItemsOfType": "Você não possui qualquer um destes items.", @@ -52,7 +52,7 @@ "weaponWizard0Text": "Cajado de Aprendiz", "weaponWizard0Notes": "Cajado para praticar. Não concede benefícios.", "weaponWizard1Text": "Cajado de Madeira", - "weaponWizard1Notes": "Implementação básica de uma madeira entalhada. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", + "weaponWizard1Notes": "Implementação básica de uma madeira entalhada. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", "weaponWizard2Text": "Cajado de Joias", "weaponWizard2Notes": "Concentra poder através de uma pedra preciosas. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>.", "weaponWizard3Text": "Cajado de Ferro", @@ -106,7 +106,7 @@ "weaponSpecialSkeletonKeyText": "Chave Esqueleto", "weaponSpecialSkeletonKeyNotes": "Os melhores Ladrões Furtivos possuem uma chave que pode abrir qualquer fechadura! Aumenta Constituição em <%= con %>.", "weaponSpecialNomadsScimitarText": "Cimitarra do Nómada", - "weaponSpecialNomadsScimitarNotes": "A lâmina curva desta Cimitarra é perfeita para atacar Tarefas quando no topo de uma montaria! Aumenta Inteligência em <%= int %>.", + "weaponSpecialNomadsScimitarNotes": "A lâmina curva desta Cimitarra é perfeita para atacar Tarefas quando no topo de uma montaria! Aumenta Inteligência em <%= int %>.", "weaponSpecialFencingFoilText": "Florete de Esgrima", "weaponSpecialFencingFoilNotes": "Caso alguém ouse desafiar a sua honra, estará pronto com este belo florete! Aumenta Força em <%= str %>.", "weaponSpecialTachiText": "Tachi", @@ -150,11 +150,11 @@ "weaponSpecialWinter2015WarriorText": "Espada de Goma", "weaponSpecialWinter2015WarriorNotes": "Esta deliciosa espada provavelmente atrai monstros... mas você está pronto para o desafio! Aumenta Força em <%= str %> pontos. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialWinter2015MageText": "Cajado de Inverno Iluminado", - "weaponSpecialWinter2015MageNotes": "A luz desse cajado de cristal enche corações de alegria. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Inverno 2014-2015.", + "weaponSpecialWinter2015MageNotes": "A luz desse cajado de cristal enche corações de alegria. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialWinter2015HealerText": "Cetro Alentador", "weaponSpecialWinter2015HealerNotes": "Este cetro relaxa músculos doloridos e alivia o estresse. Aumenta Inteligência em <%= int %>. Equipamento Edição Limitada de Inverno 2014-2015.", "weaponSpecialSpring2015RogueText": "Guinchado Explosivo", - "weaponSpecialSpring2015RogueNotes": "Não deixe o som te enganar - esses explosivos são poderosos. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", + "weaponSpecialSpring2015RogueNotes": "Não deixe o som te enganar - esses explosivos são poderosos. Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSpring2015WarriorText": "Clava de Osso", "weaponSpecialSpring2015WarriorNotes": "É uma legítima clava de osso para cachorrinhos super ferozes e definitivamente não um brinquedo de mastigar que a Feiticeira Sazonal te deu porque quem é um bom garoto! Queeem é um bom garoto? Você!!! Você é um bom garoto!!! Aumenta Força em <%= str %>. Equipamento Edição Limitada de Primavera 2015.", "weaponSpecialSpring2015MageText": "Varinha do Mago", @@ -210,7 +210,7 @@ "weaponSpecialFall2016HealerText": "Serpente Venenosa", "weaponSpecialFall2016HealerNotes": "Uma mordia machuca, e outra mordida recupera. Aumenta inteligência em <%= int %>. Edição limitada 2016 Equipamento de Outono.", "weaponSpecialWinter2017RogueText": "Machado de Gelo", - "weaponSpecialWinter2017RogueNotes": "Este machado é ótimo para ataque, defesa e trepar gelo! Aumenta a Força em <%= str %>. Edição Limitada do Equipamento de Inverno 2016-2017.", + "weaponSpecialWinter2017RogueNotes": "Este machado é ótimo para ataque, defesa e escalada no gelo! Aumenta a Força em <%= str %>. Edição Limitada do Equipamento de Inverno 2016-2017.", "weaponSpecialWinter2017WarriorText": "Cajado da Força", "weaponSpecialWinter2017WarriorNotes": "Conquiste os seus objetivos batendo-lhes com este poderoso cajado! Aumenta a Forca em <%= str %>. Equipamento de Inverno da Edição Limitada 2016-2017.", "weaponSpecialWinter2017MageText": "Cajado de Cristal do Lobo de Inverno", @@ -352,7 +352,7 @@ "weaponArmoireWeaversCombText": "Pente de Tecelão", "weaponArmoireWeaversCombNotes": "Use este pente para agrupar os seus fios cruzados de forma a tecer um tecido forte. Aumenta Percepção em <%= per %> e Força em <%= str %>. Armário Encantado: Conjunto de Tecelão (Item 2 de 3).", "weaponArmoireLamplighterText": "Acende-lâmpadas", - "weaponArmoireLamplighterNotes": "Este pau longo tem um pavío numa das pontas para acender lâmpadas e um gancho na outra para as apagar. Aumenta Constuição por <%= con %> e Percepção por <%= per %>. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 1 de 4)", + "weaponArmoireLamplighterNotes": "Este pau longo tem um pavío em uma das pontas para acender lâmpadas e um gancho na outra para as apagar. Aumenta Constituição por <%= con %> e Percepção por <%= per %>. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 1 de 4).", "weaponArmoireCoachDriversWhipText": "Chicote de Cocheiro", "weaponArmoireCoachDriversWhipNotes": "Os seus corceis sabem o que estão a fazer, por isso este chicote é só para espetáculo (e pelo som bacano do estalar!). Aumenta Inteligência em <%= int %> e Força em <%= str %>. Armário Encantado: Conjunto do Condutor de Carruagem (Item 3 de 3).", "weaponArmoireScepterOfDiamondsText": "Ceptro de Ouros", @@ -372,7 +372,7 @@ "weaponArmoireSpearOfSpadesText": "Lança de Espadas", "weaponArmoireSpearOfSpadesNotes": "Esta lança de cavaleiro é perfeita para atacar os seus Hábitos e Tarefas Diárias mais vermelhas. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Ás de Espadas (Item 3 de 3).", "weaponArmoireArcaneScrollText": "Pergaminho Arcano", - "weaponArmoireArcaneScrollNotes": "Esta lista de Afazeres antiga está cheia de estranhos simbolos e feitiços de uma era esquecida. Aumenta Inteligência em <%= int %>. Armário Encantado: Conjunto de Escriba (Item 3 de 3).", + "weaponArmoireArcaneScrollNotes": "Esta antiga lista de Afazeres está cheia de simbolos estranhos e feitiços de uma era esquecida. Aumenta Inteligência em <%= int %>. Armário Encantado: Conjunto do Escriba (Item 3 de 3).", "armor": "armadura", "armorCapitalized": "Armadura", "armorBase0Text": "Roupas Modestas", @@ -471,8 +471,8 @@ "armorSpecialBirthday2017Notes": "Feliz Aniversário, Habitica! Vista esta Túnicas Caprichosa de Festa para celebrar este dia maravilhoso. Não confere benefícios.", "armorSpecialBirthday2018Text": "Manto de Festa Fantasioso", "armorSpecialBirthday2018Notes": "Feliz aniversário, Habitica! Usa este Manto de Festa Fantasioso para celebrar este dia maravilhoso. Não confere qualquer benefício.", - "armorSpecialBirthday2019Text": "Outlandish Party Robes", - "armorSpecialBirthday2019Notes": "Happy Birthday, Habitica! Wear these Outlandish Party Robes to celebrate this wonderful day. Confers no benefit.", + "armorSpecialBirthday2019Text": "Túnicas de Festa Excêntricas", + "armorSpecialBirthday2019Notes": "Feliz Aniversário, Habitica! Vista estas Túnicas de Festa Excêntricas para celebrar este dia maravilhoso. Não confere benefícios.", "armorSpecialGaymerxText": "Armadura do Guerreiro Arco-Íris", "armorSpecialGaymerxNotes": "Para celebrar a Conferência GaymerX, esta armadura especial foi decorada com uma colorida e radiante estampa arco-íris. A GaymerX é uma conferência de games que celebra a comunidade LGTBQ e jogos, sendo aberta para todo mundo.", "armorSpecialSpringRogueText": "Traje Elegante de Gato", @@ -540,7 +540,7 @@ "armorSpecialWinter2016HealerText": "Manto de Fadas festivo", "armorSpecialWinter2016HealerNotes": "Fadas Festivas enrolam suas asas corporais em torno de si mesmas para proteção ao mesmo tempo em que usam as asas de duas cabeças para pegar ventos contrários e voar por Habitica a velocidades de até 100 mph, entregando presentes e pulverizando todos com confetes. Que divertido. Aumenta Constituição em <%= con %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "armorSpecialSpring2016RogueText": "Traje Canino de Camo", - "armorSpecialSpring2016RogueNotes": "Um pequeno filhote sabe escolher a aparência brilhante para dissimulação quando tudo é verde e vibrante. Aumenta a Percepção em <%= per %>. Edição Limitada 2016 Equipamento de Primavera.", + "armorSpecialSpring2016RogueNotes": "Um pequeno filhote sabe escolher uma aparência mais brilhante para dissimulação quando tudo é verde e vibrante. Aumenta a Percepção em <%= per %>. Edição Limitada 2016 Equipamento de Primavera.", "armorSpecialSpring2016WarriorText": "Armadura Poderosa", "armorSpecialSpring2016WarriorNotes": "Embora você seja pequeno, você é feroz! Aumenta constituição em <%= con %>. Equipamento da Edição Limitada de Primavera 2016.", "armorSpecialSpring2016MageText": "Grande Vestido de Malkin", @@ -791,10 +791,10 @@ "armorArmoireCoachDriverLiveryNotes": "Este casaco pesado protegê-lo-á do tempo enquanto conduz. Mais, também o faz parecer janota! Aumenta Força em <%= str %>. Armário Encantado: Conjunto de Condutor de Carruagem (Item 1 de 3).", "armorArmoireRobeOfDiamondsText": "Manto de Diamantes", "armorArmoireRobeOfDiamondsNotes": "Este manto real pode o fazer parecer nobre, mas irão permitir que veja a nobreza no interior de outras pessoas. Aumenta Perceção em <%= per %>. Armário Encantado: Conjunto do Rei de Diamantes (Item 1 de 4).", - "armorArmoireFlutteryFrockText": "Fluttery Frock", - "armorArmoireFlutteryFrockNotes": "A light and airy gown with a wide skirt the butterflies might mistake for a giant blossom! Increases Constitution, Perception, and Strength by <%= attrs %> each. Enchanted Armoire: Fluttery Frock Set (Item 1 of 4).", + "armorArmoireFlutteryFrockText": "Vestido Esvoaçante", + "armorArmoireFlutteryFrockNotes": "Um leve e delicado vestido com uma larga saia que borboletas podem confundir com uma flor gigante! Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Baú Encantado: Conjunto Vestido Esvoaçante (Item 1 de 4).", "armorArmoireCobblersCoverallsText": "Macacão de Sapateiro", - "armorArmoireCobblersCoverallsNotes": "These sturdy coveralls have lots of pockets for tools, leather scraps, and other useful items! Increases Perception and Strength by <%= attrs %> each. Enchanted Armoire: Cobbler Set (Item 1 of 3).", + "armorArmoireCobblersCoverallsNotes": "Estes macacões robustos possuem muitos bolsos para ferramentas, retalhos de couro e outros itens úteis! Aumenta Percepção e Força em <%= attrs %> cada. Baú Encantado: Conjunto do Sapateiro (Item 1 de 3).", "armorArmoireGlassblowersCoverallsText": "Macacão de Vidraceiro", "armorArmoireGlassblowersCoverallsNotes": "Este macacão irá providenciar protecção enquanto cria obras de arte com vidro quete derretido. Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto de Vidraceiro (Item 2 de 4).", "armorArmoireBluePartyDressText": "Vestido de Festa Azul", @@ -813,8 +813,8 @@ "armorArmoireSoftGreenSuitNotes": "Verde é a cor mais refrescante! Ideal para descansar esses olhos fatigados... mmm ou mesmo bater uma soneca... Aumenta Constituição e Inteligência em <%= attrs %> cada. Armário Encantado: Conjunto de Pijama Verde (Item 2 de 3).", "armorArmoireSoftRedSuitText": "Fato Vermelho Suave", "armorArmoireSoftRedSuitNotes": "O Vermelho é uma cor tão fortalecedora. Se precisa de acordar com energia e cedo, este fato pode ser um pijama perfeito... Aumenta Inteligência em <%= int %> e Força em <%= str %>. Armário Encantado: Conjunto de Pijama Vermelho (Item 2 de 3).", - "armorArmoireScribesRobeText": "Scribe's Robes", - "armorArmoireScribesRobeNotes": "These velvety robes are woven with inspirational and motivational magic. Increases Perception and Intelligence by <%= attrs %> each. Enchanted Armoire: Scribe Set (Item 1 of 3).", + "armorArmoireScribesRobeText": "Túnicas do Escriba", + "armorArmoireScribesRobeNotes": "Estas túnicas aveludadas são tecidas com magia inspiracional e motivacional. Aumenta Percepção e Inteligência em <%= attrs %> cada. Baú Encantado: Conjunto do Escriba (Item 1 de 3).", "headgear": "elmo", "headgearCapitalized": "Capacete", "headBase0Text": "Nenhum equipamento de cabeça", @@ -862,11 +862,11 @@ "headSpecial0Text": "Elmo Sombrio", "headSpecial0Notes": "Sangue e cinzas, lava e obsidiana dão aparência e poder para esse capacete. Aumenta Inteligência em <%= int %>.", "headSpecial1Text": "Elmo de Cristal", - "headSpecial1Notes": "The favored crown of those who lead by example. Increases all Stats by <%= attrs %>.", + "headSpecial1Notes": "A coroa favorita daqueles que lideram pelo exemplo. Aumenta todas as Estatísticas em <%= attrs %>.", "headSpecial2Text": "Elmo Inominável", "headSpecial2Notes": "Um testamento para aqueles que deram de si mesmos sem pedir nada em troca. Aumenta Inteligência e Força em <%= attrs %> cada.", "headSpecialTakeThisText": "Elmo Take This", - "headSpecialTakeThisNotes": "This helm was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.", + "headSpecialTakeThisNotes": "Este elmo foi adquirido por participar em um Desafio patrocinado feito por Take This. Parabéns! Aumenta todas as Estatísticas em <%= attrs %>.", "headSpecialFireCoralCircletText": "Tiara do Coral de Fogo", "headSpecialFireCoralCircletNotes": "Esta Tiara, projetada pelos grandes alquimistas de Habitica, permite que você respire na água e mergulhe em busca de tesouros! Aumenta Percepção em <%= per %>.", "headSpecialPyromancersTurbanText": "Turbante do Pyromancer", @@ -895,8 +895,8 @@ "headSpecialNamingDay2017Notes": "Feliz Dia de Nome! Use este feroz e empenado elmo para celebrar Habitica. Não concede benefícios.", "headSpecialTurkeyHelmBaseText": "Elmo de Perú", "headSpecialTurkeyHelmBaseNotes": "O seu visual de Dia de Perú irá estar completo quanto envergar este elmo com bico! Não concede benefícios.", - "headSpecialTurkeyHelmGildedText": "Gilded Turkey Helm", - "headSpecialTurkeyHelmGildedNotes": "Gobble gobble! Bling bling! Confers no benefit.", + "headSpecialTurkeyHelmGildedText": "Elmo de Peru Dourado", + "headSpecialTurkeyHelmGildedNotes": "Glu-glu! Plim-plim! Não confere benefícios.", "headSpecialNyeText": "Chapéu Festivo Absurdo", "headSpecialNyeNotes": "Você recebeu um Absurdo Chapéu Festivo!! Use-o com orgulho enquanto comemora o Ano Novo! Não concede benefícios.", "headSpecialYetiText": "Elmo de Domador de Ieti", @@ -972,7 +972,7 @@ "headSpecialWinter2016WarriorText": "Boné do Boneco de Neve", "headSpecialWinter2016WarriorNotes": "Brr! Este elmo potente é realmente poderoso... até que ele derreta. Aumenta a Força em <%= str %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "headSpecialWinter2016MageText": "Capa de Snowboard", - "headSpecialWinter2016MageNotes": "Mantem a neve longe dos seus olhos enquanto você conjura magias. Aumenta a Percepção em <%= per %>. Edição limitada equipamento do inverno 2015-2016.", + "headSpecialWinter2016MageNotes": "Mantem a neve longe dos seus olhos enquanto você conjura magias. Aumenta a Percepção em <%= per %>. Edição limitada equipamento do inverno 2015-2016.", "headSpecialWinter2016HealerText": "Capacete da Fada Alada", "headSpecialWinter2016HealerNotes": "Estas asas vibram tão rapidamente que parecem um borrão! Aumenta a Inteligência em <%= int %>. Equipamento de Inverno da Edição Limitada 2015-2016.", "headSpecialSpring2016RogueText": "Máscara do Cãozinho Bom", @@ -990,7 +990,7 @@ "headSpecialSummer2016MageText": "Chapéu do Esguicho", "headSpecialSummer2016MageNotes": "Água mágica constantemente jorra desse chápeu. Aumenta Percepção por <%= per %>. Edição Limitada 2016 Equipamento de Verão.", "headSpecialSummer2016HealerText": "Capacete de Cavalo-Marinho", - "headSpecialSummer2016HealerNotes": "Esse elmo indica que o usuário foi treinado por cavalos marinhos mágicos curadores da procrastinação. Aumenta Inteligência em <%= int %>. Edição Limitada 2016 Equipamento de Verão.", + "headSpecialSummer2016HealerNotes": "Este elmo indica que o usuário foi treinado por cavalos marinhos mágicos curadores da Procrastinação. Aumenta Inteligência em <%= int %>. Edição Limitada 2016 Equipamento de Verão.", "headSpecialFall2016RogueText": "Elmo da Viúva Negra", "headSpecialFall2016RogueNotes": "As pernas nesse elmo estão constantemente crispando-se. Aumenta a Percepção de <%= per %>. Edição Limitada 2016 Equipamento de Outono.", "headSpecialFall2016WarriorText": "Elmo de Casca Retorcida", @@ -1034,9 +1034,9 @@ "headSpecialFall2017HealerText": "Elmo de Casa Assombrada", "headSpecialFall2017HealerNotes": "Convide espíritos assustadores e criaturas amigáveis a procurar os seus poderes curativos neste elmo! Aumenta Inteligência em <%= int %>. Equipamento de Edição Limitada do Outono de 2017.", "headSpecialNye2017Text": "Chapéu de Festa Fino", - "headSpecialNye2017Notes": "You've received a Fanciful Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.", + "headSpecialNye2017Notes": "Você recebeu um Chapéu de Festa Extravagante! Vista-o com orgulho enquanto ressoa no Ano Novo! Não confere benefícios.", "headSpecialWinter2018RogueText": "Elmo de Rena", - "headSpecialWinter2018RogueNotes": "The perfect holiday disguise, with a built-in headlight! Increases Perception by <%= per %>. Limited Edition 2017-2018 Winter Gear.", + "headSpecialWinter2018RogueNotes": "O disfarce de Natal perfeito, com um farol embutido! Aumenta Percepção em <%= per %>. Edição Limitada 2017-2018 Equipamento de Inverno.", "headSpecialWinter2018WarriorText": "Elmo de Caixa de Presente", "headSpecialWinter2018WarriorNotes": "This jaunty box top and bow are not only festive, but quite sturdy. Increases Strength by <%= str %>. Limited Edition 2017-2018 Winter Gear.", "headSpecialWinter2018MageText": "Cartola Brilhante", @@ -1109,7 +1109,7 @@ "headMystery201601Notes": "Continue focado, ó bravo campeão! Não concede benefícios. Item de Assinante Janeiro 2016.", "headMystery201602Text": "Capuz do Quebra-Corações", "headMystery201602Notes": "Proteja sua identidade de todos os seus admiradores. Não confere benefícios. Item de assinante de Fevereiro 2016.", - "headMystery201603Text": "Chapéu da sorte", + "headMystery201603Text": "Chapéu da Sorte", "headMystery201603Notes": "Essa cartola é um amuleto da sorte mágico. Não concede benefícios. Item do Assinante de Março 2016.", "headMystery201604Text": "Coroa de Flores", "headMystery201604Notes": "Essas flores entrelaçadas fazem um capacete surpreendentemente forte! Não confere benefício. Item de Assinante de Abril de 2016.", @@ -1174,7 +1174,7 @@ "headArmoireRedHairbowText": "Laço de Cabelo Vermelho", "headArmoireRedHairbowNotes": "Torne-se forte, duro e inteligente enquanto utilizar este Laço de Cabelo Vermelho! Aumenta Força em <%= str %>, Constituição em <%= con %> e Inteligencia em <%= int %>. Armário Encantado: Conjunto do Laço de Cabelo Vermelho (Item 1 de 2).", "headArmoireVioletFloppyHatText": "Chapéu Desajeitado Violeta", - "headArmoireVioletFloppyHatNotes": "Muitas magias foram costuradas neste simples chapéu, dando a ele uma agradável cor violeta. Aumenta Percepção em <%= per %>, Inteligência em <%= int %> e Constituição em <%= con %>. Armário Encantado: Conjunto de Roupas Violetas para Ficar em Casa (Item 1 de 3)", + "headArmoireVioletFloppyHatNotes": "Muitas magias foram costuradas neste simples chapéu, dando a ele uma agradável cor violeta. Aumenta Percepção em <%= per %>, Inteligência em <%= int %> e Constituição em <%= con %>. Armário Encantado: Conjunto de Roupas Violeta para Ficar em Casa (Item 1 de 3).", "headArmoireGladiatorHelmText": "Elmo de Gladiador", "headArmoireGladiatorHelmNotes": "Para ser um gladiador você não pode ser só forte... mas também astuto. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Armário Encantado: Conjunto de Gladiador (item 1 de 3).", "headArmoireRancherHatText": "Chapéu de Rancheiro", @@ -1335,7 +1335,7 @@ "shieldSpecialSpring2015WarriorText": "Prato Pires", "shieldSpecialSpring2015WarriorNotes": "Jogue nos seus inimigos... ou só segure, porque vai se encher de ração gostosa na hora da janta. Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", "shieldSpecialSpring2015HealerText": "Travesseiro Estampado", - "shieldSpecialSpring2015HealerNotes": "Você pode descansar a cabeça neste travesseiro macio, ou você pode lutar contra ele com suas temíveis garras. Rawr! Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", + "shieldSpecialSpring2015HealerNotes": "Você pode descansar a cabeça neste travesseiro macio, ou você pode lutar contra ele com suas temíveis garras. Rawr! Aumenta Constituição em <%= con %>. Equipamento Edição Limitada de Primavera 2015.", "shieldSpecialSummer2015WarriorText": "Escudo de Peixe-Sol", "shieldSpecialSummer2015WarriorNotes": "Forjado a partir de metal do mar profundo pelos artesãos de Dilatória, este escudo brilha como o sol e o mar. Aumenta Constituição em <%= con %>. Edição Limitada Conjunto de Verão 2015.", "shieldSpecialSummer2015HealerText": "Escudo Robusto", @@ -1355,7 +1355,7 @@ "shieldSpecialSummer2016WarriorText": "Dente de Tubarão", "shieldSpecialSummer2016WarriorNotes": "Morda essas tarefas difíceiso com esse escudo de dente! Aumenta Constituição em <%= con %>. Edição Limitada Equipamento de Verão 2016.", "shieldSpecialSummer2016HealerText": "Escudo de Estrela do Mar", - "shieldSpecialSummer2016HealerNotes": "As vezes erroneamente chamado de Escudo do Peixe-Estrela. Aumenta Constituição em <%= con %>. Edição Limitada 2016 Equipamento de Verão.", + "shieldSpecialSummer2016HealerNotes": "As vezes erroneamente chamado de Escudo do Peixe-Estrela. Aumenta a Constituição em <%= con %>. Edição Limitada 2016 Equipamento de Verão.", "shieldSpecialFall2016WarriorText": "Raízes Defensoras", "shieldSpecialFall2016WarriorNotes": "Defenda-se contra as Tarefas Diárias com essas raízes contorcidas! Aumenta Constituição de <%= con %>. Edição Limitada 2016 Equipamento de Outono.", "shieldSpecialFall2016HealerText": "Escudo de Górgona", @@ -1431,7 +1431,7 @@ "shieldArmoireRamHornShieldText": "Escudo de Corno de Carneiro", "shieldArmoireRamHornShieldNotes": "Ram this shield into opposing Dailies! Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Ram Barbarian Set (Item 3 of 3).", "shieldArmoireRedRoseText": "Rosa Vermelha", - "shieldArmoireRedRoseNotes": "Esta rosa de cor vermelho profundo tem um cheiro encantador. Irá também afiar o seu entendimento de tudo. Aumenta Perceção em <%= per %>. Armário Encantado: Item Independente.", + "shieldArmoireRedRoseNotes": "Esta rosa de cor vermelho profundo tem um cheiro encantador. Irá também afiar o seu entendimento de tudo. Aumenta a Percepção em <%= per %>. Armário Encantado: Item Independente.", "shieldArmoireMushroomDruidShieldText": "Escudo de Druida de Cogumelo", "shieldArmoireMushroomDruidShieldNotes": "Embora seja feito a partir de um cogumelo, não existe nada de mole neste escudo rijo! Aumenta Constituição em <%= con %> e Força em <%= str %>. Armário Encantado: Conjunto de Druida de Cogumelo (Item 3 de 3).", "shieldArmoireFestivalParasolText": "Guarda-sol de Festival", @@ -1445,7 +1445,7 @@ "shieldArmoireAntiProcrastinationShieldText": "Escudo Anti Procrastinação", "shieldArmoireAntiProcrastinationShieldNotes": "Este escudo de aço forte irá ajudá-lo a bloquear distrações quando elas se aproximam! Aumenta Constituição em <%= con %>. Armário Encantado: Conjunto Anti Procrastinação (Item 3 de 3).", "shieldArmoireHorseshoeText": "Ferradura", - "shieldArmoireHorseshoeNotes": "Ajude a proteger os pés das suas montadas com cascos com este sapato de ferro. Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Armário Encantado: Conjunto de Ferreiro (Item 3 de 3)", + "shieldArmoireHorseshoeNotes": "Ajude a proteger os pés de suas montarias com cascos com este sapato de ferro. Aumenta Constituição, Percepção e Força em <%= attrs %> cada. Armário Encantado: Conjunto de Ferreiro (Item 3 de 3).", "shieldArmoireHandmadeCandlestickText": "Vela feita à Mão", "shieldArmoireHandmadeCandlestickNotes": "Os seus artigos de cera de qualidade providenciam luz e calor a Habiticanos gratos! Aumenta Força em <%= str %>. Armário Encantado: Conjunto do Fabricante de Velas (Item 3 de 3).", "shieldArmoireWeaversShuttleText": "Lançadeira do Tecelão", @@ -1575,11 +1575,11 @@ "bodyMystery201901Notes": "These shimmering pauldrons are strong, but will rest on your shoulders as weightlessly as a ray of dancing light. Confers no benefit. January 2019 Subscriber Item.", "bodyArmoireCozyScarfText": "Cachecol Comfortável", "bodyArmoireCozyScarfNotes": "Este cachecol fino irá mantê-lo quente enquanto procede com os seus negócios invernais. Aumenta Constituição em Percepção em <%= attrs %> cada. Armário Encantado: Conjunto do Acendedor de Lâmpadas (Item 4 de 4).", - "headAccessory": "acessório para cabeça", + "headAccessory": "Acessório para Cabeça", "accessories": "Acessórios", "animalEars": "Orelhas de Animais", "headAccessoryBase0Text": "Sem Acessório de Cabeça", - "headAccessoryBase0Notes": "Sem Acessório de Cabeça", + "headAccessoryBase0Notes": "Sem Acessório de Cabeça.", "headAccessorySpecialSpringRogueText": "Orelhas Roxas de Gato", "headAccessorySpecialSpringRogueNotes": "Essas orelhas felinas se contraem para detectar ameaças iminentes. Não concede benefícios. Equipamento Edição Limitada de Primavera 2014.", "headAccessorySpecialSpringWarriorText": "Orelhas Verdes de Coelho", @@ -1771,7 +1771,7 @@ "weaponSpecialSummer2020MageText": "Remo Poderoso", "weaponSpecialSpring2020MageNotes": "Eles continuam caindo na sua cabeça! Mas você nunca vai pará-los apenas reclamando. Aumenta Inteligência em <%= int %> e Percepção em <%= per %>. Edição Limitada 2020 Equipamento de Primavera.", "weaponSpecialSummer2020WarriorText": "Anzol", - "weaponSpecialSpring2020HealerText": "Cajado de Lírio-Espada", + "weaponSpecialSpring2020HealerText": "Cajado Lírio-Espada", "weaponSpecialSpring2020HealerNotes": "Uma íris é bela, mas as folhas são como espadas... não seja enganado pelas flores, este cajado é duro como aço! Aumenta Inteligencia por <%= int %>. Edição Limitada 2020 Equipamento de Primavera.", "weaponSpecialSummer2020RogueNotes": "Seus inimigos não veem você se aproximar, mas suas Presas são inescapáveis! Aumenta Força em <%= str %>. Edição Limitada 2020 Equipamento de Verão.", "weaponSpecialSummer2020WarriorNotes": "Se os seus oponentes zombarem da sua escolha de arma, não morda a isca. Esse gancho maneiro fisga de verdade! Aumenta Força por <%=str%>. Edição Limitada 2020 Equipamento de Verão.", @@ -1793,10 +1793,10 @@ "weaponSpecialSummer2021RogueText": "Tentáculos de Anémona", "weaponSpecialWinter2021WarriorNotes": "Podes pescar um dos grandes com isto! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Inverno de 2020-2021.", "weaponSpecialSpring2021HealerNotes": "A casca e as folhas deste enxerto são conhecidos pela sua habilidade de aliviar a dor. Ou então podes plantá-lo e vê-lo crescer! Aumenta Inteligência em <%= int %>. Edição Limitada de Equipamento de Primavera de 2021.", - "weaponSpecialSpring2021RogueNotes": "Sabes o que é melhor do que ter uma flor em cada mão? Ter DUAS flores em cada mão! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Primavera de 2021", + "weaponSpecialSpring2021RogueNotes": "Sabes o que é melhor do que ter uma flor em cada mão? Ter DUAS flores em cada mão! Aumenta a Força em <%= str %>. Edição Limitada de Equipamento de Primavera de 2021.", "weaponSpecialWinter2021MageNotes": "Esta arma poderosa é definitivamente mais que uma fase. Dirige a tua energia, foca-te no fluxo de um mês, e estuda o tempo e o espaço. Aumenta Inteligência em <%= int %> e Perceção em <%= per %>.Edição Limitada de Equipamento de Invermo de 2020-2021.", "weaponSpecialSpring2021WarriorText": "Martelo do Sol", - "weaponSpecialSpring2021RogueText": "Flores Gémeas", + "weaponSpecialSpring2021RogueText": "Florescência de Flores Gêmeas", "weaponSpecialSpring2021MageText": "Pluma do Cisne", "headSpecialNye2020Notes": "Recebeste um Chapéu de Festa Extravagante! Usa-o com orgulho ao entrar no Ano Novo! Não Apresenta Benefícios.", "weaponSpecialFall2020HealerText": "Cajado do Casulo", @@ -1804,6 +1804,31 @@ "weaponSpecialSpring2021HealerText": "Ramo de Salgueiro", "weaponSpecialSpring2021MageNotes": "Atira, bate, abana, descansa! Açoita esta magnífica pena dentro do tempo para conduzir a música da tua magia. Aumenta Inteligência em <%= int %> e Perceção em <%= per %>. Edição Limitada de Equipamento de Primavera de 2021.", "weaponSpecialWinter2021RogueNotes": "Tanto um disfarce como uma arma, este mangual de azevinho irá ajudar-te nas mais difíceis tarefas. Aumenta a Força em <%= str %>. Edição Limitada de equipamento de Inverno de 2020-2021.", - "weaponSpecialFall2020HealerNotes": "Agora que a tua transformação está completa, este fragmento da tua vida na forma de crisálida serve de um cajado divinal com o qual tu medes o Destino. Aumenta Inteligência por <%= int %>. Edição Limitada de Equipamento de Outono de 2020.", - "weaponSpecialWinter2021RogueText": "Mangual de Bagas de Azevinho" + "weaponSpecialFall2020HealerNotes": "Agora que a sua transformação está completa, esta reminiscência de sua vida como crisálida agora serve como o cajado divinal com o qual você mede destinos. Aumenta Inteligência por <%= int %>. Edição Limitada de Equipamento de Outono de 2020.", + "weaponSpecialWinter2021RogueText": "Mangual de Bagas de Azevinho", + "backMystery202507Notes": "Seu corcel para as calçadas e meio tubos. Não confere benefícios. Julho 2025 Item de Assinante.", + "shieldArmoireFlyFishingRodNotes": "Coloque uma isca nesta vara longa e flexível e os peixes a confundirão com um inseto todas as vezes. Aumenta Força e Inteligência em <%= attrs %> cada. Baú Encantando: Conjunto Fly Fishing (Item 3 de 3)", + "backMystery202507Text": "Skate Irado", + "shieldArmoireFlyFishingRodText": "Vara de Fly Fishing", + "headArmoireFlyFishingHatNotes": "Com uma aba larga e com espaço para uma isca extra, não vá pescar com mosca sem esta belezura. Aumenta Força e Percepção em <%= attrs %> cada. Baú Encantado: Conjunto Fly Fishing (Item 1 de 3)", + "armorArmoireFlyFishingWadersNotes": "Permaneça perfeitamente seco(a) e aquecido(a) enquanto atravessa um riacho, lagoa, lago ou rio. Aumenta Força e Constituição em <%= attrs %> cada. Baú Encantado: Conjunto Fly Fishing (Item 2 de 3)", + "shieldArmoireBeekeepersHiveNotes": "Colmeias servem tanto como casas como espaços de trabalho. Você pode precisar falar com suas abelhas sobre um bom balanço entre vida social e trabalho. Aumenta Força em <%= str %>. Baú Encantado: Conjunto Apicultor (Item 4 de 4)", + "shieldSpecialSummer2025HealerNotes": "Este escudo parece simples, mas possui propriedades nocivas. Adversários, fiquem espertos! Aumenta Constituição em <%= con %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldSpecialSummer2025WarriorText": "Escudo de Concha de Vieira", + "headSpecialSummer2025MageNotes": "Todos ficarão hipnotizados pelo modo que suas barbatanas se movem com as correntes. Aumenta Percepção em <%= per %>. Edição Limitada 2025 Equipamento de Verão.", + "headArmoireBeekeepersHatText": "Capacete e Véu de Apicultor", + "headArmoireBeekeepersHatNotes": "Mantenha seu rosto seguro enquanto lida com seus amiguinhos abelhudos. Aumenta Percepção em <%= per %>. Baú Encantado: Conjunto Apicultor (Item 1 de 4)", + "shieldSpecialSummer2025WarriorNotes": "As cores são lindas, mas as cristas são perigosas. Adversários, fiquem espertos! Aumenta Constituição em <%= con %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldSpecialSummer2025RogueText": "Tentáculo de Lula", + "shieldSpecialSummer2025HealerText": "Escudo do Anjo Marinho", + "shieldSpecialSummer2025RogueNotes": "Este tentáculo parece esguio, mas suas ventosas se agarram com firmeza. Adversários, fiquem espertos! Aumenta Força em <%= str %>. Edição Limitada 2025 Equipamento de Verão.", + "shieldMystery202506Text": "Escudo do Brilho Solar", + "shieldMystery202506Notes": "Dissipa a escuridão e confere calorosos e alegres raios onde quer que você esteja. Não concede benefícios. Junho 2025 Item de Assinante.", + "shieldArmoireBeekeepersHiveText": "Colmeia", + "backMystery202506Text": "Auréola de Brilho Solar", + "armorArmoireFlyFishingWadersText": "Botas de Pesca Fly Fishing", + "headMystery202507Notes": "Chapéus ao contrário ainda são legais, né? Não confere benefícios. Julho 2025 Item de Assinante.", + "headMystery202507Text": "Chapéu de Skatista Irado", + "headArmoireFlyFishingHatText": "Chapéu de Fly Fishing", + "backMystery202506Notes": "Traz um brilho quente com você conforme avança sobre suas tarefas diárias. Não confere benefícios. Junho 2025 Item de Assinante." } diff --git a/website/common/locales/ru/backgrounds.json b/website/common/locales/ru/backgrounds.json index a6feb8fcd9..afb2c8fb31 100644 --- a/website/common/locales/ru/backgrounds.json +++ b/website/common/locales/ru/backgrounds.json @@ -615,7 +615,7 @@ "backgroundWaterMillText": "Водяная мельница", "backgroundForestedLakeshoreText": "Берег лесного озера", "backgroundForestedLakeshoreNotes": "Будьте предметом зависти вашей команды с вашим выбором места на берегу лесного озера.", - "backgroundClotheslineNotes": "Проведите время, развесив одежду на бельевой веревке.", + "backgroundClotheslineNotes": "Развесьте одежду на бельевой веревке.", "backgroundClotheslineText": "Веревка для белья", "backgrounds062021": "Набор 85: Выпущен в июне 2021", "backgroundRagingRiverText": "Бурная река", @@ -774,7 +774,7 @@ "backgroundFlyingOverHedgeMazeText": "Пролетая над лабиринтом из живой изгороди", "backgrounds052023": "Набор 108: Выпущен в Мае 2023", "backgroundInAPaintingNotes": "Наслаждайтесь творчеством внутри картины.", - "backgroundSpringtimeShowerNotes": "Посмотрите на цветочный весенний ливень.", + "backgroundSpringtimeShowerNotes": "Посмотрите Цветочный весенний дождь.", "backgrounds042023": "Набор 107: Выпущен в Апреле 2023", "backgroundLeafyTreeTunnelText": "Туннель из лиственных деревьев", "backgroundLeafyTreeTunnelNotes": "Прогуляйтесь по тоннелю из лиственных деревьев.", @@ -852,17 +852,17 @@ "backgroundIceBubbleLakeText": "Озеро ледяных пузырьков", "backgroundIceBubbleLakeNotes": "Осторожно стойте на Озере ледяных пузырьков.", "backgroundJackOLanternStacksNotes": "Полюбуйтесь полем, усеянным штабелями фонарей Джека О'Лантерна.", - "backgroundGiantCatText": "Гигантский кот", - "backgroundGiantCatNotes": "Вздремни с гигантским котом.", - "backgroundForestSunsetNotes": "Наслаждайся сиянием лесного заката.", + "backgroundGiantCatText": "Гигантский Кот", + "backgroundGiantCatNotes": "Вздремни с Гигантским Котом.", + "backgroundForestSunsetNotes": "Погрейтесь в лучах лесного заката.", "backgroundForestSunsetText": "Лесной закат", "backgroundWallFloweringVinesText": "Стена с цветущими лозами", - "backgroundWallFloweringVinesNotes": "Потусуйтесь у стены цветущих виноградных лоз.", + "backgroundWallFloweringVinesNotes": "Потусуйтесь у стены цветущих лоз.", "backgroundContainerGardenText": "Контейнерный Сад", "backgroundContainerGardenNotes": "Запачкайте свои руки в Контейнерном Саду.", "backgrounds052024": "Набор 120: Выпущен в мае 2024", "backgroundDragonsBackText": "Спина Дракона", - "backgroundDragonsBackNotes": "Плыви по небу на спине Дракона.", + "backgroundDragonsBackNotes": "Плывите по небу на спине Дракона.", "backgrounds062024": "СЕРИЯ 121: Выпущена в июне 2024 года", "backgroundShellGateText": "Створчатый затвор", "backgroundShellGateNotes": "Пройдите через ворота, украшенные коралловыми ракушками.", @@ -874,13 +874,13 @@ "backgroundSavannaNotes": "Прогуляйтесь по лугам, затянутым дымкой.", "backgroundSavannaText": "Затянутые дымкой луга", "backgroundPottersStudioText": "Гончарная мастерская", - "backgroundPottersStudioNotes": "Создавайте произведения искусства в гончарной мастерской.", + "backgroundPottersStudioNotes": "Создайте произведение искусства в Гончарной мастерской.", "backgroundMaypoleText": "Майский Шест", - "backgroundMaypoleNotes": "Кружитесь в танце вокруг яркого Майского Шеста.", + "backgroundMaypoleNotes": "Потанцуйте вокруг святого Майского древа.", "backgroundMagicDoorInForestText": "магическая дверь в лесу", "backgroundMagicDoorInForestNotes": "осмелитесь пройти через магическую дверь в лесу.", "backgroundSurroundedByGhostsText": "окружён призраками", - "backgroundSurroundedByGhostsNotes": "проведите жуткий вечер в окружении призраков", + "backgroundSurroundedByGhostsNotes": "Проведите жуткий вечер в окружении призраков.", "backgroundFirstSnowForestText": "первый снег в лесу", "backgroundFirstSnowForestNotes": "шагните в первый снег в лесу.", "backgroundCastleHallWithHearthText": "зал замка с камином", @@ -906,5 +906,8 @@ "backgroundSummerSeashoreNotes": "Поймайте волну на летнем морском берегу.", "backgrounds052025": "Набор 132: Выпущен в мае 2025", "backgroundTrailThroughAForestText": "Тропа через лес", - "backgroundTrailThroughAForestNotes": "Прогуляйтесь по тропе через лес." + "backgroundTrailThroughAForestNotes": "Прогуляйтесь по тропе через лес.", + "backgrounds072025": "Набор 134: Выпущен в июле 2025", + "backgroundSirensLairText": "Логово сирены", + "backgroundSirensLairNotes": "Дерзните нырнуть в Логово сирены." } diff --git a/website/common/locales/ru/content.json b/website/common/locales/ru/content.json index b3a611b544..fb16a02bb4 100644 --- a/website/common/locales/ru/content.json +++ b/website/common/locales/ru/content.json @@ -392,5 +392,23 @@ "questEggDogText": "Щенок", "hatchingPotionKoi": "Кои", "hatchingPotionGingerbread": "Пряник", - "hatchingPotionFungi": "Грибы" + "hatchingPotionFungi": "Грибы", + "questEggAlpacaText": "Альпака", + "questEggAlpacaMountText": "Альпака", + "questEggAlpacaAdjective": "переполненный", + "hatchingPotionBalloon": "Надувной", + "questEggCatText": "Котенок", + "questEggCatMountText": "Кошка", + "questEggCatAdjective": "шаловливый", + "questEggOtterText": "Выдра", + "questEggOtterMountText": "Выдра", + "questEggOtterAdjective": "коварный", + "hatchingPotionJade": "Нефритовый", + "hatchingPotionCryptid": "Мифический", + "wackyPotionNotes": "Вылейте это на яйцо, и из него вылупится питомец типа <%= potText(locale) %>.", + "wackyPotionAddlNotes": "Не может быть возвышено до Скакуна или использовано на яйцах Квестовых питомцев.", + "questEggPlatypusText": "Утконос", + "questEggPlatypusMountText": "Утконос", + "questEggPlatypusAdjective": "перфекционист", + "hatchingPotionOpal": "Опал" } diff --git a/website/common/locales/ru/faq.json b/website/common/locales/ru/faq.json index b669e768ed..481d7d28a2 100644 --- a/website/common/locales/ru/faq.json +++ b/website/common/locales/ru/faq.json @@ -156,5 +156,23 @@ "contentAnswer60": "Все остальные текущие события продолжатся в обычном режиме! Все по-прежнему будут получать особые награды и тематическую еду, как и сейчас.", "contentAnswer61": "Открытки на День святого Валентина и Новогодние открытки будут выпускаться в определенные даты.", "contentQuestion7": "А как насчет других предметов, доступных в магазине путешественников во времени, помимо прошлых наборов подписчика?", - "sunsetFaqPara9": "

Браузер: Нажмите на навигацию Групповой подписки в верхней шкале.

Android: Нажмите на Ваше имя вверху экрана, когда находитесь на вкладке заданий, чтобы переключиться на вкладку с Вашими общими заданиями. Чтобы открыть Ваш чат нажмите на иконку чата в верхней части этого экрана.

iOS: Нажмите на название Вашей Групповой подписки в меню.

" + "sunsetFaqPara9": "

Браузер: Нажмите на навигацию Групповой подписки в верхней шкале.

Android: Нажмите на Ваше имя вверху экрана, когда находитесь на вкладке заданий, чтобы переключиться на вкладку с Вашими общими заданиями. Чтобы открыть Ваш чат нажмите на иконку чата в верхней части этого экрана.

iOS: Нажмите на название Вашей Групповой подписки в меню.

", + "sunsetFaqPara10": "Игроки не смогут восстановить данные переписки из Таверны и Гильдий после завершения работы сервисов.", + "sunsetFaqHeader6": "Будет ли возможно восстановить чаты гильдии после завершения работы сервисов?", + "sunsetFaqHeader8": "Как это повлияет на контрибьютеров Habitica?", + "sunsetFaqPara12": "Как проект с открытым исходным кодом, мы приветствуем и поощряем самые разные формы участия. В знак признательности мы отправим набор снаряжения Героя всем, кто имеет статус контрибьютора на 1 августа 2023 года. После завершения работы Таверны и Гильдий формат участия тоже претерпит некоторые изменения. Подробнее о будущем каждой формы вклада вы можете прочитать ниже.", + "sunsetFaqPara13": "Кузнецы
Мы по-прежнему приветствуем помощь с открытым исходным кодом через наш GitHub и будем продолжать присуждать уровни за квалифицированный вклад. Сотрудничество и обсуждение в основном происходило на GitHub, и это будет продолжаться.", + "sunsetFaqPara14": "Лингвисты
Мы по-прежнему рады содействию в переводе приложений и веб-сайта и по-прежнему будем присуждать уровни спонсоров за соответствующий вклад. Однако мы изменим подход к переводу. Мы хотим сосредоточить наши ресурсы на поддержке определенного набора языков на всех платформах. Для этого мы сократим количество языков, доступных для перевода, а ранее незавершенные архивы с переводами будут храниться на Github. Мы надеемся, что это изменение сделает опыт работы с Habitica более цельным на разных устройствах. Вы можете ознакомиться с самыми актуальными рекомендациями по процедуре перевода на нашем сайте.", + "contentAnswer00": "Магические инкубационные эликсиры, переизданные фоны, прошлые наборы для подписчиков и квесты питомцев будут меняться на постоянной ежемесячной основе.", + "sunsetFaqPara18": "Ремесленники
Мы прекращаем поддержку Ремесленников. Сейчас большая часть оформления делается нашей командой, чтобы соответствовать актуальному контенту приложения. Мы глубоко признательны за фантастические работы, сделанные за эти годы нашим сообществом авторов.", + "sunsetFaqPara17": "Товарищи
Скрипты и дополнения полезны все меньшему количеству наших пользователей, поскольку мобильные приложения все чаще становятся единственным способом доступа к Habitica. Участники, желающие создавать сторонние инструменты для настройки работы с Habitica, могут продолжать это делать, но мы больше не будем присуждать уровни Товарищей, поскольку сосредоточимся на тех улучшениях, которые доступны всей нашей базе игроков.", + "sunsetFaqPara20": "Правила сообщества Habitica будут обновлены в момент прекращения обслуживания Таверны и Гильдий. В них будет отражено, что правила поведения в сообществе теперь касаются профилей игроков, испытаний и сообщений в личных чатах. Наши Условия использования всегда распространялись как на публичные, так и на личные чаты и не требуют немедленного обновления в связи с этим изменением.", + "sunsetFaqPara21": "Самоцветы, находящиеся в Банке гильдии, будут возвращены лидеру Гильдии 8 августа, когда закончится поддержка сервиса.", + "sunsetFaqHeader12": "Что будет с Банк самоцветов Гильдии?", + "sunsetFaqPara16": "Светские львы и львицы
С прекращением деятельности Таверны и Гильдий этот вид активности в сообществе исчезнет. Мы очень благодарны за работу, которую проделали наши дружелюбные и отзывчивые игроки, отвечая на вопросы в чатах.", + "sunsetFaqPara15": "Создатели испытаний
Команда продолжает поощрять создание высококачественных Испытаний. Мы хотели бы исследовать новые способы продвижения Испытаний в приложении и за его пределами.", + "contentAnswer01": "Гранд-гала будет продлена и будет действовать в течение всего сезона, вместе со всем классовым снаряжением, настройками аватара и прочими плюшками.", + "contentAnswer11": "Когда новые игроки присоединяются к игре в период между Гранд-гала, они часто не знают об этих событиях и пропускают все самое интересное. Мы хотим быть уверены, что все новые игроки смогут принять участие в наших сезонных праздниках независимо от того, когда они решили начать свое путешествие.", + "contentQuestion2": "Как изменится Гранд-гала?", + "contentAnswer10": "Habitica существует с 2013 года (воу!), и за это время мы выпустили тысячи коллекционных предметов. Их сбор может оказаться непосильной задачей, особенно для новых игроков. Мы хотим быть уверены, что показываем все, что можем предложить, и что замечательные предметы, выпущенные ранее, также не будут упущены из виду." } diff --git a/website/common/locales/ru/front.json b/website/common/locales/ru/front.json index d2e2b97a96..611f150792 100644 --- a/website/common/locales/ru/front.json +++ b/website/common/locales/ru/front.json @@ -25,32 +25,32 @@ "invalidEmail": "Для изменения пароля необходимо указать существующий адрес электронной почты.", "login": "Вход", "logout": "Выйти", - "marketing1Header": "Вырабатывайте полезные привычки, играя", - "marketing1Lead1Title": "Ваша жизнь как ролевая игра", - "marketing1Lead1": "Habitica — это компьютерная игра, с помощью которой можно улучшить привычки в реальной жизни. Она «превращает» вашу жизнь в игру, представляя задачи (привычки, ежедневные задания и предстоящие дела) маленькими монстрами, которых нужно победить. Чем лучше вам это удается, тем дальше в игре вы продвигаетесь. Если вы ошибаетесь в жизни — ваш персонаж начинает уступать в игре.", - "marketing1Lead2Title": "Получайте славную экипировку", - "marketing1Lead2": "Совершенствуйте привычки, чтобы развивать своего аватара. Покажите остальным добытое снаряжение!", - "marketing1Lead3Title": "Находите случайные призы", - "marketing1Lead3": "Некоторых мотивирует азарт, так называемая система «стохастического вознаграждения». В арсенале Habitica все виды стимулов: позитивные, негативные, предсказуемые и случайные.", - "marketing2Header": "Соревнуйтесь с друзьями", + "marketing1Header": "Вырабатывайте привычки уровень за уровнем!", + "marketing1Lead1Title": "Играйте в свою жизнь", + "marketing1Lead1": "Habitica — это идеальное приложение для тех, кто сражается со списками дел. Мы используем привычные игровые механики, такие как вознаграждение золотом, опытом и предметами, чтобы помочь вам почувствовать себя продуктивными и повысить чувство удовлетворения при выполнении заданий. Чем лучше вы справляетесь с заданиями, тем дальше вы продвигаетесь в игре.", + "marketing1Lead2Title": "Экипируйтесь со вкусом", + "marketing1Lead2": "Коллекционируйте мечи, доспехи и многое другое, используя золото, заработанное за выполнение заданий. Сотни предметов, которые можно собирать и выбирать, не дадут вам исчерпать запас комбинаций. Надевайте для повышения статов, чтобы быть стильными или все и сразу! ", + "marketing1Lead3Title": "Получайте награды за усилия", + "marketing1Lead3": "Наличие чего-то, чего можно ждать с нетерпением, может стать недостающим элементом между выполнением задачи и откладыванием ее на несколько недель. Если жизнь не предлагает вознаграждения, то Habitica позаботится об этом! Вы будете вознаграждены за каждое задание, и за каждым углом вас ждут сюрпризы — так что не останавливайтесь на достигнутом! ", + "marketing2Header": "Объединяйтесь с друзьями", "marketing2Lead1Title": "Социальная продуктивность", - "marketing2Lead1": "Играть в Habitica можно в одиночку, но все краски по-настоящему заиграют, когда вы начнете сотрудничать, соперничать и разделять ответственность с другими игроками. Наиболее эффективная часть любой программы самосовершенствования — социальная ответственность, а какая среда подходит для создания духа ответственности и соревновательности лучше, чем компьютерная игра?", - "marketing2Lead2Title": "Сражайтесь с монстрами", - "marketing2Lead2": "Может ли ролевая игра обходиться без битв? Сражайтесь с боссами в составе команды. Боссы — это «режим супер-ответственности»: если вы пропустите ежедневные занятия в спортивном зале, босс нанесёт урон *всей команде!*", + "marketing2Lead1": "Получите заряд мотивации, сотрудничая, соревнуясь и взаимодействуя с другими! Habitica создана для того, чтобы задействовать самую эффективную часть любой программы самосовершенствования: социальную ответственность.", + "marketing2Lead2Title": "Сражайтесь с монстрами в квестах", + "marketing2Lead2": "Примите участие в одном из сотен квестов вместе со своей командой: монстры заставят вас выложиться по максимуму. Забыть почистить зубы — значит нанести урон всем!", "marketing2Lead3Title": "Соревнуйтесь друг с другом", - "marketing2Lead3": "Испытания позволяют соревноваться с друзьями и незнакомыми людьми. Тот, кто достигнет по итогам лучших результатов, получит специальный приз.", - "marketing3Header": "Приложения и расширения", - "marketing3Lead1": "С мобильными приложениями для **iPhone и Android** разобраться с делами можно на бегу. Мы понимаем, что заходить на веб-сайт для того, чтобы нажать лишь несколько кнопок, может быть не очень удобным.", - "marketing3Lead2Title": "Интеграция", - "marketing3Lead2": "Другие **сторонние инструменты** помогают связывать Habitica с различными событиями в вашей жизни. Наш API обеспечивает простую интеграцию для таких возможностей, как [расширение Chrome](https://chrome.google.com/webstore/detail/habitica/pidkmpibnnnhneohdgjclfdjpijggmjj?hl=ru-RU), которое отнимает у вас очки за просмотр бесполезных сайтов и прибавляет, когда вы посещаете более полезные сайты. [Подробности смотрите здесь](https://habitica.fandom.com/ru/wiki/Персонализация).", - "marketing4Header": "Использование организациями", - "marketing4Lead1": "Образование — одна из сфер, где игровой потенциал раскрывается лучше всего. Мы все знаем, насколько сегодня учащиеся привязаны к своим телефонам и играм — так используйте это! Дайте им помериться силами в дружеском соревновании. Награждайте их редкими призами за правильное поведение. Отслеживайте их оценки и то, как они растут.", - "marketing4Lead1Title": "Игра в образовании", - "marketing4Lead2": "Здоровье обходится всё дороже, и что-то должно измениться. Создаются сотни программ, направленных на улучшение здоровья и снижение расходов. Мы уверены, что Habitica может открыть прямой путь к здоровому образу жизни.", - "marketing4Lead2Title": "Игра в здравоохранении", - "marketing4Lead3-1": "Хотите жить играючи?", + "marketing2Lead3": "Присоединяйтесь к Испытаниям, которые создает наше сообщество, и получайте списки задач, соответствующие вашим интересам и целям. Сделайте все возможное, чтобы побороться за приз — самоцветы, — который достанется победителю!", + "marketing3Header": "Больше способов использовать Habitica", + "marketing3Lead1": "Вы можете установить Habitica на устройство Android или iOS, чтобы проверять выполнение задач в любом месте. Зацените наши отмеченные наградами приложения — новый взгляд на продуктивность.", + "marketing3Lead2Title": "Опенсорс-сообщество", + "marketing3Lead2": "Мы гордимся тем, что являемся проектом с открытым исходным кодом, и приветствуем вклад нашего преданного сообщества. Сделайте так, чтобы Habitica соответствовала вашим запросам, или внесите свой вклад, чтобы улучшить опыт всех игроков по всему миру. Заходите к нам на [GitHub](https://github.com/HabitRPG/habitica/wiki/Contributing-to-Habitica), чтобы узнать больше!", + "marketing4Header": "Не ограничиваясь домашними делами", + "marketing4Lead1": "Образование — одно из лучших мест для геймификации! Разнообразьте учебные будни, добавив в них немного игры. Habitica — это увлекательный способ отслеживать домашние задания, проводить Испытания для класса и позволять ученикам демонстрировать свои достижения.", + "marketing4Lead1Title": "Учитесь играя", + "marketing4Lead2": "Здоровый образ жизни может легко превратиться в непосильную задачу. Habitica помогает контролировать все ваши фитнес-цели: настраивайте расписание и интенсивность под себя. Превратите путь к здоровью в игру!", + "marketing4Lead2Title": "Здоровье и хорошее самочувствие играя", + "marketing4Lead3-1": "Готовы повеселиться, выполняя задачи?", "marketing4Lead3-2": "Заинтересованы в создании группы в сферах образования, здоровья или других?", - "marketing4Lead3Title": "Игра во всём", + "marketing4Lead3Title": "Начните свое путешествие!", "mobileAndroid": "Приложение для Android", "mobileIOS": "Приложение для iOS", "oldNews": "Новости", @@ -62,13 +62,13 @@ "pkQuestion1": "Что вдохновило на создание Habitica? Как это началось?", "pkAnswer1": "Если вы когда-либо инвестировали время в прокачку персонажа в игре, трудно не задаться вопросом, насколько велика будет ваша жизнь, если вы приложите все усилия для улучшения своего реального я, а не своего аватара. Мы начинаем строительство Habitica решить этот вопрос.
Habitica официально запущена на Kickstarter в 2013 году, и идея действительно взлетела. С тех пор она превратилась в огромный проект, поддержанный нашими удивительными волонтерами с открытым исходным кодом и нашими щедрыми пользователями.", "pkQuestion2": "Почему Habitica работает?", - "pkAnswer2": "Формирование новой привычки - это трудно, потому как люди нуждаются в явной и мгновенной награде. Например, тяжело начать пользоваться зубной нитью. Хотя даже ваш стоматолог говорит, что это полезно в долгосрочной перспективе, сейчас же у вас просто болят десны.
Геймификация Habitica добавляет ощущение мгновенного удовлетворения повседневным целям, награждая за трудную задачу опытом, золотом ... и, возможно, даже случайным призом, как яйцо дракона! Это помогает поддерживать мотивацию людей, даже если сама задача не имеет внутренней награды, и мы видели, как в результате люди меняют свою жизнь.", + "pkAnswer2": "Формировать новые привычки трудно, поэтому люди нуждаются в явной, мгновенной награде. Например, тяжело начать пользоваться зубной нитью: пусть даже ваш стоматолог и говорит, что это полезно в долгосрочной перспективе, сейчас у вас просто болят десны.
Habitica, благодаря игровым механикам, добавляет ощущение мгновенного удовлетворения, награждая за трудную задачу опытом, золотом... и, возможно, даже случайным призом, таким как яйцо дракона! Это помогает людям сохранять мотивацию, даже если само задание не имеет внутренней награды, и мы видели, как в результате люди меняли свою жизнь к лучшему.", "pkQuestion3": "Почему вы добавили социальные функции?", "pkAnswer3": "Для многих людей социальное влияние является мощным мотивирующим стимулом, поэтому мы хотели создать сильное общество, которое бы поддерживало друг друга в достижении целей и радовалось успехам. К счастью, многопользовательские видеоигры как нельзя более удачно формируют чувство общности между пользователями! Структура сообщества в Habitica заимствована из подобных игр. Конечно, некоторые пользователи предпочитают играть в одиночку, но большинство решает создать сеть поддержки в виде небольшой команды близких друзей, которая способствует развитию социальной ответственности благодаря квестам, где члены команды объединяют свои силы для борьбы с монстрами.", "pkQuestion4": "Почему пропуск задач уменьшает здоровье вашего аватара?", "pkAnswer4": "Если вы пропустите одну из своих ежедневных целей, ваш аватар потеряет здоровье на следующий день. Это служит важным мотивирующим фактором, побуждающим людей следовать своим целям, потому что люди действительно ненавидят вредить своему маленькому аватару! Кроме того, социальная ответственность имеет решающее значение для многих людей: если вы боретесь с монстром со своими друзьями, пропуск Ваших задач также ранит их аватары.", "pkQuestion5": "Что отличает Habitica от других геймифицированных программ?", - "pkAnswer5": "Один из способов, с помощью которого Habitica была наиболее успешной в использовании геймификации - это то, что мы приложили много усилий, чтобы задуматься об игровых аспектах, чтобы убедиться, что они действительно забавны. Мы также включили много социальных компонентов, потому что мы считаем, что некоторые из самых мотивирующих игр позволяют вам играть с друзьями, и потому что исследования показали, что легче сформировать привычки, когда у вас есть подотчетность перед другими людьми.", + "pkAnswer5": "Один из главных секретов успеха Habitica — усилия, приложенные чтобы продумать игровые механики и убедиться, что они действительно интересные и занимательные. Мы добавили много социальных компонентов, потому что знаем: играть с друзьями — увлекательнее, а ответственность перед другими помогает закрепить привычки.", "pkQuestion6": "Кто является типичным пользователем Habitica?", "pkAnswer6": "Многие люди используют Habitica! Более половины наших пользователей в возрасте от 18 до 34 лет, мы даже знаем одних пенсионеров, пользующимися сайтом с их молодыми внуками и каждый возраст между ними. Часто семьи присоединяются к партии и сражаются с монстрами вместе.
Многие из наших пользователей имеют некоторый опыт в играх, но, как ни удивительно, когда мы проводили опрос некоторое время назад, 40% наших пользователей идентифицировались как не-геймеры! Таким образом, похоже, что наш метод может быть эффективен для тех, кто хочет повысить производительность и хорошее самочувствие.", "pkQuestion7": "Почему Habitica использует пиксель арт?", @@ -180,5 +180,7 @@ "socialAlreadyExists": "Этот ник уже связан с другим аккаунтом Хабитики.", "footerProduct": "Продукт", "translateHabitica": "Перевести Habitica", - "incorrectResetPhrase": "Пожалуйста, напечатайте <%= magicWord %> заглавными буквами, чтобы сбросить ваш аккаунт." + "incorrectResetPhrase": "Пожалуйста, напечатайте <%= magicWord %> заглавными буквами, чтобы сбросить ваш аккаунт.", + "marketing3Lead1Title": "Приложения для Android и iOS", + "marketing4Lead3Button": "Начните сегодня" } diff --git a/website/common/locales/ru/gear.json b/website/common/locales/ru/gear.json index 24006d63f6..6a9667add9 100644 --- a/website/common/locales/ru/gear.json +++ b/website/common/locales/ru/gear.json @@ -2750,7 +2750,7 @@ "weaponSpecialSpring2023WarriorText": "Шпага Колибри", "weaponSpecialSpring2023WarriorNotes": "Защищайтесь! Отгоните врагов от ваших цветов с помощью этой рапиры! Увеличивает силу на <%= str %>. Ограниченное издание 2023 года Весенняя экипировка.", "weaponSpecialSpring2023MageText": "Магия лунного камня", - "weaponSpecialSpring2023MageNotes": "Чем сильнее их сияние, тем больше их сила. Увеличивает интеллект на <%= int %>. Ограниченная серия 2023 Весенняя экипировка.", + "weaponSpecialSpring2023MageNotes": "Чем сильнее их сияние, тем больше их сила. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченная серия 2023 Весенняя экипировка.", "weaponSpecialSpring2023HealerText": "Пыльца лилий", "weaponSpecialSpring2023HealerNotes": "С дуновеньем и вспышкой вы вызываете новый рост, веселье и окраску. Увеличивает интеллект на <%= int %>. Ограниченная серия 2023 Весенняя экипировка.", "weaponSpecialSummer2023RogueText": "Веер Гуппи", @@ -2971,11 +2971,25 @@ "weaponArmoireHattersShearsText": "Острые ножницы", "weaponArmoireHattersShearsNotes": "Избавьтесь от потрясений и осложнений. Разумеется, эти ножницы отлично справляются и с разрезанием ткани. Увеличивает силу на <%= str %>. Зачарованный шкаф: Набор Шляпника (предмет 3 из 4).", "weaponSpecialSummer2024WarriorNotes": "Некоторые выпавшие акульи зубы превращаются в оружие, способное нанести урон с любой стороны. Увеличивает силу на <%= str %>. Ограниченное издание снаряжения Лета 2024.", - "gearItemsCompleted": "Вы владеете всем снаряжением класса <%= klass %>! Новое снаряжение выпускается во время сезонных Гала.", + "gearItemsCompleted": "Вы владеете всем снаряжением класса <%= klass %>! Новое снаряжение выпускается во время сезонного Торжества.", "moreArmoireGearAvailable": "До тех пор остается ещё <%= armoireCount %> видов снаряжения в Зачарованном сундуке, которые вы можете найти!", "moreArmoireGearComing": "Зачарованный сундук пополняется новыми вещами каждый месяц!", "weaponSpecialSummer2024RogueText": "Трезубец Морского Слизня", "weaponSpecialSummer2024RogueNotes": "Оберни острые укусы других против них самих! Увеличивает силу на <%= str %>. Ограниченное издание лета 2024.", "weaponSpecialSummer2024WarriorText": "Резак из зуба Белой Акулы", - "weaponSpecialSummer2024MageText": "Жезл Морского Анемона" + "weaponSpecialSummer2024MageText": "Жезл Морского Анемона", + "weaponSpecialWinter2025WarriorText": "Топор Лося-Воина", + "weaponSpecialWinter2025WarriorNotes": "Мощный топор для мощного лося! Вас будет не остановить! Увеличивает силу на <%= str %>. Ограниченное издание зимы 2024-2025.", + "weaponSpecialFall2024WarriorText": "Меч пламени", + "weaponSpecialFall2024WarriorNotes": "Это грозное оружие сразу же разрубает препятствия на пути к цели. Увеличивает силу на <%= str %>. Ограниченное издание осени 2024.", + "weaponSpecialFall2024RogueText": "Палочка из лент", + "weaponSpecialFall2024RogueNotes": "Задачи застынут на месте из-за изгибов и поворотов этого завораживающего оружия. Увеличивает силу на <%= str %>. Ограниченное издание осени 2024.", + "weaponSpecialFall2024HealerText": "Космическая коса", + "weaponSpecialFall2024MageText": "Посох Подземного мира", + "weaponSpecialFall2024MageNotes": "Выполнение заданий мгновенно упрощается при одном прикосновении к этому сияющему оружию. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченное издание осени 2024.", + "armorSpecialFall2024HealerNotes": "Станьте единым целым с галактикой и завораживайте окружающих в этих доспехах. Увеличивает Телосложение на <%= con %>. Ограниченный выпуск Осень 2024.", + "weaponSpecialSummer2024MageNotes": "Эти потрясающие щупальца могут одновременно отвлекать, отклонять и направлять магию. Увеличивает интеллект на <%= int %> и восприятие на <%= per %>. Ограниченное издание снаряжения Лета 2024.", + "weaponSpecialSummer2024HealerText": "Посох Морской Улитки", + "weaponSpecialSummer2024HealerNotes": "Вы будете поражены, узнав, насколько тверд панцирь на конце этого посоха. Увеличивает интеллект на <%= int %>. Ограниченное издание снаряжения Лета 2024.", + "weaponSpecialFall2024HealerNotes": "Задачи, которые когда-то были космически сложными, без труда будут разрублены этим поразительным лезвием. Увеличивает интеллект на <%= int %>. Ограниченное издание осени 2024." } diff --git a/website/common/locales/ru/generic.json b/website/common/locales/ru/generic.json index 95ad88e4e7..dbbfcd799a 100644 --- a/website/common/locales/ru/generic.json +++ b/website/common/locales/ru/generic.json @@ -25,7 +25,7 @@ "user": "Пользователь", "market": "Рынок", "newSubscriberItem": "У вас новый Таинственный предмет", - "subscriberItemText": "Каждый месяц подписчики получают таинственный предмет. Он появляется в начале месяца. Читайте статью «Таинственные предметы» на вики для подробной информации.", + "subscriberItemText": "В начале каждого месяца подписчики получают новый таинственный набор снаряжения!", "all": "Все", "none": "Ничего", "more": "ещё <%= count %>", @@ -189,7 +189,7 @@ "dismissAll": "Сбросить все уведомления", "messages": "Сообщения", "emptyMessagesLine1": "У вас нет новых сообщений", - "emptyMessagesLine2": "Вы можете отправить новое сообщение пользователю, открыв его профиль и нажав на кнопку \"Отправить сообщение\".", + "emptyMessagesLine2": "Отправьте сообщение, чтобы начать разговор с вашей командой или другим игроком Habitica", "userSentMessage": "<%- user %> отправил вам сообщение", "letsgo": "Начнем!", "selected": "Выбрано", @@ -219,5 +219,27 @@ "skipExternalLinkModal": "Удерживайте CTRL (Windows) или Command (Mac) при клике по ссылке, чтобы пропустить модальное окно.", "titleCustomizations": "Персонализация", "general": "Общие", - "allNotifications": "Все уведомления" + "allNotifications": "Все уведомления", + "newMessage": "Новое сообщение", + "viewAdminPanel": "Посмотреть панель админа", + "reportPlayer": "Пожаловаться на игрока", + "blockPlayer": "Заблокировать игрока", + "adminTools": "Инструменты админа", + "unblockPlayer": "Разблокировать игрока", + "bannedPlayer": "Этот игрок забанен.", + "shadowMute": "Скрытое отключение звука", + "mutePlayer": "Выключение звука", + "banPlayer": "Забанить игрока", + "unbanPlayer": "Разбанить игрока", + "askQuestionHeaderDescribe": "Впервые в Habitica и не знаете, что вы делаете? Ветеран, но не можете понять, как использовать одну из функций? Заполните эту форму и наша команда свяжется с вами.", + "questionEmailText": "Будет использоваться только для связи с вами по вашему вопросу.", + "question": "Вопрос", + "questionDescriptionText": "Если вам неудобно говорить по-английски, вы можете задавать вопросы на своем языке.", + "questionPlaceholder": "Задайте свой вопрос здесь", + "submitQuestion": "Отправить вопрос", + "whyReportingPlayer": "Почему вы жалуетесь на этого игрока?", + "whyReportingPlayerPlaceholder": "Причина жалобы", + "playerReportModalBody": "Вы должны сообщать только об игроках, нарушающих <%= firstLinkStart %>Правила сообщества<%= linkEnd %> и/или <%= secondLinkStart %>Условия использования<%= linkEnd %>. Отправка ложного сообщения является нарушением Правил сообщества Habitica.", + "rememberToBeKind": "Пожалуйста, помните, что нужно быть добрыми, уважительными и следовать Правилам сообщества.", + "targetUserNotExist": "Выбранный пользователь: '<%=имя пользователя %>' не существует." } diff --git a/website/common/locales/ru/npc.json b/website/common/locales/ru/npc.json index aa1fb7f8bb..c8a9342aff 100644 --- a/website/common/locales/ru/npc.json +++ b/website/common/locales/ru/npc.json @@ -99,7 +99,7 @@ "tourPartyPage": "Добро пожаловать в новую команду! Вы можете приглашать других игроков в вашу команду по имени пользователя, электронной почте или из листа игроков, ищущих команду, чтобы заработать эксклюзивный свиток квеста Василиста.

Зайдите вЧаВо чтобы узнать больше о том, как работают команды.", "tourChallengesPage": "Испытания – это тематические списки заданий, созданные пользователями! Присоединившись к испытанию, вы добавите эти задания к своему аккаунту. Соревнуйтесь с другими пользователями, чтобы получить самоцветы в качестве призов!", "tourMarketPage": "Каждый раз, когда вы выполняете задачу, вы можете получить яйцо, еду или инкубационный эликсир. Также эти предметы можно приобрести здесь.", - "tourHallPage": "Добро пожаловать в Зал Героев, где воздаются почести добровольным помощникам, участвующим в развитии Habitica. За свои заслуги в программировании, изобразительном искусстве, музыке, литературном творчестве или простой помощи они награждены самоцветами, уникальным снаряжением и престижными титулами. Вы тоже можете помочь Habitica!", + "tourHallPage": "Добро пожаловать в Зал Героев, где воздаются почести добровольным помощникам, участвующим в развитии Habitica. За свои заслуги в программировании, рисовании, музыке, литературе или простой помощи они награждены самоцветами, уникальным снаряжением и престижными титулами. Вы тоже можете помочь Habitica!", "tourPetsPage": "Добро пожаловать в стойла! Каждый раз, когда вы выполняете задачу, вы можете получить яйцо или инкубационный эликсир для выведения питомцев. Как только вы выведете питомца, он появится здесь! Нажмите на изображение питомца, чтобы добавить его к своему аватару. Кормите питомцев едой, и они вырастут в выносливых скакунов.", "tourMountsPage": "Когда питомец получит достаточно еды, он станет скакуном и появится здесь. Выберите скакуна, чтобы оседлать его!", "tourEquipmentPage": "Здесь хранится ваше снаряжение! Боевая экипировка влияет на ваши характеристики. Если вы хотите, чтобы на аватаре отображалось иное снаряжение, без изменения характеристик, нажмите «Использовать костюм.»", @@ -120,7 +120,7 @@ "nMonthsSubscriptionGift": "<%= nMonths %> мес. подписки (подарок)", "nGemsGift": "<%= nGems %> самоцветов (подарок)", "nGems": "<%= nGems %> самоцветов", - "paymentSubBillingWithMethod": "На вашу подписку будет выставлен платеж в $<%= amount %> каждый <%= months %> месяц посредством <%= paymentMethod %>.", + "paymentSubBillingWithMethod": "За вашу подписку будет списываться
<%= amount %> каждый(е) <%= months %>месяц(ев) со счета <%= paymentMethod %>", "invalidUnlockSet": "Данный набор предметов недоступен и не может быть разблокирован.", "limitedAvailabilityMinutes": "Доступно <%= minutes %>м <%= seconds %>с", "limitedAvailabilityHours": "Доступно <%= hours %>ч <%= minutes %>м", @@ -131,5 +131,6 @@ "groupsPaymentSubBilling": "Ваша следующая дата выставления счета <%= renewalDate %>.", "sellItems": "Продать предметы", "customizationsShopText": "Хотите изменить свой стиль? Вы обратились по адресу! У нас вы найдете самые свежие образы, соответствующие сезону.", - "notAvailable": "Этот предмет недоступен." + "notAvailable": "Этот предмет недоступен.", + "paymentYouSentSubscriptionG1G1": "Вы отправили <%- name %>
подписку Habitica на <%= months %> месяца(ев), такая же подписка была применена к вашему аккаунту в рамках акции \"Подари один — получи один\"!" } diff --git a/website/common/locales/ru/pets.json b/website/common/locales/ru/pets.json index 05f068d1b8..ca09d31c33 100644 --- a/website/common/locales/ru/pets.json +++ b/website/common/locales/ru/pets.json @@ -86,7 +86,7 @@ "welcomeStable": "Добро пожаловать к Питомцам и Скакунам!", "welcomeStableText": "Добро пожаловать в стойла! Я — Мэтт, Повелитель зверей. Каждый раз, когда вы выполняете задание, у вас будет случайный шанс получить яйцо или инкубационный эликсир для вывода питомцев. Когда питомец вылупляется, он появляется здесь! Нажмите на изображение питомца, чтобы добавить его к своему аватару. Кормите питомцев едой и они вырастут в выносливых скакунов.", "petLikeToEat": "Что любят есть мои Питомцы?", - "petLikeToEatText": "Питомцы вырастут, чем бы вы их ни кормили, но они растут быстрее, если вы накормите их именно тем кормом, который они любят. Экспериментируйте, чтобы найти связь, или посмотрите ответ здесь:
https://habitica.fandom.com/ru/wiki/Еда", + "petLikeToEatText": "Питомцы вырастут, чем бы вы их ни кормили, но они растут быстрее, если вы накормите их именно тем кормом, который они любят. Экспериментируйте, чтобы найти связь, или посмотрите ответ здесь:
https://habitica.com/static/faq#pet-foods", "filterByStandard": "Обычные", "filterByMagicPotion": "Из Волшебного эликсира", "filterByQuest": "Квестовые", diff --git a/website/common/locales/sv/communityguidelines.json b/website/common/locales/sv/communityguidelines.json index 9eca765fbc..84742843ab 100644 --- a/website/common/locales/sv/communityguidelines.json +++ b/website/common/locales/sv/communityguidelines.json @@ -3,13 +3,13 @@ "lastUpdated": "Senast uppdaterad:", "commGuideHeadingWelcome": "Välkommen till Habitica!", "commGuidePara001": "Var hälsad, äventyrare! Välkommen till Habitica, landet av produktivitet, hälsosamt levande, och ibland en enstaka härjande grip. Vi har en glad gemenskap full av hjälpsamma människor som stöttar varandra på deras väg att förbättra sig själva. För att passa in behöver du bara en positiv attityd, ett respektfullt beteende, och förståelse för att alla har olika förmågor och begränsningar – inklusive du! Habiticaner är tålmodiga med varandra och försöker hjälpa till när de kan.", - "commGuidePara002": "För att hjälpa alla att känna sig trygga, glada, och produktiva i vår gemenskap har vi några riktlinjer. Vi har noggrant utformat dem för att de ska vara så vänliga och lättlästa som möjligt. Var vänligt och ta en stund att läsa igenom dem innan du börjar chatta.", - "commGuidePara003": "Dessa regler gäller för alla våra sociala utrymmen, inklusive (men inte nödvändigtvis begränsat till) Trello, GitHub, Weblate, och Habitica Wikin på webbsidan Fandom. När en gemenskap växer och utvecklas kan dess regler behöva anpassas då och då. När större förändringar av riktlinjerna sker kommer du att få reda på det i ett Bailey-meddelande och/eller våra sociala medier!", + "commGuidePara002": "För att hjälpa alla att känna sig trygga, glada, och produktiva har vi några riktlinjer för Utmaningar, användarprofiler, Sällskapschatt och privata meddelanden. Vi har noggrant utformat dessa riktlinjer för att de ska vara så vänliga och lättlästa som möjligt. Var vänligt och ta en stund att läsa igenom dem innan du börjar interagera med andra användare.", + "commGuidePara003": "Dessa regler kan behöva anpassas då och då. När större förändringar av riktlinjerna sker kommer du att få reda på det i ett Bailey-meddelande och/eller våra sociala medier!", "commGuideHeadingInteractions": "Interaktioner i Habitica", - "commGuidePara015": "Habitica har två sorters sociala utrymmen: offentliga och privata. Offentliga utrymmen inkluderar Krogen, Publika Gillen, GitHub, Trello, och Wikin. Privata utrymmen är privata Gillen, Sällskapschatten, och Privata meddelanden. Alla Visningsnamn och @användarnamn måste följa riktlinjerna för de offentliga utrymmena. För att ändra ditt Visningsnamn och/eller ditt Användarnamn, gå till Meny > Inställningar > Profil på mobiltelefonen. På webbsidan, gå till Användare > Inställningar.", + "commGuidePara015": "Habitica har ett antal utrymmen där du kan interagera med andra användare. Dessa inkluderar privata chattrum (Privata meddelanden och Sällskapschatt) så väl som Leta Efter Sällskap-funktionaliteten och Utmaningar.", "commGuidePara016": "När du navigerar runt i de offentliga utrymmena i Habitica finns det några allmänna regler för att se till att alla är trygga och glada.", "commGuideList02A": "Respect each other. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities. Here are some easy ways to respect each other.", - "commGuideList02C": "Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.", + "commGuideList02C": "Posta inte bilder eller text som är våldsamma, hotfulla eller sexuellt utmanande, eller sådana som uppmuntrar till diskriminering, racism, sexism, hat, trakasserier eller skada av någon individ eller grupp.. Inte ens som ett skämt eller meme. Detta inkluderar kränkande ord likaväl som längre uttalanden. Alla har inte samma slags humor, och någonting du ser som ett ett skämt kan såra en annan person.", "commGuideList02D": "Keep discussions appropriate for all ages. We have many young Habiticans who use the site! Let's not tarnish any innocents or hinder any Habiticans in their goals.", "commGuideList02E": "Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.", "commGuideList02G": "Comply immediately with any Mod request. This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc.", @@ -78,5 +78,5 @@ "commGuideLink03": "GitHub: for bug reports or helping with code!", "commGuideLink04": "The Main Trello: for site feature requests.", "commGuidePara069": "De följande talangfyllda konstnärerna har bidragit till dessa illustrationer:", - "commGuideList01A": "Användarvillkoren gäller för alla utrymmen, inklusive privata gillen, sällskapschatten och meddelanden." + "commGuideList01A": "Användarvillkoren gäller för Utmaningar, Sällskap, användarkonton och privata meddelanden." } diff --git a/website/common/locales/sv/contrib.json b/website/common/locales/sv/contrib.json index 635db5e6d4..37e46780fe 100644 --- a/website/common/locales/sv/contrib.json +++ b/website/common/locales/sv/contrib.json @@ -7,8 +7,8 @@ "tier5": "Nivå 5 (Kämpe)", "tier6": "Nivå 6 (Kämpe)", "tier7": "Nivå 7 (Legendarisk)", - "tierModerator": "Moderator (Beskyddare)", - "tierStaff": "Personal (Hjälte)", + "tierModerator": "Moderator", + "tierStaff": "Personal", "tierNPC": "NPC", "friend": "Vän", "elite": "Elit", diff --git a/website/common/locales/sv/front.json b/website/common/locales/sv/front.json index b62a7d9a1e..80c05c8cb5 100644 --- a/website/common/locales/sv/front.json +++ b/website/common/locales/sv/front.json @@ -7,8 +7,8 @@ "communityFacebook": "Facebook", "companyAbout": "Hur Det Funkar", "companyBlog": "Blogg", - "companyContribute": "Bidra", - "companyDonate": "Donera", + "companyContribute": "Bidra till Habitica", + "companyDonate": "Donera till Habitica", "forgotPassword": "Glömt ditt lösenord?", "emailNewPass": "Maila en länk för att återställa lösenord", "forgotPasswordSteps": "Skriv in email-adressen som du använde när du registrerade ditt Habitica konto.", diff --git a/website/common/locales/sv/groups.json b/website/common/locales/sv/groups.json index 9b1484cd2c..36015a8425 100644 --- a/website/common/locales/sv/groups.json +++ b/website/common/locales/sv/groups.json @@ -1,8 +1,8 @@ { "tavern": "Krogchatt", "tavernChat": "Krogchatt", - "innCheckOutBanner": "Du är för närvarande incheckad på Värdshuset. Dina Dagliga uppgifter kommer inte skada dig och du kommer inte gå framåt i dina Uppdrag.", - "innCheckOutBannerShort": "Du är incheckad på Värdshuset.", + "innCheckOutBanner": "Du har för närvarande pausat skada. Dina Dagliga uppgifter kommer inte skada dig och du kommer inte gå framåt i dina Uppdrag.", + "innCheckOutBannerShort": "Du har pausat skada.", "resumeDamage": "Återuppta skada", "helpfulLinks": "Hjälpfulla Länkar", "lookingForGroup": "Letar efter Grupp (Sällskap Sökes) Inlägg", diff --git a/website/common/locales/sv/loginincentives.json b/website/common/locales/sv/loginincentives.json index 20c1103247..4e8eb2ed66 100644 --- a/website/common/locales/sv/loginincentives.json +++ b/website/common/locales/sv/loginincentives.json @@ -7,7 +7,7 @@ "checkinEarned": "Din incheckningsmätare gick upp!", "unlockedCheckInReward": "Du låste upp ett Incheckningspris!", "checkinProgressTitle": "Framsteg till nästa", - "incentiveBackgroundsUnlockedWithCheckins": "Låsta Vanliga Bakgrunder kommer att låsas upp genom dagliga incheckningar.", + "incentiveBackgroundsUnlockedWithCheckins": "Fler Vanliga Bakgrunder kommer att låsas upp genom dagliga incheckningar.", "oneOfAllPetEggs": "en av varje vanligt Husdjursägg", "twoOfAllPetEggs": "två av varje vanligt Husdjursägg", "threeOfAllPetEggs": "tre av varje vanligt Husdjursägg", diff --git a/website/common/locales/sv/npc.json b/website/common/locales/sv/npc.json index da98234879..11151db9e4 100644 --- a/website/common/locales/sv/npc.json +++ b/website/common/locales/sv/npc.json @@ -7,7 +7,7 @@ "justin": "Justin", "justinIntroMessage1": "Hej där! Du måste vara ny här. Jag heter Justin, och jag kommer vara din guide i Habitica.", "justinIntroMessage3": "Bra! Nu så, vad är du intresserad av att jobba på under den här resan?", - "justinIntroMessageUsername": "Before we begin, let’s figure out what to call you. Below you’ll find a display name and username I’ve generated for you. After you’ve picked a display name and username, we’ll get started by creating an avatar!", + "justinIntroMessageUsername": "Innan vi startar ska vi komma fram till vad du ska kallas. Nedanför ser ut ett Visningsnamn och ett Användarnamn som jag genererat för dig. Efter att du valt ett eget Visningsnamn och Användarnamn övergår vi till att skapa en avatar!", "justinIntroMessageAppearance": "Så hur vill du se ut? Oroa dig inte, du kan ändra detta senare.", "introTour": "Nu så! Jag har fyllt i några uppgifter baserat på dina intressent så att du kan starta på en gång. Klicka på en uppgift för att redigera eller lägga till nya uppgifter för din rutin!", "prev": "Föregående", diff --git a/website/common/locales/sv/pets.json b/website/common/locales/sv/pets.json index ec61f55e7f..b3a7947915 100644 --- a/website/common/locales/sv/pets.json +++ b/website/common/locales/sv/pets.json @@ -1,5 +1,5 @@ { - "stable": "Stall", + "stable": "Husdjur och riddjur", "pets": "Husdjur", "activePet": "Aktivt husdjur", "noActivePet": "Inget aktivt husdjur", diff --git a/website/common/locales/sv/questscontent.json b/website/common/locales/sv/questscontent.json index 01e487c39f..fe18ed3848 100644 --- a/website/common/locales/sv/questscontent.json +++ b/website/common/locales/sv/questscontent.json @@ -1,11 +1,11 @@ { "questEvilSantaText": "Pälsjägartomten", - "questEvilSantaNotes": "Du hör sorgfulla vrål djupt från isfälten. Du följer rytandet och morrandet - blandat med en kacklande röst - till en glänta i skogen där du ser en fullvuxen isbjörn. Hon är inburad och kedjad och vrålar för sitt liv. Ovanpå buren dansar en ondsint liten imp, iförd gamla tomtedräkter. Besegra PälsjägarTomten och rädda besten!", + "questEvilSantaNotes": "Du hör sorgfulla vrål djupt från isfälten. Du följer rytandet och morrandet - blandat med en kacklande röst - till en glänta i skogen där du ser en fullvuxen isbjörn. Hon är inburad och kedjad och vrålar för sitt liv. Ovanpå buren dansar en ondsint liten imp, iförd gamla tomtedräkter. Besegra Pälsjägartomten och rädda besten!

Notera: Pälsjägartomten belönar dig med en upprepbar prestation men delar ut ett ovanligt riddjur som endast kan läggas till i ditt stall en gång.", "questEvilSantaCompletion": "Pälsjägartomten tjuter av ilska och studsar iväg i natten. En tacksam hon-björn försöker genom att ryta och morra tala om något för dig. Du tar henne till stallet, där Djurviskaren Matt Boch lyssnar till hennes berättelse och flämtar till av fasa. Hon har en unge! Han flydde till isfälten när mamma björn fångades.", "questEvilSantaBoss": "Pälsjägartomten", "questEvilSantaDropBearCubPolarMount": "Isbjörn (Riddjur)", "questEvilSanta2Text": "Hitta Björnungen", - "questEvilSanta2Notes": "När pälsjägartomten fångade isbjörnsriddjuret sprang hennes unge iväg över isfälten. Du hör grenar brytas och snö krasa genom det kristallklara ljudet av skogen. Tassavtryck! Ni börjar båda springa efter spåren. Hitta alla spår och brutna kvistar, och hämta tillbaka ungen!", + "questEvilSanta2Notes": "När pälsjägartomten fångade isbjörnsriddjuret sprang hennes unge iväg över isfälten. Du hör grenar brytas och snö krasa genom det kristallklara ljudet av skogen. Tassavtryck! Ni börjar båda springa efter spåren. Hitta alla spår och brutna kvistar, och hämta tillbaka ungen!

Notera: “Björnungen” belönar dig med en upprepbar prestation men delar ut ett ovanligt riddjur som endast kan läggas till i ditt stall en gång.", "questEvilSanta2Completion": "Du har hittat björnungen! Den kommer hålla dig sällskap för alltid.", "questEvilSanta2CollectTracks": "Spår", "questEvilSanta2CollectBranches": "Brutna Kvistar", diff --git a/website/common/locales/sv/rebirth.json b/website/common/locales/sv/rebirth.json index b5fb10838e..363688480b 100644 --- a/website/common/locales/sv/rebirth.json +++ b/website/common/locales/sv/rebirth.json @@ -8,7 +8,7 @@ "rebirthOrb": "Använde en Återfödelsens sfär för att starta om efter att ha uppnått Nivå <%= level %>.", "rebirthOrb100": "Använd en Återfödelsens sfär för att starta om efter att ha uppnått Nivå 100 eller högre.", "rebirthOrbNoLevel": "Använde en Återfödelsens Sfär för att börja om.", - "rebirthPop": "Starta om din karaktär omedelbart vid nivå 1 och behåll dina prestationer, samlarföremål och utrustning. Dina uppgifter och deras historik kommer behållas men de kommer att bli återställda till gult. Dina följer kommer att bli borttagna förutom på utmanings-uppgifter. Allt ditt guld, erfarenhet, mana och alla effekter från färdigheter kommer att bli borttaget. Detta kommer att träda i kraft omedelbart. För mer information, se wikins Återfödelsens sfär sida.", + "rebirthPop": "Starta om din karaktär omedelbart vid nivå 1 och behåll dina prestationer, samlarföremål och utrustning. Dina uppgifter och deras historik kommer behållas men de kommer att bli återställda till gult. Dina följer kommer att bli borttagna förutom på utmanings-uppgifter. Allt ditt guld, erfarenhet, mana och alla effekter från färdigheter kommer att bli borttaget. Detta kommer att träda i kraft omedelbart.", "rebirthName": "Pånyttfödelsesfär", "rebirthComplete": "Du har återfötts!" } diff --git a/website/common/locales/sv/spells.json b/website/common/locales/sv/spells.json index 641f262a32..c924cbe376 100644 --- a/website/common/locales/sv/spells.json +++ b/website/common/locales/sv/spells.json @@ -6,7 +6,7 @@ "spellWizardEarthText": "Jordbävning", "spellWizardEarthNotes": "Din mentala kraft skakar jorden och förbättrar ditt Sällskaps Intelligens! (Baserat på: oförbättrad INT)", "spellWizardFrostText": "Isande Köld", - "spellWizardFrostNotes": "Med ett kast fryser du allt du har gjort i följd så att de inte kommer att återställas till noll imorgon! ", + "spellWizardFrostNotes": "Med ett kast fryser du allt du har gjort i följd så att de inte kommer att återställas till noll imorgon!", "spellWarriorSmashText": "Brutalt Slag", "spellWarriorSmashNotes": "Du gör en uppgift mer blå/mindre röd och gör extra skada till Bossar! (Baserat på: STY)", "spellWarriorDefensiveStanceText": "Försvarsställning", diff --git a/website/common/locales/sv/subscriber.json b/website/common/locales/sv/subscriber.json index 765629b41b..746f412723 100644 --- a/website/common/locales/sv/subscriber.json +++ b/website/common/locales/sv/subscriber.json @@ -2,9 +2,9 @@ "subscription": "Abonnemang", "subscriptions": "Abonnemang", "sendGems": "Skicka Juveler", - "buyGemsGold": "Köp Juveler med Guld", + "buyGemsGold": "Gratis Månatliga Juveler", "mustSubscribeToPurchaseGems": "Majoritieten prenumererar för att kunna köpa juveler med guld", - "reachedGoldToGemCapQuantity": "Det begärda beloppet <%= quantity %> överskrider Guld=>Juvel konverterings-begränsningen <%= convCap %> för denna månaden. Vi har detta för att förebygga missbruk/överanvändning. Begränsningen återställs inom de första tre dagarna för varje månad.", + "reachedGoldToGemCapQuantity": "Det begärda beloppet <%= quantity %> överskrider Guld=>Juvel konverterings-begränsningen <%= convCap %> för denna månaden. Begränsningen återställs inom de första tre dagarna för varje månad. Tack för att du abonnerar!", "mysteryItem": "Exklusiva föremål varje månad", "mysteryItemText": "Varje månad får du en unik kosmetiskt föremål för din karaktär! Dessutom, för varje tredje månad av konsekutiv prenumeration så kommer de Mysteriska Tidsresenärerna att ge dig tillgång till historiska (och framtida!) kosmetiska föremålen.", "exclusiveJackalopePet": "Exklusivt husdjur", diff --git a/website/common/locales/uk/backgrounds.json b/website/common/locales/uk/backgrounds.json index 6a62da71d0..e3f47b05dd 100644 --- a/website/common/locales/uk/backgrounds.json +++ b/website/common/locales/uk/backgrounds.json @@ -209,7 +209,7 @@ "backgrounds112016": "Набір 30: листопад 2016", "backgroundMidnightCloudsText": "Опівнічні хмари", "backgroundMidnightCloudsNotes": "Пролетіть крізь опівнічні хмари.", - "backgroundStormyRooftopsText": "Шалені дахи", + "backgroundStormyRooftopsText": "Дахи, занурені в шторм", "backgroundStormyRooftopsNotes": "Полізьте лабіринтом цих небезпених дахів.", "backgroundWindyAutumnText": "Вітряна осінь", "backgroundWindyAutumnNotes": "Женіться за листям вітряною осінню.", @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "Поблукайте стежкою через ліс.", "backgrounds062025": "Набір 133: червень 2025", "backgroundSummerSeashoreText": "Літнє узбережжя", - "backgroundSummerSeashoreNotes": "Спіймайте хвилю на літньому пляжі." + "backgroundSummerSeashoreNotes": "Спіймайте хвилю на літньому пляжі.", + "backgrounds072025": "Набір 134: липень 2025", + "backgroundSirensLairText": "Лігво сирени", + "backgroundSirensLairNotes": "Наважтеся пірнути до лігва сирени." } diff --git a/website/common/locales/zh/backgrounds.json b/website/common/locales/zh/backgrounds.json index 584d909c0b..690eea8ac9 100644 --- a/website/common/locales/zh/backgrounds.json +++ b/website/common/locales/zh/backgrounds.json @@ -906,5 +906,8 @@ "backgroundTrailThroughAForestNotes": "漫步在林间小径。", "backgrounds062025": "第133组:2025年6月发布", "backgroundSummerSeashoreText": "夏日海滨", - "backgroundSummerSeashoreNotes": "在夏日海滨冲浪。" + "backgroundSummerSeashoreNotes": "在夏日海滨冲浪。", + "backgrounds072025": "第134组:2025年7月发布", + "backgroundSirensLairText": "塞壬秘境", + "backgroundSirensLairNotes": "勇闯深海魅影之境。" } diff --git a/website/common/locales/zh/gear.json b/website/common/locales/zh/gear.json index ab4433ffe7..aeeed1d6b5 100644 --- a/website/common/locales/zh/gear.json +++ b/website/common/locales/zh/gear.json @@ -32,7 +32,7 @@ "weaponWarrior4Text": "蓝宝石之刃", "weaponWarrior4Notes": "锋刃如北风般锐利的剑。增加<%= str %>点力量。", "weaponWarrior5Text": "红宝石之剑", - "weaponWarrior5Notes": "锻造时的光芒从未消褪的武器。增加<%= str %>点力量。", + "weaponWarrior5Notes": "锻造时光芒从未消褪的武器。增加<%= str %>点力量。", "weaponWarrior6Text": "黄金之剑", "weaponWarrior6Notes": "黑暗生物的克星。增加<%= str %>点力量。", "weaponRogue0Text": "匕首", @@ -2990,7 +2990,7 @@ "backSpecialHeroicAureoleText": "英雄光环", "headAccessorySpecialHeroicCircletNotes": "头戴王冠会感觉沉重,但这枚饰环却如你慷慨的灵魂一般轻盈。增加全属性<%= attrs %>点。", "armorArmoireSoftWhiteSuitText": "柔软的白色套装", - "armorArmoireSoftWhiteSuitNotes": "白色是一种宁静的颜色。无论你面对的是洁白的床单,还是刚落下的皑皑白雪,你都能保持一个清晰而灵敏的头脑。增加<%= con %>点体质和<%= per %>点感知。魔法宝箱:白色家居服套装(2/3)。", + "armorArmoireSoftWhiteSuitNotes": "白色乃纯净之色。无论是铺展眼前的洁净白床单,还是初雪覆盖的皑皑绒毯,皆能令你心神澄澈,思绪清明。增加<%= con %>点体质与<%= per %>点感知。魔法宝箱:白色家居服套装(2/3)。", "headArmoireWhiteFloppyHatText": "白色软帽", "shieldArmoireSoftWhitePillowText": "柔软的白色枕头", "shieldArmoireSoftWhitePillowNotes": "有条理的战士都会在远征时带上一个枕头。可以保护自己免受被忽视义务的影响……即使是在你小睡的时候。增加智力、感知各<%= attrs %>点。魔法宝箱:白色家居服套装(3/3)", @@ -3365,5 +3365,15 @@ "headAccessoryMystery202505Notes": "以此敏锐感官,精准探测繁花盛放之地。没有属性加成。2025年5月订阅者专属物品。", "eyewearMystery202503Notes": "凛冽眸光威慑一切挑战者!没有属性加成。2025年3月订阅者专属物品。", "eyewearMystery202503Text": "翠玉战神之眼", - "bodyMystery202411Notes": "肩甲尖刺森然,助您为待办清单冲锋陷阵。没有属性加成。2024年11月订阅者专属物品。" + "bodyMystery202411Notes": "肩甲尖刺森然,助您为待办清单冲锋陷阵。没有属性加成。2024年11月订阅者专属物品。", + "shieldArmoireFlyFishingRodNotes": "修长柔韧的竿身配上诱饵,每次抛竿都能让鱼儿把诱饵当作飞虫上钩。力量与智力各增加<%= attrs %>点。魔法宝箱:飞钓套装(3/3)", + "backMystery202507Text": "活力滑板", + "backMystery202507Notes": "刷街疾行如闪电,U池暴踩稳到炸。 无属性加成。2025年7月订阅者专属物品。", + "armorArmoireFlyFishingWadersText": "飞钓涉水裤", + "armorArmoireFlyFishingWadersNotes": "无论踏入溪涧、池塘、湖泊还是江河,都能让你保持温暖与干爽。力量与体质各增加<%= attrs %>点。魔法宝箱:飞钓套装(2/3)", + "headMystery202507Text": "活力滑板帽", + "headMystery202507Notes": "帽子反着戴,帅气依然在,对吧?无属性加成。2025年7月订阅者专属物品。", + "headArmoireFlyFishingHatText": "飞钓帽", + "headArmoireFlyFishingHatNotes": "飞钓帽。宽檐设计,自带备用诱饵插位,溪钓之旅必备好物。力量与感知各增加<%= attrs %>点。魔法宝箱:飞钓套装(1/3)", + "shieldArmoireFlyFishingRodText": "飞钓竿" } diff --git a/website/common/locales/zh/subscriber.json b/website/common/locales/zh/subscriber.json index 2d5dee2ab9..5c75711a72 100644 --- a/website/common/locales/zh/subscriber.json +++ b/website/common/locales/zh/subscriber.json @@ -21,7 +21,7 @@ "subGemName": "订阅者宝石", "maxBuyGems": "你已购买了本月的所有宝石。更多宝石将在每月的前三天上架。感谢你的订阅!", "timeTravelers": "时空旅行者", - "timeTravelersPopoverNoSubMobile": "看来你需要一个神秘沙漏才能打开时空之门,召唤神秘的时空旅行者。", + "timeTravelersPopoverNoSubMobile": "订阅用户每月会收到一个稀有的神秘沙漏,可以使用这个沙漏在时空旅行者商店进行购物!", "timeTravelersPopover": "你的神秘沙漏打开了我们的时空之门!选择你希望我们从过去或未来获取的东西。", "mysterySetNotFound": "未找到神秘套装,或已拥有该套装。", "mysteryItemIsEmpty": "神秘物品已空", @@ -264,5 +264,6 @@ "earn2GemsGift": "每月将获得订阅的2颗宝石", "maxGemCapGift": "他们将拥有最高的 宝石上限 ", "mysterySet202505": "翱翔燕尾服套装", - "mysterySet202506": "太阳辉光套装" + "mysterySet202506": "太阳辉光套装", + "mysterySet202507": "活力滑板套装" } diff --git a/website/common/locales/zh_TW/content.json b/website/common/locales/zh_TW/content.json index 28693814e3..a506cfac6f 100644 --- a/website/common/locales/zh_TW/content.json +++ b/website/common/locales/zh_TW/content.json @@ -382,5 +382,13 @@ "questEggChameleonMountText": "變色龍", "questEggChameleonAdjective": "一個混亂的", "questEggCrabText": "螃蟹", - "questEggCrabMountText": "螃蟹" + "questEggCrabMountText": "螃蟹", + "questEggDogMountText": "狗", + "questEggDogText": "小狗", + "questEggDogAdjective": "友善的", + "questEggCatText": "小貓", + "questEggCatMountText": "貓", + "hatchingPotionRoseGold": "玫瑰金幣", + "questEggOtterMountText": "水獺", + "hatchingPotionTeaShop": "飲料店" } diff --git a/website/common/locales/zh_TW/faq.json b/website/common/locales/zh_TW/faq.json index 461ac4eedd..333bff0efa 100644 --- a/website/common/locales/zh_TW/faq.json +++ b/website/common/locales/zh_TW/faq.json @@ -31,8 +31,8 @@ "faqQuestion27": "為什麼任務會改變顏色?", "faqQuestion28": "如果我需要休息,可以暫停每日任務嗎?", "faqQuestion29": "如何恢復 HP(生命值)?", - "faqQuestion30": "HP (生命值)用盡時怎麼辦?", - "faqQuestion32": "何時可以選擇課程?", + "faqQuestion30": "HP(生命值)歸零時會發生什麼事?", + "faqQuestion32": "要怎麼選擇職業?", "faqQuestion33": "等級 10 級後出現的藍色長條是什麼?", "faqQuestion34": "我的寵物喜歡什麼樣的食物?", "faqQuestion35": "當我餵了我的寵物後他就消失了!發生了什麼事?", @@ -63,5 +63,15 @@ "contactAdmin": "聯絡人admin@habitica.com", "sunsetFaqHeader12": "公會銀行寶石會如何?", "sunsetFaqPara21": "公會銀行中的寶石將在 8 月 8 日公會服務結束時退還給公會領袖。", - "sunsetFaqHeader2": "為什麼酒館和公會服務要結束?" + "sunsetFaqHeader2": "為什麼酒館和公會服務要結束?", + "webFaqAnswer26": "正向習慣(你想要培養的行為;應該有「+」按鈕)\n\n * 吃維他命\n * 使用牙線\n * 學習一小時\n\n負向習慣(你想要限制或避免的行為;應該有「-」按鈕)\n\n * 抽菸\n * 無止盡滑手機\n * 咬指甲\n\n雙向習慣(同時包含正面與負面選項的行為;應有「+」與「-」按鈕)\n\n * 喝水 vs. 喝汽水\n * 學習 vs. 拖延\n\n每日任務範例(你想定期執行的事情)\n * 洗碗\n * 澆花\n * 30 分鐘的運動\n\n待辦事項範例(只需要完成一次的事情)\n\n * 預約時間\n * 整理衣櫃\n * 完成報告", + "webFaqAnswer27": "任務的顏色能夠一目了然地看出其價值。所有任務的初始顏色都是黃色(代表中性)、藍色(代表較好)、紅色(代表較差)。以下是決定每種任務類型價值的方式:\n\n習慣的顏色會根據你是按下「+」或「-」按鈕而變藍或變紅。如果沒完成某個正向習慣和負向習慣,久了它們就會逐漸變成黃色;雙向習慣的顏色則只會根據你按下的按鈕而改變。\n\n每日任務的顏色會根據完成頻率而變化,完成的每日任務顏色會變藍,未完成的每日任務顏色會變紅。\n\n待辦事項的顏色會隨著未完成時間的延長而逐漸變紅。\n\n任務的紅色愈深,完成它獲得的金幣和經驗值就愈多,所以即使是最艱鉅的任務,也一定要挑戰!", + "webFaqAnswer28": "當然可以! 在「設定」中有個「暫停傷害」按鈕,可以防止你因為沒完成每日任務而損失生命值。如果你正在度假、需要休息,或因為其他原因需要暫停一下,這個功能可以幫得上忙。如果你正在打某個副本,你自己的待結算進度會暫停,但你仍然會因隊友沒完成每日任務而受到傷害。\n\n如果要暫停特定的每日任務,你可以編輯排程,改為「每 0 天到期一次」,直到你準備好重新開始為止。", + "webFaqAnswer29": "你可以從「獎勵」欄花費 25 金幣購買「治療藥水」,即可恢復 15 點生命值。另外,每次升級後都會重新滿血!", + "webFaqAnswer30": "如果 HP(生命值)歸零,你就會降級一等、失去所有金幣,以及一件可以重新購買的裝備。", + "webFaqAnswer32": "所有玩家的初始職業都是「戰士」,達到等級 10 後,你可以選擇新職業或繼續當戰士。\n\n每種職業都有不同的裝備和技能,如果你不想選擇職業,可以選擇「退出」。如果您選擇退出,您可以隨時在「設定」中啟用「職業系統」。\n\n如果你在 10 級後想要變更職業,可以使用重生寶珠。等級 50 時可以在市場花費 6 顆寶石購買重生寶珠,等級 100 級時可以免費取得。\n\n或者,你可以隨時在「設定」中花費 3 顆寶石變更職業。這不會像重生寶珠那樣重新設定你的等級,但可以讓你根據新職業重新分配升級過程中累積的屬性點。", + "faqQuestion31": "為什麼我按下的明明不是負向任務,卻還是被扣了 HP(生命值)?", + "webFaqAnswer31": "如果你完成某個任務後卻莫名損失了生命值,那是因為伺服器在同步其他平台上的變更的緣故。舉例來說,如果你在手機應用程式上使用了金幣、魔法值,或損失了生命值,然後在網頁版上完成某個任務,伺服器就會確認同步所有的變更。", + "webFaqAnswer33": "解鎖職業系統後,你同時也解鎖了「技能」,這需要消耗魔法值才能施放。魔法值由你的「智力」屬性決定,可透過技能和裝備進行調整。", + "webFaqAnswer34": "寵物喜歡跟自己同個顏色的食物。普通寵物除外,但所有普通寵物都喜歡一樣的食物。每種寵物喜歡的特定食物如下:\n\n* 普通寵物喜歡肉\n* 白色寵物喜歡牛奶\n* 沙漠寵物喜歡土豆\n* 紅色寵物喜歡草莓\n* 暗影寵物喜歡巧克力\n* 骸骨寵物喜歡魚\n* 殭屍寵物喜歡腐肉\n* 粉色棉花糖寵物喜歡粉色棉花糖\n* 藍色棉花糖寵物喜歡藍色棉花糖\n* 金色寵物喜歡蜂蜜" } diff --git a/website/common/locales/zh_TW/npc.json b/website/common/locales/zh_TW/npc.json index d043e15322..4de0a2c2dd 100644 --- a/website/common/locales/zh_TW/npc.json +++ b/website/common/locales/zh_TW/npc.json @@ -128,5 +128,8 @@ "limitedAvailabilityMinutes": "購買時間剩餘<%= minutes %>分鐘<%= seconds %>秒", "groupsPaymentSubBilling": "您的下一個續簽日期是<%= renewalDate %>。", "groupsPaymentAutoRenew": "該訂閱將自動續訂,直到您取消。如有需要,您可以在團隊計費選項卡中取消它。", - "helpSupportHabitica": "支持Habitica" + "helpSupportHabitica": "支持Habitica", + "customizationsShopText": "想要改變你的造型?你來對地方了!我們備有最時尚的款式適合這個季節。", + "notAvailable": "此項目無法使用。", + "sellItems": "販賣商品" } diff --git a/website/common/locales/zh_TW/subscriber.json b/website/common/locales/zh_TW/subscriber.json index ee28436c25..acf2a4c8be 100644 --- a/website/common/locales/zh_TW/subscriber.json +++ b/website/common/locales/zh_TW/subscriber.json @@ -236,5 +236,16 @@ "mysterySet202306": "炫目彩虹套裝", "mysterySet202309": "巨型彗星飛蛾套裝", "mysterySet202305": "黃昏之龍套裝", - "mysterySet202304": "頭等茶壺套裝" + "mysterySet202304": "頭等茶壺套裝", + "mysterySet202403": "幸運傳奇套裝", + "mysterySet202402": "粉紅天堂套裝", + "subscribeTo": "訂閱", + "oneMonthGift": "為期一個月", + "nMonthsGift": "為期<%= months %>個月", + "unlockNGemsGift": "每個月他們在市場將解鎖<%= count %>寶石", + "unlockNGems": "每個月在市場解鎖 <%= count %>寶石", + "earn2Gems": "每個月訂閱會得到+2寶石", + "monthlyGemsLabel": "每月寶石", + "mysterySet202506": "陽光閃耀套裝", + "monthlyGems": "每月寶石:" } From e68661c04b937b3b2b459e50f4d0ca4bdda15831 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Tue, 1 Jul 2025 11:54:42 -0500 Subject: [PATCH 19/38] 5.37.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d69c4df9df..9c04fef460 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "habitica", - "version": "5.37.0", + "version": "5.37.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "habitica", - "version": "5.37.0", + "version": "5.37.1", "hasInstallScript": true, "dependencies": { "@babel/core": "^7.22.10", diff --git a/package.json b/package.json index 074af58dac..f9fb05a5bc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.37.0", + "version": "5.37.1", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.10", From 6fdc072ec33c2e0f333fb164a74cfe3c6ced71e4 Mon Sep 17 00:00:00 2001 From: negue Date: Tue, 1 Jul 2025 19:30:34 +0200 Subject: [PATCH 20/38] reset the ApiToken on password changes/resets (#15433) * reset the ApiToken on password changes/resets * fix/add tests * fix(typo): test grammar * update new API Token Strings, removed unused one --------- Co-authored-by: Kalista Payne --- .../POST-auth_reset-password-set-new-one.js | 22 ++++++++ .../auth/PUT-user_update_password.test.js | 21 ++++++- website/client/src/app.vue | 3 +- .../src/components/bannedAccountModal.vue | 3 +- website/client/src/libs/auth.js | 11 +++- website/client/src/libs/modform.js | 4 +- .../settings/settingRows/passwordSetting.vue | 9 ++- website/client/src/pages/user-main.vue | 25 --------- website/client/src/store/actions/auth.js | 55 ++++++++----------- website/client/src/store/index.js | 9 +-- website/common/locales/en/settings.json | 5 +- website/server/controllers/api-v3/auth.js | 13 ++++- 12 files changed, 106 insertions(+), 74 deletions(-) diff --git a/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js b/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js index 472872988d..25ae9e7c5d 100644 --- a/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js +++ b/test/api/v3/integration/user/auth/POST-auth_reset-password-set-new-one.js @@ -238,6 +238,28 @@ describe('POST /user/auth/reset-password-set-new-one', () => { expect(isPassValid).to.equal(true); }); + it('changes the apiToken on password reset', async () => { + const user = await generateUser(); + const previousToken = user.apiToken; + + const code = encrypt(JSON.stringify({ + userId: user._id, + expiresAt: moment().add({ days: 1 }), + })); + await user.updateOne({ + 'auth.local.passwordResetCode': code, + }); + + await api.post(`${endpoint}`, { + newPassword: 'my new password', + confirmPassword: 'my new password', + code, + }); + + await user.sync(); + expect(user.apiToken).to.not.eql(previousToken); + }); + it('renders the success page and convert the password from sha1 to bcrypt', async () => { const user = await generateUser(); diff --git a/test/api/v3/integration/user/auth/PUT-user_update_password.test.js b/test/api/v3/integration/user/auth/PUT-user_update_password.test.js index 916e377a7f..6b764d7e1b 100644 --- a/test/api/v3/integration/user/auth/PUT-user_update_password.test.js +++ b/test/api/v3/integration/user/auth/PUT-user_update_password.test.js @@ -27,11 +27,30 @@ describe('PUT /user/auth/update-password', async () => { newPassword, confirmPassword: newPassword, }); - expect(response).to.eql({}); + + expect(response).to.exist; + expect(response.apiToken).to.exist; + await user.sync(); expect(user.auth.local.hashed_password).to.not.eql(previousHashedPassword); }); + it('should change the apiToken on password change', async () => { + const previousToken = user.apiToken; + const response = await user.put(ENDPOINT, { + password, + newPassword, + confirmPassword: newPassword, + }); + + const newToken = response.apiToken; + expect(newToken).to.exist; + + await user.sync(); + expect(user.apiToken).to.eql(newToken); + expect(user.apiToken).to.not.eql(previousToken); + }); + it('returns an error when confirmPassword does not match newPassword', async () => { await expect(user.put(ENDPOINT, { password, diff --git a/website/client/src/app.vue b/website/client/src/app.vue index 2b1215b6df..839b297e0a 100644 --- a/website/client/src/app.vue +++ b/website/client/src/app.vue @@ -111,6 +111,7 @@ import axios from 'axios'; import * as Analytics from '@/libs/analytics'; import { mapState } from '@/libs/store'; import snackbars from '@/components/snackbars/notifications'; +import { LOCALSTORAGE_AUTH_KEY } from '@/libs/auth'; const COMMUNITY_MANAGER_EMAIL = import.meta.env.EMAILS_COMMUNITY_MANAGER_EMAIL; @@ -280,7 +281,7 @@ export default { this.loading = false; }, checkForBannedUser (error) { - const AUTH_SETTINGS = localStorage.getItem('habit-mobile-settings'); + const AUTH_SETTINGS = localStorage.getItem(LOCALSTORAGE_AUTH_KEY); const parseSettings = JSON.parse(AUTH_SETTINGS); const errorMessage = error.response.data.message; diff --git a/website/client/src/components/bannedAccountModal.vue b/website/client/src/components/bannedAccountModal.vue index 7825605a06..3d77931247 100644 --- a/website/client/src/components/bannedAccountModal.vue +++ b/website/client/src/components/bannedAccountModal.vue @@ -30,6 +30,7 @@ diff --git a/website/client/src/components/admin/blocker/index.vue b/website/client/src/components/admin/blocker/index.vue new file mode 100644 index 0000000000..30b0dd16f4 --- /dev/null +++ b/website/client/src/components/admin/blocker/index.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/website/client/src/components/admin/container.vue b/website/client/src/components/admin/container.vue new file mode 100644 index 0000000000..3a467cd37a --- /dev/null +++ b/website/client/src/components/admin/container.vue @@ -0,0 +1,40 @@ + + + diff --git a/website/client/src/components/appFooter.vue b/website/client/src/components/appFooter.vue index 4bf872192e..88f1cf52f7 100644 --- a/website/client/src/components/appFooter.vue +++ b/website/client/src/components/appFooter.vue @@ -276,9 +276,9 @@
+ :image-name="`inventory_quest_scroll_${questData.key}`" + />
- admin panel + {{ $t("adminPanel") }} diff --git a/website/client/src/components/header/menu.vue b/website/client/src/components/header/menu.vue index 917cf8beb4..d2fded1bbf 100644 --- a/website/client/src/components/header/menu.vue +++ b/website/client/src/components/header/menu.vue @@ -295,14 +295,6 @@ {{ $t('help') }} +
  • +
    +
    +
    + + {{ $t('admin') }} + + + {{ $t('admin') }} + +
    + + {{ $t("adminPanel") }} + + + {{ $t("siteBlockers") }} + + + {{ $t('newsroom') }} + +
    +
  • + :image-name="notification.data.icon" + /> diff --git a/website/client/src/components/header/notifications/newMysteryItems.vue b/website/client/src/components/header/notifications/newMysteryItems.vue index 26aa1fced7..0c03aee34b 100644 --- a/website/client/src/components/header/notifications/newMysteryItems.vue +++ b/website/client/src/components/header/notifications/newMysteryItems.vue @@ -12,7 +12,8 @@ >
    + :image-name="mysteryClass" + /> diff --git a/website/client/src/components/news/newsContent.vue b/website/client/src/components/news/newsContent.vue index de9c1547ee..b94d6ceacc 100644 --- a/website/client/src/components/news/newsContent.vue +++ b/website/client/src/components/news/newsContent.vue @@ -81,9 +81,10 @@ import moment from 'moment'; import habiticaMarkdown from 'habitica-markdown'; import { mapState } from '@/libs/store'; import seasonalNPC from '@/mixins/seasonalNPC'; +import { userStateMixin } from '../../mixins/userState'; export default { - mixins: [seasonalNPC], + mixins: [seasonalNPC, userStateMixin], data () { return { posts: [], @@ -107,7 +108,7 @@ export default { if (lastPublishedPost) this.posts.push(lastPublishedPost); // If the user is authorized, show any draft - if (this.user && (this.user.permissions.news || this.user.permissions.fullAccess)) { + if (this.user && (this.hasPermission(this.user, 'news'))) { this.posts.unshift( ...postsFromServer .filter(p => !p.published || moment().isBefore(p.publishDate)), diff --git a/website/client/src/components/static/features.vue b/website/client/src/components/static/features.vue index 868d58ee71..4461ff42a0 100644 --- a/website/client/src/components/static/features.vue +++ b/website/client/src/components/static/features.vue @@ -7,10 +7,15 @@
    - +

    {{ $t('marketing1Lead1Title') }}

    -

    {{ $t('marketing1Lead1') }}

    +

    + {{ $t('marketing1Lead1') }} +

    @@ -18,12 +23,16 @@

    {{ $t('marketing1Lead2Title') }}

    -

    {{ $t('marketing1Lead2') }}

    +

    + {{ $t('marketing1Lead2') }} +

    {{ $t('marketing1Lead3Title') }}

    -

    {{ $t('marketing1Lead3') }}

    +

    + {{ $t('marketing1Lead3') }} +


    @@ -35,19 +44,26 @@

    {{ $t('marketing2Lead1Title') }}

    -

    {{ $t('marketing2Lead1') }}

    +

    + {{ $t('marketing2Lead1') }} +

    {{ $t('marketing2Lead2Title') }}

    -

    +

    {{ $t('marketing2Lead3Title') }}

    -

    {{ $t('marketing2Lead3') }}

    +

    + {{ $t('marketing2Lead3') }} +


    @@ -60,12 +76,18 @@

    {{ $t('marketing3Lead1Title') }}

    -

    +

    {{ $t('marketing3Lead2Title') }}

    -

    +


    @@ -80,7 +102,9 @@

    {{ $t('marketing4Lead1Title') }}

    -

    {{ $t('marketing4Lead1') }}

    +

    + {{ $t('marketing4Lead1') }} +

    @@ -89,7 +113,9 @@

    {{ $t('marketing4Lead2Title') }}

    -

    {{ $t('marketing4Lead2') }}

    +

    + {{ $t('marketing4Lead2') }} +

    diff --git a/website/client/src/pages/settings/components/yourBalance.vue b/website/client/src/pages/settings/components/yourBalance.vue index 7911fb2f62..4174ea24b7 100644 --- a/website/client/src/pages/settings/components/yourBalance.vue +++ b/website/client/src/pages/settings/components/yourBalance.vue @@ -11,7 +11,7 @@ class="balance-info" :currency-needed="currencyNeeded" :amount-needed="amountNeeded" - :neededCurrencyOnly="true" + :needed-currency-only="true" />
    diff --git a/website/client/src/router/index.js b/website/client/src/router/index.js index 5c02b358d5..cc82cd6cae 100644 --- a/website/client/src/router/index.js +++ b/website/client/src/router/index.js @@ -19,16 +19,12 @@ const HallPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/i const PatronsPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/patrons'); const HeroesPage = () => import(/* webpackChunkName: "hall" */'@/components/hall/heroes'); -// Admin Panel -const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel'); -const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/user-support'); -const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin-panel/search'); - -// Except for tasks that are always loaded all the other main level -// All the main level -// components are loaded in separate webpack chunks. -// See https://webpack.js.org/guides/code-splitting-async/ -// for docs +// Admin Pages +const AdminContainerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/container'); +const AdminPanelPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel'); +const AdminPanelUserPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/user-support'); +const AdminPanelSearchPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/admin-panel/search'); +const BlockerPage = () => import(/* webpackChunkName: "admin-panel" */'@/components/admin/blocker'); // Tasks const UserTasks = () => import(/* webpackChunkName: "userTasks" */'@/components/tasks/user'); @@ -184,32 +180,55 @@ const router = new VueRouter({ }, { - name: 'adminPanel', - path: '/admin-panel', - component: AdminPanelPage, + name: 'adminSection', + path: '/admin', + component: AdminContainerPage, meta: { privilegeNeeded: [ // any one of these is enough to give access 'userSupport', + 'accessControl', ], }, children: [ { - name: 'adminPanelSearch', - path: 'search/:userIdentifier', - component: AdminPanelSearchPage, + name: 'adminPanel', + path: 'panel', + component: AdminPanelPage, meta: { - privilegeNeeded: [ + privilegeNeeded: [ // any one of these is enough to give access 'userSupport', ], }, + children: [ + { + name: 'adminPanelSearch', + path: 'search/:userIdentifier', + component: AdminPanelSearchPage, + meta: { + privilegeNeeded: [ + 'userSupport', + ], + }, + }, + { + name: 'adminPanelUser', + path: ':userIdentifier', + component: AdminPanelUserPage, + meta: { + privilegeNeeded: [ + 'userSupport', + ], + }, + }, + ], }, { - name: 'adminPanelUser', - path: ':userIdentifier', - component: AdminPanelUserPage, + name: 'blockers', + path: 'blockers', + component: BlockerPage, meta: { - privilegeNeeded: [ - 'userSupport', + privilegeNeeded: [ // any one of these is enough to give access + 'accessControl', ], }, }, diff --git a/website/client/src/store/actions/blockers.js b/website/client/src/store/actions/blockers.js new file mode 100644 index 0000000000..4473474d6b --- /dev/null +++ b/website/client/src/store/actions/blockers.js @@ -0,0 +1,19 @@ +import axios from 'axios'; + +export async function getBlockers () { + const response = await axios.get('/api/v4/admin/blockers'); + return response.data.data; +} +export async function createBlocker (store, payload) { + const response = await axios.post('/api/v4/admin/blockers', payload.blocker); + return response.data.data; +} +export async function updateBlocker (store, payload) { + const response = await axios.put(`/api/v4/admin/blockers/${payload.blocker._id}`, payload.blocker); + return response.data.data; +} + +export async function deleteBlocker (store, payload) { + const response = await axios.delete(`/api/v4/admin/blockers/${payload.blockerId}`); + return response.data.data; +} diff --git a/website/client/src/store/actions/index.js b/website/client/src/store/actions/index.js index d9be79396d..2b994c718c 100644 --- a/website/client/src/store/actions/index.js +++ b/website/client/src/store/actions/index.js @@ -20,6 +20,7 @@ import * as worldState from './worldState'; import * as news from './news'; import * as analytics from './analytics'; import * as faq from './faq'; +import * as blockers from './blockers'; // Actions should be named as 'actionName' and can be accessed as 'namespace:actionName' // Example: fetch in user.js -> 'user:fetch' @@ -45,6 +46,7 @@ const actions = flattenAndNamespace({ news, analytics, faq, + blockers, }); export default actions; diff --git a/website/common/locales/en/admin.json b/website/common/locales/en/admin.json new file mode 100644 index 0000000000..9e21dcc161 --- /dev/null +++ b/website/common/locales/en/admin.json @@ -0,0 +1,7 @@ +{ + "adminPanel": "Admin Panel", + "siteBlockers": "Site Blockers", + "newsroom": "Newsroom", + "adminBlockerTypeDescription": "IP-Address - Block access for a specific IP-Address\n\nClient - Block access for a client based on the \"x-client\" header.\n\nE-Mail - Blocks e-mails from being used for signup.", + "adminBlockerAreaDescription": "A blocker can either apply to the full site, completely blocking any access. Or it can apply to purchases, which still allows the site to be accessed." +} diff --git a/website/common/locales/en/front.json b/website/common/locales/en/front.json index 249ed1edf1..62eb77db5a 100644 --- a/website/common/locales/en/front.json +++ b/website/common/locales/en/front.json @@ -116,6 +116,7 @@ "missingPassword": "Missing password.", "missingNewPassword": "Missing new password.", "invalidEmailDomain": "You cannot register with emails with the following domains: <%= domains %>", + "emailBlockedRegistration": "This E-Mail is blocked from registration. If you think this is a mistake, please contact us at admin@habitica.com.", "wrongPassword": "Password is incorrect. If you forgot your password, click \"Forgot Password.\"", "incorrectDeletePhrase": "Please type <%= magicWord %> in all capital letters to delete your account.", "incorrectResetPhrase": "Please type <%= magicWord %> in all capital letters to reset your account.", diff --git a/website/common/script/errors/apiErrorMessages.js b/website/common/script/errors/apiErrorMessages.js index ff129b4280..95198226a8 100644 --- a/website/common/script/errors/apiErrorMessages.js +++ b/website/common/script/errors/apiErrorMessages.js @@ -32,7 +32,8 @@ export default { postIdRequired: '"postId" must be a valid UUID.', noNewsPosterAccess: 'You don\'t have news poster access.', - ipAddressBlocked: 'Your access to Habitica has been blocked. This may be due to a breach of our Terms of Service or for other reasons. For details or to ask to be unblocked, please email admin@habitica.com or ask your parent or guardian to email them. Include your Habitica @Username or User Id in the email if you know it.', + ipAddressBlocked: 'Your connection to Habitica has been blocked. For additional information, or to request an appeal, email admin@habitica.com with your Habitica username or User ID.', + clientBlocked: 'This client or third-party tool has been blocked. For additional information, email admin@habitica.com with your Habitica username or User ID.', clientRateLimited: 'This User ID or IP address has been rate limited due to an excess amount of requests to the Habitica API v3. More info can be found in the response headers and at https://github.com/HabitRPG/habitica/wiki/API-Usage-Guidelines#rate-limiting .', invalidPlatform: 'Invalid platform specified', diff --git a/website/server/controllers/api-v4/admin.js b/website/server/controllers/api-v4/admin.js index bf1decf363..bd4aaedbd2 100644 --- a/website/server/controllers/api-v4/admin.js +++ b/website/server/controllers/api-v4/admin.js @@ -1,8 +1,11 @@ import validator from 'validator'; +import merge from 'lodash/merge'; +import { v4 as uuid } from 'uuid'; import { authWithHeaders } from '../../middlewares/auth'; import { ensurePermission } from '../../middlewares/ensureAccessRight'; import { model as User } from '../../models/user'; import { model as UserHistory } from '../../models/userHistory'; +import { model as Blocker } from '../../models/blocker'; import { NotFound, } from '../../libs/errors'; @@ -116,4 +119,73 @@ api.getUserHistory = { }, }; +api.getBlockers = { + method: 'GET', + url: '/admin/blockers', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + const blockers = await Blocker + .find({ disabled: false }) + .lean() + .exec(); + + res.respond(200, blockers); + }, +}; + +api.createBlocker = { + method: 'POST', + url: '/admin/blockers', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + const id = uuid(); + const blocker = await Blocker({ + _id: id, + ...Blocker.sanitize(req.body), + }).save(); + + res.respond(200, blocker); + }, +}; + +api.updateBlocker = { + method: 'PUT', + url: '/admin/blockers/:blockerId', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + req.checkParams('blockerId', res.t('blockerIdRequired')).notEmpty().isUUID(); + + const validationErrors = req.validationErrors(); + if (validationErrors) throw validationErrors; + + const blocker = await Blocker.findById(req.params.blockerId).exec(); + if (!blocker) throw new NotFound(res.t('blockerNotFound')); + + merge(blocker, Blocker.sanitize(req.body)); + const savedBlocker = await blocker.save(); + + res.respond(200, savedBlocker); + }, +}; + +api.deleteBlocker = { + method: 'DELETE', + url: '/admin/blockers/:blockerId', + middlewares: [authWithHeaders(), ensurePermission('accessControl')], + async handler (req, res) { + req.checkParams('blockerId', res.t('blockerIdRequired')).notEmpty().isUUID(); + + const validationErrors = req.validationErrors(); + if (validationErrors) throw validationErrors; + + const blocker = await Blocker.findById(req.params.blockerId).exec(); + if (!blocker) throw new NotFound(res.t('blockerNotFound')); + + blocker.disabled = true; + const savedBlocker = await blocker.save(); + + res.respond(200, savedBlocker); + }, +}; + export default api; diff --git a/website/server/middlewares/blocker.js b/website/server/middlewares/blocker.js new file mode 100644 index 0000000000..6388394865 --- /dev/null +++ b/website/server/middlewares/blocker.js @@ -0,0 +1,56 @@ +import { + Forbidden, +} from '../libs/errors'; +import { apiError } from '../libs/apiError'; +import { model as Blocker } from '../models/blocker'; + +// Middleware to block unwanted IP addresses and clients + +// NOTE: it's meant to be used behind a proxy (for example a load balancer) +// that uses the 'x-forwarded-for' header to forward the original IP addresses. + +const blockedIps = []; +const blockedClients = []; + +Blocker.watchBlockers({ + $or: [ + { type: 'ipaddress' }, + { type: 'client' }, + ], + area: 'full', +}, { + initial: true, +}).on('change', async change => { + const { operation, blocker } = change; + const checkedList = blocker.type === 'ipaddress' ? blockedIps : blockedClients; + if (operation === 'add') { + if (blocker.value && !checkedList.includes(blocker.value)) { + checkedList.push(blocker.value); + } + } else if (operation === 'delete') { + const index = checkedList.indexOf(blocker.value); + if (index !== -1) { + checkedList.splice(index, 1); + } + } +}); + +export default function ipBlocker (req, res, next) { + if (blockedIps.length === 0 && blockedClients.length === 0) return next(); + + const ipMatch = blockedIps.find(blockedIp => blockedIp === req.ip) !== undefined; + if (ipMatch === true) { + const error = new Forbidden(apiError('ipAddressBlocked')); + error.skipLogging = true; + return next(error); + } + + const clientMatch = blockedClients.find(blockedClient => blockedClient === req.headers['x-client']) !== undefined; + if (clientMatch === true) { + const error = new Forbidden(apiError('clientBlocked')); + error.skipLogging = true; + return next(error); + } + + return next(); +} diff --git a/website/server/middlewares/errorHandler.js b/website/server/middlewares/errorHandler.js index c3cdf11fab..9480752517 100644 --- a/website/server/middlewares/errorHandler.js +++ b/website/server/middlewares/errorHandler.js @@ -66,19 +66,21 @@ export default function errorHandler (err, req, res, next) { // eslint-disable-l responseErr = new InternalServerError(); } - // log the error - logger.error(err, { - method: req.method, - originalUrl: req.originalUrl, + if (!err.skipLogging) { + // log the error + logger.error(err, { + method: req.method, + originalUrl: req.originalUrl, - // don't send sensitive information that only adds noise - headers: omit(req.headers, ['x-api-key', 'cookie', 'password', 'confirmPassword']), - body: omit(req.body, ['password', 'confirmPassword']), - query: omit(req.query, ['password', 'confirmPassword']), + // don't send sensitive information that only adds noise + headers: omit(req.headers, ['x-api-key', 'cookie', 'password', 'confirmPassword']), + body: omit(req.body, ['password', 'confirmPassword']), + query: omit(req.query, ['password', 'confirmPassword']), - httpCode: responseErr.httpCode, - isHandledError: responseErr.httpCode < 500, - }); + httpCode: responseErr.httpCode, + isHandledError: responseErr.httpCode < 500, + }); + } const jsonRes = { success: false, diff --git a/website/server/middlewares/index.js b/website/server/middlewares/index.js index e43e38ba00..4cd0df9ace 100644 --- a/website/server/middlewares/index.js +++ b/website/server/middlewares/index.js @@ -23,7 +23,7 @@ import { forceSSL, forceHabitica, } from './redirects'; -import ipBlocker from './ipBlocker'; +import blocker from './blocker'; import v1 from './v1'; import v2 from './v2'; import appRoutes from './appRoutes'; @@ -81,7 +81,7 @@ export default function attachMiddlewares (app, server) { app.use(maintenanceMode); - app.use(ipBlocker); + app.use(blocker); app.use(cors); app.use(forceSSL); diff --git a/website/server/middlewares/ipBlocker.js b/website/server/middlewares/ipBlocker.js deleted file mode 100644 index c11f3e47d1..0000000000 --- a/website/server/middlewares/ipBlocker.js +++ /dev/null @@ -1,38 +0,0 @@ -import nconf from 'nconf'; -import { - Forbidden, -} from '../libs/errors'; -import { apiError } from '../libs/apiError'; - -// Middleware to block unwanted IP addresses - -// NOTE: it's meant to be used behind a proxy (for example a load balancer) -// that uses the 'x-forwarded-for' header to forward the original IP addresses. - -// A list of comma separated IPs to block -// It works fine as long as the list is short, -// if the list becomes too long for an env variable we'll switch to Redis. -const BLOCKED_IPS_RAW = nconf.get('BLOCKED_IPS'); - -const blockedIps = BLOCKED_IPS_RAW - ? BLOCKED_IPS_RAW - .trim() - .split(',') - .map(blockedIp => blockedIp.trim()) - .filter(blockedIp => Boolean(blockedIp)) - : []; - -export default function ipBlocker (req, res, next) { - // If there are no IPs to block, skip the middleware - if (blockedIps.length === 0) return next(); - - // Is the client IP, req.ip, blocked? - const match = blockedIps.find(blockedIp => blockedIp === req.ip) !== undefined; - - if (match === true) { - // Not translated because no user is loaded at this point - return next(new Forbidden(apiError('ipAddressBlocked'))); - } - - return next(); -} diff --git a/website/server/models/blocker.js b/website/server/models/blocker.js new file mode 100644 index 0000000000..51f1c13529 --- /dev/null +++ b/website/server/models/blocker.js @@ -0,0 +1,103 @@ +/* eslint-disable camelcase */ + +import mongoose from 'mongoose'; +import EventEmitter from 'events'; +import baseModel from '../libs/baseModel'; + +export const blockTypes = [ + 'ipaddress', + 'email', + 'client', +]; + +export const blockArea = [ + 'full', + 'payments', +]; + +export const schema = new mongoose.Schema({ + disabled: { + $type: Boolean, default: false, // If true, the block is disabled + }, + type: { + $type: String, enum: blockTypes, required: true, + }, + area: { + $type: String, enum: blockArea, default: 'full', // full or payment + }, + value: { + $type: String, required: true, // e.g. IP address + }, + blockSource: { + $type: String, enum: ['administrator', 'system', 'worker'], default: 'administrator', // who created the block + }, + reason: { + $type: String, required: false, // e.g. 'abusive behavior' + }, +}, { + strict: true, + minimize: false, // So empty objects are returned + typeKey: '$type', // So that we can use fields named `type` +}); + +schema.plugin(baseModel, { + timestamps: true, +}); + +schema.statics.watchBlockers = function watchBlockers (query, options) { + const emitter = new EventEmitter(); + const matchQuery = { + $match: {}, + }; + if (query) { + if (query.type) { + matchQuery.$match['fullDocument.type'] = query.type; + } + if (query.area) { + matchQuery.$match['fullDocument.area'] = query.area; + } + } + process.nextTick(() => { + this.watch([matchQuery], { + fullDocument: 'updateLookup', + }) + .on('change', change => { + if (!change.fullDocument) { + return; // Ignore changes that don't have a fullDocument + } + if (change.operationType === 'insert' || !change.fullDocument.disabled) { + emitter.emit('change', { + operation: 'add', + blocker: change.fullDocument, + }); + } else if (change.operationType === 'update' && change.fullDocument.disabled) { + emitter.emit('change', { + operation: 'delete', + blocker: change.fullDocument, + }); + } + }) + .on('error', error => { + emitter.emit('error', error); + }); + if (options.initial) { + const initialQuery = { + disabled: false, + ...query, + }; + this.find(initialQuery).then(docs => { + for (const doc of docs) { + emitter.emit('change', { + operation: 'add', + blocker: doc, + }); + } + }).catch(error => { + emitter.emit('error', error); + }); + } + }); + return emitter; +}; + +export const model = mongoose.model('Blocker', schema); diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index efffc176c0..477d522181 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -9,9 +9,31 @@ import { schema as SubscriptionPlanSchema } from '../subscriptionPlan'; import { schema as TagSchema } from '../tag'; import { schema as UserNotificationSchema } from '../userNotification'; import { schema as WebhookSchema } from '../webhook'; +import { model as Blocker } from '../blocker'; const RESTRICTED_EMAIL_DOMAINS = Object.freeze(['habitica.com', 'habitrpg.com']); +const BLOCKED_EMAILS = []; + +Blocker.watchBlockers({ + type: 'email', + area: 'full', +}, { + initial: true, +}).on('change', async change => { + const { operation, blocker: { value } } = change; + if (operation === 'add') { + if (value && !BLOCKED_EMAILS.includes(value)) { + BLOCKED_EMAILS.push(value); + } + } else if (operation === 'delete') { + const index = BLOCKED_EMAILS.indexOf(value); + if (index !== -1) { + BLOCKED_EMAILS.splice(index, 1); + } + } +}); + // User schema definition export const UserSchema = new Schema({ apiToken: { @@ -43,6 +65,12 @@ export const UserSchema = new Schema({ return RESTRICTED_EMAIL_DOMAINS.every(domain => !lowercaseEmail.endsWith(`@${domain}`)); }, message: shared.i18n.t('invalidEmailDomain', { domains: RESTRICTED_EMAIL_DOMAINS.join(', ') }), + }, { + validator (email) { + const lowercaseEmail = email.toLowerCase(); + return BLOCKED_EMAILS.every(block => lowercaseEmail.indexOf(block) === -1); + }, + message: shared.i18n.t('emailBlockedRegistration'), }], }, username: { @@ -196,6 +224,7 @@ export const UserSchema = new Schema({ userSupport: Boolean, // access User Support feature in Admin Panel challengeAdmin: Boolean, // Can manage and administrate challenges moderator: Boolean, // Can ban, flag users and manage social spaces + accessControl: Boolean, // Can manage IP and client blockers coupons: Boolean, // Can generate and request coupons }, balance: { $type: Number, default: 0 }, From dad1440138f2a61ae5e2461942265a4dfd3b47eb Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 8 Aug 2025 10:12:25 +0200 Subject: [PATCH 36/38] Translated using Weblate (German) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 99.4% (185 of 186 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (186 of 186 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (186 of 186 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (54 of 54 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (243 of 243 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (15 of 15 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (47 of 47 strings) Translated using Weblate (Dutch) Currently translated at 78.0% (2643 of 3385 strings) Translated using Weblate (Dutch) Currently translated at 40.8% (100 of 245 strings) Translated using Weblate (Polish) Currently translated at 89.9% (233 of 259 strings) Translated using Weblate (Dutch) Currently translated at 67.5% (175 of 259 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (914 of 914 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (110 of 110 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (914 of 914 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (914 of 914 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 20.8% (51 of 245 strings) Translated using Weblate (Turkish) Currently translated at 65.9% (60 of 91 strings) Translated using Weblate (Turkish) Currently translated at 65.9% (60 of 91 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 17.9% (44 of 245 strings) Co-authored-by: FingerTiao <787170918@qq.com> Co-authored-by: Jaime Martí Co-authored-by: Karmelkowy Co-authored-by: Linsey Dunya Pastoor Co-authored-by: Mete Olmez Co-authored-by: Sefa Uğurlu Co-authored-by: Summer_GUI Co-authored-by: Toro Mor Co-authored-by: Weblate Co-authored-by: innnko Translate-URL: https://translate.habitica.com/projects/habitica/backgrounds/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/challenge/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/communityguidelines/tr/ Translate-URL: https://translate.habitica.com/projects/habitica/contrib/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/death/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/defaulttasks/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/faq/zh_Hant/ Translate-URL: https://translate.habitica.com/projects/habitica/front/de/ Translate-URL: https://translate.habitica.com/projects/habitica/front/es/ Translate-URL: https://translate.habitica.com/projects/habitica/front/zh_Hans/ Translate-URL: https://translate.habitica.com/projects/habitica/gear/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/generic/ja/ Translate-URL: https://translate.habitica.com/projects/habitica/settings/nl/ Translate-URL: https://translate.habitica.com/projects/habitica/settings/pl/ Translation: Habitica/Backgrounds Translation: Habitica/Challenge Translation: Habitica/Communityguidelines Translation: Habitica/Contrib Translation: Habitica/Death Translation: Habitica/Defaulttasks Translation: Habitica/Faq Translation: Habitica/Front Translation: Habitica/Gear Translation: Habitica/Generic Translation: Habitica/Settings --- website/common/locales/de/front.json | 3 +- website/common/locales/es/front.json | 3 +- website/common/locales/ja/backgrounds.json | 24 +++++----- website/common/locales/ja/challenge.json | 4 +- website/common/locales/ja/contrib.json | 4 +- website/common/locales/ja/death.json | 2 +- website/common/locales/ja/defaulttasks.json | 8 ++-- website/common/locales/ja/generic.json | 2 +- website/common/locales/nl/faq.json | 12 ++++- website/common/locales/nl/gear.json | 45 ++++++++++++++++++- website/common/locales/nl/settings.json | 14 +++--- website/common/locales/pl/settings.json | 9 ++-- .../locales/tr/communityguidelines.json | 6 +-- website/common/locales/zh/front.json | 3 +- website/common/locales/zh_TW/faq.json | 11 ++++- 15 files changed, 107 insertions(+), 43 deletions(-) diff --git a/website/common/locales/de/front.json b/website/common/locales/de/front.json index cee3c55366..6ab49517df 100644 --- a/website/common/locales/de/front.json +++ b/website/common/locales/de/front.json @@ -182,5 +182,6 @@ "incorrectResetPhrase": "Bitte tippe <%= magicWord %> in Großbuchstaben um deinen Account zurückzusetzen.", "translateHabitica": "Habitica übersetzen", "marketing3Lead1Title": "Android & iOS Apps", - "marketing4Lead3Button": "Starte noch heute" + "marketing4Lead3Button": "Starte noch heute", + "emailBlockedRegistration": "Diese E-Mail ist für die Registrierung blockiert. Wenn du denkst, dass das ein Fehler ist, kontaktiere uns bitte unter admin@habitica.com." } diff --git a/website/common/locales/es/front.json b/website/common/locales/es/front.json index 3b3c974dfa..515515ba97 100644 --- a/website/common/locales/es/front.json +++ b/website/common/locales/es/front.json @@ -183,5 +183,6 @@ "incorrectResetPhrase": "Por favor, teclea <%= magicWord %> en mayúsculas para reiniciar tu cuenta.", "marketing3Lead1Title": "Aplicaciones para Android y iOS", "marketing4Lead3Button": "Empieza Hoy Mismo", - "missingClientHeader": "Faltan los encabezados x-client." + "missingClientHeader": "Faltan los encabezados x-client.", + "emailBlockedRegistration": "Esta cuenta de E-Mail está bloqueada desde el registro. Si crees que es un error, por favor contacta con nosotros por medio de admin@habitica.com." } diff --git a/website/common/locales/ja/backgrounds.json b/website/common/locales/ja/backgrounds.json index b5e72fb883..c70257cd4d 100644 --- a/website/common/locales/ja/backgrounds.json +++ b/website/common/locales/ja/backgrounds.json @@ -38,7 +38,7 @@ "backgroundHauntedHouseNotes": "幽霊屋敷をそっと通りぬけましょう。", "backgroundPumpkinPatchText": "カボチャ畑", "backgroundPumpkinPatchNotes": "カボチャ畑でジャック・オ・ランタンを作りましょう。", - "backgrounds112014": "セット6: 2014年11月リリース", + "backgrounds112014": "セット6:2014年11月リリース", "backgroundHarvestFeastText": "収穫祭", "backgroundHarvestFeastNotes": "収穫祭を楽しみましょう。", "backgroundStarrySkiesText": "星空", @@ -131,7 +131,7 @@ "backgroundSunsetOasisNotes": "夕焼けの沃地で休もう。", "backgrounds122015": "セット19:2015年12月リリース", "backgroundAlpineSlopesText": "雪の山", - "backgroundAlpineSlopesNotes": "雪の山にスキーする。", + "backgroundAlpineSlopesNotes": "雪の山でスキーをしよう。", "backgroundSnowySunriseText": "雪の日出", "backgroundSnowySunriseNotes": "雪の日の出を見よう。", "backgroundWinterTownText": "都市の冬", @@ -206,7 +206,7 @@ "backgroundStrangeSewersNotes": "奇妙な下水道で滑りましょう。", "backgroundRainyCityText": "雨の街", "backgroundRainyCityNotes": "雨の街をピチャピチャ歩きましょう。", - "backgrounds112016": "セット30: 2016年11月リリース", + "backgrounds112016": "セット30:2016年11月リリース", "backgroundMidnightCloudsText": "闇夜の雲海", "backgroundMidnightCloudsNotes": "闇夜の雲海を飛びまわろう。", "backgroundStormyRooftopsText": "嵐の屋上", @@ -252,8 +252,8 @@ "backgroundMagicBeanstalkNotes": "魔法の豆の木を登ろう。", "backgroundMeanderingCaveText": "曲がりくねった洞窟", "backgroundMeanderingCaveNotes": "曲がりくねった洞窟を探検しよう。", - "backgroundMistiflyingCircusText": "幻想的なサーカス", - "backgroundMistiflyingCircusNotes": "幻想的なサーカスで酔い騒ごう。", + "backgroundMistiflyingCircusText": "マドワシティーのサーカス", + "backgroundMistiflyingCircusNotes": "マドワシティーのサーカスで酔い騒ごう。", "backgrounds042017": "セット35: 2017年4月リリース", "backgroundBugCoveredLogText": "虫だらけの丸太", "backgroundBugCoveredLogNotes": "虫だらけの丸太を調査しよう。", @@ -264,9 +264,9 @@ "backgrounds052017": "セット36:2017年5月リリース", "backgroundGuardianStatuesText": "ガーディアンの像", "backgroundGuardianStatuesNotes": "ガーディアンの像の前で寝ずの番をしよう。", - "backgroundHabitCityStreetsText": "Habit シティーの街並み", - "backgroundHabitCityStreetsNotes": "Habit シティーの街並みを探検しましょう。", - "backgroundOnATreeBranchText": "木の枝で", + "backgroundHabitCityStreetsText": "ハビットシティの街並み", + "backgroundHabitCityStreetsNotes": "ハビットシティの街並みを探検しましょう。", + "backgroundOnATreeBranchText": "木の枝の上", "backgroundOnATreeBranchNotes": "木の枝の上にとまろう。", "backgrounds062017": "セット37:2017年6月リリース", "backgroundBuriedTreasureText": "埋もれた宝", @@ -357,7 +357,7 @@ "backgroundDocksNotes": "造船ドックの上で魚釣りをしましょう。", "backgroundRowboatText": "小舟", "backgroundRowboatNotes": "小舟の上で輪唱しましょう。", - "backgroundPirateFlagText": "海賊のフラッグ", + "backgroundPirateFlagText": "海賊の旗", "backgroundPirateFlagNotes": "見る者に恐怖を与える海賊旗を掲げましょう。", "backgrounds072018": "セット50:2018年7月リリース", "backgroundDarkDeepText": "暗い深海", @@ -451,7 +451,7 @@ "backgroundUnderwaterVentsText": "海底の熱水噴出孔", "backgroundSeasideCliffsNotes": "そびえる断崖の美観とともに海辺に立ちましょう。", "backgroundTreehouseText": "ツリーハウス", - "backgroundTreehouseNotes": "あなた達だけの樹木のアジト、あなた達専用のツリーハウスに集まって遊びましょう。", + "backgroundTreehouseNotes": "林の中に隠れた、自分専用のツリーハウスで遊びましょう。", "backgroundGiantDandelionsNotes": "巨大なタンポポに囲まれてのんびり時を過ごしましょう。", "backgroundGiantDandelionsText": "巨大なタンポポ", "backgroundAmidAncientRuinsText": "古代遺跡の真ん中", @@ -516,8 +516,8 @@ "backgroundRainyBarnyardText": "雨降る納屋の前庭", "backgroundHabitCityRooftopsNotes": "ハビットシティーの屋根と屋根の間を大胆に跳ぼう。", "backgroundHabitCityRooftopsText": "ハビットシティーの屋上", - "backgroundHotAirBalloonNotes": "熱気球で景色の上まで舞い上がろう。", - "backgroundHotAirBalloonText": "熱気球", + "backgroundHotAirBalloonNotes": "気球に乗って空から景色を眺めよう。", + "backgroundHotAirBalloonText": "気球", "backgrounds062020": "セット73:2020年6月リリース", "backgroundStrawberryPatchNotes": "いちご畑から新鮮な喜びを摘もう。", "backgroundStrawberryPatchText": "いちご畑", diff --git a/website/common/locales/ja/challenge.json b/website/common/locales/ja/challenge.json index 5940612585..91c656441a 100644 --- a/website/common/locales/ja/challenge.json +++ b/website/common/locales/ja/challenge.json @@ -2,11 +2,11 @@ "challenge": "チャレンジ", "challengeDetails": "チャレンジはプレイヤー同士で競争し、一連の関連したタスクを完了させることによって賞品を獲得するコミュニティのイベントです。", "brokenChaLink": "チャレンジのリンク切れ", - "brokenTask": "チャレンジのリンク切れ: このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?", + "brokenTask": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジから削除されました。どうしますか?", "keepIt": "このまま残す", "removeIt": "消す", "brokenChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、チャレンジ(もしくはグループ)が削除されました。残されたタスクはどうしますか?", - "challengeCompleted": "チャレンジ終了です! <%- user %>が優勝しました! 残ったタスクはどうしますか?", + "challengeCompleted": "チャレンジ終了です!<%- user %>が優勝しました!残ったタスクはどうしますか?", "unsubChallenge": "チャレンジのリンク切れ:このタスクはもともとチャレンジの一部でしたが、あなたがチャレンジ登録を取り消しました。残されたタスクはどうしますか?", "challenges": "チャレンジ", "endDate": "終了日", diff --git a/website/common/locales/ja/contrib.json b/website/common/locales/ja/contrib.json index cdf8791d2e..c9d8ad56b0 100644 --- a/website/common/locales/ja/contrib.json +++ b/website/common/locales/ja/contrib.json @@ -1,5 +1,5 @@ { - "playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表わしています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!", + "playerTiersDesc": "チャットで見られる色のついたユーザー名は、その人の貢献者段位を表しています。段位が高いほど、その人がHabiticaのピクセルアート、コード、コミュニティなどに貢献していることを示します!", "tier1": "初段 (友人)", "tier2": "2段 (友人)", "tier3": "3段 (エリート)", @@ -10,7 +10,7 @@ "tierModerator": "モデレーター", "tierStaff": "スタッフ", "tierNPC": "NPC", - "friend": "友達", + "friend": "友人", "elite": "エリート", "champion": "チャンピオン", "legendary": "伝説", diff --git a/website/common/locales/ja/death.json b/website/common/locales/ja/death.json index 7ce9bb9e0d..6cfd909e2f 100644 --- a/website/common/locales/ja/death.json +++ b/website/common/locales/ja/death.json @@ -1,7 +1,7 @@ { "lostAllHealth": "体力がなくなった!", "dontDespair": "がっかりしないで!", - "deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、がんばればすべてを取り戻せます! あなたなら、きっとやれる――幸あらんことを。", + "deathPenaltyDetails": "レベル、ゴールド、装備の一部を失ってしまいました。しかし、努力すればすべて取り戻せます! あなたなら、きっとできる!頑張って!", "refillHealthTryAgain": "体力を復活させて、もう一度やってみよう", "dyingOftenTips": "よく体力がなくなってしまいますか? ここにヒントがあります! ", "losingHealthWarning": "気をつけて - 体力が減っています!", diff --git a/website/common/locales/ja/defaulttasks.json b/website/common/locales/ja/defaulttasks.json index 965949dbb6..70280aa2eb 100644 --- a/website/common/locales/ja/defaulttasks.json +++ b/website/common/locales/ja/defaulttasks.json @@ -1,10 +1,10 @@ { - "defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)", - "defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)", - "defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)", + "defaultHabit1Text": "生産的な仕事 (鉛筆をクリックして編集)", + "defaultHabit2Text": "ジャンクフードを食べる(鉛筆をクリックして編集)", + "defaultHabit3Text": "階段・エレベーター(鉛筆をクリックして編集)", "defaultHabit4Text": "Habiticaにタスクを追加しましょう", "defaultHabit4Notes": "習慣、日課、To Doのどれでも", - "defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)", + "defaultTodo1Text": "Habiticaに参加する(チェックして完了しましょう!)", "defaultTodoNotes": "このTo Doを完了にする、または編集、削除できます。", "defaultReward1Text": "15分間の休憩", "defaultReward2Text": "自分へのごほうび", diff --git a/website/common/locales/ja/generic.json b/website/common/locales/ja/generic.json index 32d6db0daa..4df090af0a 100644 --- a/website/common/locales/ja/generic.json +++ b/website/common/locales/ja/generic.json @@ -107,7 +107,7 @@ "greeting0": "こんにちは!", "greeting1": "ちょっとあいさつしてみただけ (^_^)", "greeting2": "(遠くから手をブンブン振る)", - "greeting3": "そこのあなた!", + "greeting3": "ヤッホー!", "greetingCardAchievementTitle": "Kawaii", "greetingCardAchievementText": "やあ!よう!こんにちは!<%= count %> 通のあいさつカードをやりとりしました。", "thankyouCard": "ありがとうのカード", diff --git a/website/common/locales/nl/faq.json b/website/common/locales/nl/faq.json index 7d42a0ed94..4543921868 100644 --- a/website/common/locales/nl/faq.json +++ b/website/common/locales/nl/faq.json @@ -49,7 +49,7 @@ "sunsetFaqList10": "Spelers worden tevens aangemoedigd te mailen naar admin@habitica.commet de vragen waarop ze geen antwoord konden vinden in bovenstaande links.", "sunsetFaqPara20": "Habitica's Gemeenschapsrichtlijnen zullen bijgewerkt worden op het moment dat de service Herberg en Gilden ophouden te bestaan. Ze zullen de klemtoon leggen op gemeenschapsregels die in relatie staan tot het spelersprofiel, Uitdagingen en berichten in private ruimtes. Onze Gebruikersvoorwaarden waren steeds van toepassing op zowel publieke als private ruimtes, en vereisen niet meteen een update hierdoor.", "contentQuestion0": "Wat veranderd er?", - "commonQuestions": "Veelvoorkomende vragen", + "commonQuestions": "Veelvoorkomende Vragen", "faqQuestion25": "Wat zijn de verschillende type taken?", "faqQuestion40": "Wat zijn Edelstenen en hoe kan ik ze krijgen?", "faqQuestion48": "Kan ik Habitica spelen met anderen?", @@ -90,5 +90,13 @@ "faqQuestion43": "Hoe kan ik Quests starten?", "webFaqAnswer43": "Om een Quest te starten, moet je lid zijn van een groep. Groepen kunnen solo-avonturen zijn waarin je Quests alleen aangaat, of je kunt andere Habitica-spelers uitnodigen om Quests sneller aan te pakken!\n\nKies een Quest-scroll uit je inventaris door op de knop “Quest starten” te klikken in je groep. Voltooi je taken zoals je normaal doet om voortgang te boeken in de Quest! Je bouwt schade op tegen een monster als je een Baas-Quest doet, of je maakt kans om voorwerpen te vinden als je een Verzamel-Quest doet. Alle opgebouwde voortgang wordt de volgende dag toegepast.\n\nWanneer je genoeg schade hebt aangericht of alle voorwerpen hebt verzameld, is de Quest voltooid en ontvang je je beloningen!", "faqQuestion44": "Hoe kan ik Challenge-taken verwijderen?", - "webFaqAnswer44": "Je moet de Challenge verlaten of wachten tot de Challenge wordt afgesloten om de bijbehorende taken te kunnen verwijderen. Een rood megafoonpictogram betekent dat de Challenge is afgesloten, terwijl een grijze megafoon betekent dat de Challenge nog loopt.\n\nOm Challenge-taken te verwijderen in de Android-app:\n1. Tik op een taak die bij de Challenge hoort.\n2. Tik rechtsboven op het scherm op “Verwijderen”.\n3. Kies om de Challenge-taken van je takenlijst te verwijderen.\n\nOm Challenge-taken te verwijderen in de iOS-app:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, tik op de taak en selecteer onderaan “Verwijderen”.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.\n\nOm Challenge-taken te verwijderen op de website:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, klik erop en kies om de taken van je takenlijst te verwijderen.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen." + "webFaqAnswer44": "Je moet de Challenge verlaten of wachten tot de Challenge wordt afgesloten om de bijbehorende taken te kunnen verwijderen. Een rood megafoonpictogram betekent dat de Challenge is afgesloten, terwijl een grijze megafoon betekent dat de Challenge nog loopt.\n\nOm Challenge-taken te verwijderen in de Android-app:\n1. Tik op een taak die bij de Challenge hoort.\n2. Tik rechtsboven op het scherm op “Verwijderen”.\n3. Kies om de Challenge-taken van je takenlijst te verwijderen.\n\nOm Challenge-taken te verwijderen in de iOS-app:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, tik op de taak en selecteer onderaan “Verwijderen”.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.\n\nOm Challenge-taken te verwijderen op de website:\n1. Zoek de Challenge-taak die je wilt verwijderen en kijk naar het megafoonpictogram.\n2. Als het megafoonpictogram rood is, klik erop en kies om de taken van je takenlijst te verwijderen.\n3. Als het megafoonpictogram grijs is, moet je de Challenge opzoeken en deze verlaten om de taak te verwijderen.", + "faqQuestion45": "Mijn personage is veranderd in een sneeuwpop, zeester, bloem of geest. Hoe kan ik terug veranderen?", + "webFaqAnswer45": "Één van jouw groepsleden heeft een Seizoens Winkel transformatie voorwerp op jou gebruikt! Jouw personage zal de volgende dag weer normaal worden. Als je de transformatie eerder wilt verwijderen, kan je een tegengif (Zout, Zand, Bloemblaadjes-vrij of Ondoorzichtig drankje) kopen bij Beloningen.", + "faqQuestion46": "Hoe meld ik een bug?", + "webFaqAnswer46": "Als je denkt dat je een bug bent tegengekomen, laat het ons dan weten!\n\nOm een bug in de mobiele apps te melden:\n *In het menu, selecteer Ondersteuning en tik op ''Hulp krijgen'' en scroll omlaag naar ''Meld een bug''\n\nOm een bug op de website te melden:\n *In het menu, selecteer ''Meld een bug''", + "faqQuestion47": "Kan ik gegevens zien om te bekijken hoe goed ik mijn taken en gewoontes heb gedaan?", + "webFaqAnswer47": "Op dit moment heeft Habitica geen visuele weergave van je taak gegevens in de loop van de tijd. Echter kan je op de Habitica website je taak gegevens exporteren via het tabblad ''Site Gegevens'' in Instellingen.", + "webFaqAnswer48": "Ja, met Groepen! Je kunt je eigen Groep starten of je aansluiten bij een bestaande Groep. Samen spelen met andere Habitica spelers is een geweldige manier om Queestes aan te gaan, versterking te ontvangen door de vaardigheden van Groepsleden en je motivatie een boost te geven door extra verantwoordelijkheid.", + "faqQuestion49": "Hoe vind ik een Groep als ik niet bij een Groep ben aangesloten?" } diff --git a/website/common/locales/nl/gear.json b/website/common/locales/nl/gear.json index 7d8f01cecc..962181bc1c 100644 --- a/website/common/locales/nl/gear.json +++ b/website/common/locales/nl/gear.json @@ -2601,5 +2601,48 @@ "armorSpecialSummer2022WarriorNotes": "Maak je klaar voor een waterige strijd terwijl je jezelf omringt met deze wervelende, spiralerende kolom van lucht en mist. Verhoogt Constitutie met <%= con %>. Beperkte Editie 2022 Zomeruitrusting.", "armorSpecialSummer2022MageNotes": "Wanneer u dit pantser draagt, glijdt u gemakkelijk door uw werk zoals de mantarog door water glijdt. Verhoogt Intelligentie met <%= int %>. Beperkte Editie 2022 Zomeruitrusting.", "gearItemsCompleted": "Je bezit alle <%= klass %> uitrusting! Nieuwe uitrustingen worden uitgebracht tijdens de seizoensgebonden Gala's.", - "moreArmoireGearAvailable": "Tot dan kan je <%= armoireCount %> stukken uitrusting in de Betoverde Kast vinden!" + "moreArmoireGearAvailable": "Tot dan kan je <%= armoireCount %> stukken uitrusting in de Betoverde Kast vinden!", + "headAccessoryMystery202307Notes": "Deze machtige Kroon roept cyclonen en stormachtig weer op! Verleent geen voordeel. Juli 2023 Item voor Abonnees.", + "headAccessoryMystery202505Text": "Hoogvliegende zwaluwstaartantennes", + "headAccessoryMystery202410Text": "Snoepmaïsoorjes", + "eyewearMystery202312Text": "Winterse Blauwe Ogen", + "headAccessoryMystery202212Notes": "Versterk je warmte en vriendschap tot nieuwe hoogten met deze sierlijke gouden tiara. Verleent geen voordeel. December 2022 Item voor Abonnees.", + "headAccessoryMystery202310Text": "Kroon van spookachtige lichten", + "eyewearArmoireRoseColoredGlassesText": "Roze bril", + "headAccessoryMystery202305Text": "Eventide-hoorns", + "headAccessoryMystery202405Text": "Vergulde drakenhoorns", + "headAccessoryMystery202302Notes": "Het purr-fecte accessoire om je betoverende glimlach te accentueren. Verleent geen voordeel. Februari 2023 Item voor Abonnees.", + "eyewearMystery202503Notes": "Deze doordringende blik zal elke vechter die je durft uit te dagen met angst vervullen! Geeft geen voordeel. Maart 2025 voorwerp voor Abonnees.", + "eyewearMystery202503Text": "Jade Juggernaut Ogen", + "eyewearMystery202406Text": "Spookpiratenmasker", + "headAccessoryMystery202212Text": "Gletsjer Tiara", + "headAccessoryMystery202205Text": "Schemervleugelige drakenhoorns", + "headAccessoryMystery202203Text": "Onverschrokken Libelle Kroon", + "headAccessoryMystery202203Notes": "Heb je een extra snelheidsboost nodig? De kleine decoratieve vleugeltjes op deze Kroon zijn krachtiger dan ze lijken! Verleent geen voordeel. Maart 2022 Item voor Abonnees.", + "headAccessoryMystery202307Text": "Kraken's Kroon", + "eyewearMystery202201Text": "Middernachtelijk feestvierdersmasker", + "eyewearArmoireComedyMaskText": "Komedie Masker", + "eyewearArmoireTragedyMaskText": "Tragedie Masker", + "eyewearMystery202108Text": "Vurige Ogen", + "eyewearMystery202208Text": "Sprankelende Ogen", + "eyewearMystery202303Text": "Dromerige Ogen", + "eyewearSpecialAnniversaryText": "Habitica Helden Masker", + "headAccessorySpecialHeroicCircletText": "Heroïsche Kroon", + "bodyArmoireKarateOrangeBeltText": "Oranje band", + "headAccessoryMystery202305Notes": "Deze hoorns gloeien door het weerkaatste maanlicht. Verleent geen voordeel. Mei 2023 Item voor Abonnees.", + "headAccessoryMystery202205Notes": "Deze schitterende hoorns zijn zo helder als een zonsondergang in de woestijn. Verleent geen voordeel. Mei 2022 Item voor Abonnees.", + "eyewearMystery202202Text": "Turquoise Ogen met Blush", + "eyewearMystery202204BText": "Virtueel Gezicht", + "headAccessoryMystery202302Text": "Bedrieglijke tabbyoren", + "bodyArmoireKarateGreenBeltText": "Groene band", + "bodyArmoireKaratePurpleBeltText": "Paarse band", + "bodyArmoireKarateBlueBeltText": "Blauwe band", + "bodyArmoireKarateBrownBeltText": "Bruine band", + "bodyArmoireKarateRedBeltText": "Rode band", + "headAccessorySpecialHeroicCircletNotes": "Zwaar is het hoofd dat de kroon draagt, maar deze Kroon is zo licht als je genereuze geest. Verhoogt alle statistieken met <%= attrs %>.", + "bodyArmoireKarateBlackBeltText": "Zwarte band", + "eyewearArmoireJewelersEyeLoupeText": "Juweliersloep", + "eyewearArmoireJewelersEyeLoupeNotes": "Deze oogloep vergroot wat je aan het doen bent, zodat je absoluut elk detail kunt zien. Verhoogt de waarneming met <%= per %>. Betoverd Kabinet: juweliersset (item 2 van 4).", + "eyewearMystery202308Text": "Slaperige Ogen", + "headAccessoryMystery202309Text": "Gigantische antennes van de kometenmot" } diff --git a/website/common/locales/nl/settings.json b/website/common/locales/nl/settings.json index dc267748bd..76d5766cfa 100644 --- a/website/common/locales/nl/settings.json +++ b/website/common/locales/nl/settings.json @@ -10,9 +10,9 @@ "showTour": "Rondleiding starten", "showBailey": "Bailey laten zien", "showBaileyPop": "Breng Bailey de Stadsomroeper uit haar schuilplaats zodat je nieuws uit het verleden kunt nalezen.", - "fixVal": "Personagewaarden bijstellen", - "fixValPop": "Handmatig veranderen van waarden zoals gezondheidspunten, niveau en goud.", - "invalidLevel": "Ongeldige waarde: Niveau moet 1 of groter zijn.", + "fixVal": "Personage waarden bijstellen", + "fixValPop": "Handmatig veranderen van waarden zoals Gezondheidspunten, Niveau en Goud.", + "invalidLevel": "Ongeldige waarde: Niveau moet 1 of hoger zijn.", "enableClass": "Klassensysteem aanzetten", "enableClassPop": "Aanvankelijk had je geen klasse gekozen. Wil je er nu een kiezen?", "resetAccPop": "Opnieuw starten, en alle niveaus, goud, uitrusting, geschiedenis en taken verliezen.", @@ -195,12 +195,12 @@ "passwordSuccess": "Wachtwoord succesvol aangepast", "transaction_admin_update_balance": "Door beheerder gegeven", "giftSubscriptionRateText": "$<%= price %> USD voor <%= months %> maanden", - "generalSettings": "Algemene instellingen", - "taskSettings": "Taak instellingen", + "generalSettings": "Algemene Instellingen", + "taskSettings": "Taak Instellingen", "confirmCancelChanges": "Weet je het zeker? Je wijzigingen worden niet opgeslagen.", - "loginMethods": "Inlog manieren", + "loginMethods": "Inlog Methodes", "character": "Karakter", - "siteData": "Website informatie", + "siteData": "Website Informatie", "account": "Account", "siteLanguage": "Websitetaal" } diff --git a/website/common/locales/pl/settings.json b/website/common/locales/pl/settings.json index d28c24b645..2637e22d7f 100644 --- a/website/common/locales/pl/settings.json +++ b/website/common/locales/pl/settings.json @@ -27,7 +27,7 @@ "userData": "Dane użytkownika", "exportUserData": "Eksportuj dane użytkownika:", "export": "Eksport", - "xml": "(XML)", + "xml": "XML", "json": "JSON", "customDayStart": "Własny początek dnia", "sureChangeCustomDayStartTime": "Jesteś pewien, że chcesz zmienić Czas Początku Dnia? Twoje Codzienne będą się resetować, kiedy pierwszy raz włączysz Habitikę po <%= time %>. Upewnij się, że wykonałeś wszystkie swoje Codzienne przed tym czasem!", @@ -97,9 +97,9 @@ "unsubscribedSuccessfully": "Poprawnie zrezygnowano z subskrypcji!", "unsubscribedTextUsers": "Poprawnie zrezygnowałeś z subskrypcji wszystkich e-maili od Habitiki. W opcji Ustawienia > > Powiadomienia możesz włączyć przesyłanie wybranych powiadomień, które chcesz otrzymywać (wymaga zalogowania).", "unsubscribedTextOthers": "Nie otrzymasz więcej żadnych e-maili od Habitica.", - "unsubscribeAllEmails": "Zaznacz by zrezygnować z subskrypcji e-maili", + "unsubscribeAllEmails": "Zrezygnuj z subskrypcji e-maili", "unsubscribeAllEmailsText": "Przez zaznaczenie tego pola poświadczam, że rozumiem że po zrezygnowaniu z subskrypcji wszystkich e-maili, Habitica nie będzie w stanie powiadamiać mnie przez e-mail o ważnych zmianach na stronie lub na moim koncie.", - "unsubscribeAllPush": "Zaznacz aby zrezygnować z subskrypcji wszystkich powiadomień", + "unsubscribeAllPush": "Zrezygnuj z subskrypcji wszystkich powiadomień", "correctlyUnsubscribedEmailType": "Poprawnie zrezygnowano z subskrypcji e-maili \"<%= emailType %>\".", "subscriptionRateText": "Okresowa opłata $<%= price %> USD co <%= months %> miesięcy", "benefits": "Korzyści", @@ -235,5 +235,6 @@ "developerMode": "Tryb Dewelopera", "developerModeTooltip": "Habitica zapewnia tryb dewelopera w celu umożliwienia korzystania z dodatkowych funkcji współpracujących z API Habitica.", "resetDetail2": "Zachowasz swoją obecną klasę, osiągnięcia oraz swoje chowańce i wierzchowce.", - "resetDetail3": "Wszystkie Twoje zadania (poza zadaniami z wyzwań) zostaną trwale usunięte, a Ty utracisz wszystkie dane dotyczące ich historii." + "resetDetail3": "Wszystkie Twoje zadania (poza zadaniami z wyzwań) zostaną trwale usunięte, a Ty utracisz wszystkie dane dotyczące ich historii.", + "contentRelease": "Publikacja treści + Wydarzenia" } diff --git a/website/common/locales/tr/communityguidelines.json b/website/common/locales/tr/communityguidelines.json index 2b12e4f65f..3bb761eac4 100644 --- a/website/common/locales/tr/communityguidelines.json +++ b/website/common/locales/tr/communityguidelines.json @@ -2,9 +2,9 @@ "tavernCommunityGuidelinesPlaceholder": "Dostane bir uyarı: bu tüm yaş gruplarına açık bir sohbettir, bu yüzden mesajlarının içeriğini ve üslubunu uygun sınırlar içerisinde tutmaya özen göster! Aklına takılan bir şeyler olursa aşağıdan Topluluk Kuralları'na göz at.", "lastUpdated": "Son güncelleme:", "commGuideHeadingWelcome": "Habitica'ya hoş geldin!", - "commGuidePara001": "Selamlar, maceracı! Habitica'ya hoş geldin, burası üretkenlik, sağlıklı yaşam ve zaman zaman deli gibi saldıran gryphon'ların diyarı.", - "commGuidePara002": "Herkesi güvende, mutlu ve üretken tutmak için, Zorluklar, oyuncu profilleri, Parti sohbeti ve özel mesajlar için bazı yönergelerimiz bulunmaktadır. Bu Yönergeleri, olabildiğince dostça ve okunması kolay olacak şekilde dikkatlice hazırladık. Lütfen, diğer oyuncularla etkileşime başlamadan önce bunları okuma zaman ayırın.", - "commGuidePara003": "Bu kurallar zaman zaman uyarlanabilir. Burada listelenen topluluk kurallarında önemli değişiklikler olduğunda, bunu Bailey duyurusunda ve/veya sosyal medya hesaplarımızda duyacaksınız!", + "commGuidePara001": "Merhaba, maceracı! Üretkenliğin, sağlıklı yaşamın ve nadiren de olsa öfkeli griffonların diyarı Habitica'ya hoş geldin.", + "commGuidePara002": "herkesi güvende, mutlu ve üretken olmasına yardım etmek amacıyla; Mücadeleler, Oyuncu Profilleri, Parti Sohbeti ve gizli mesajlar için bazı kurallarımız var. Bu kuralları içten olmaları ve kolaylıkla okunabilmeleri için özenerek hazırladık. Lütfen sohbet etmeye başlamadan önce kuralları okumaya vakit ayır.", + "commGuidePara003": "Bu kurallar arada sırada uyarlanabilir. Burada listelenen topluluk kurallarında önemli değişiklikler olduğunda, bunu Bailey duyurusunda ve/veya sosyal medya hesaplarımızda duyacaksınız!", "commGuideHeadingInteractions": "Habitica'daki Etkileşimler", "commGuidePara015": "Habitica, diğer oyuncularla etkileşimde bulunabileceğiniz birkaç alana sahiptir. Bunlar, özel sohbet bağlamları (özel mesajlar ve Parti sohbeti) ile Looking for Party özelliği ve Zorluklar gibi alanlardır.", "commGuidePara016": "Habitica'nın sosyal bileşenlerinde gezinirken, herkesin güvende ve mutlu olmasını sağlamak için bazı genel kurallar vardır.", diff --git a/website/common/locales/zh/front.json b/website/common/locales/zh/front.json index 70ab582956..938665fd18 100644 --- a/website/common/locales/zh/front.json +++ b/website/common/locales/zh/front.json @@ -183,5 +183,6 @@ "incorrectResetPhrase": "请用大写字母输入 <%= magicWord %> 以重置你的账号。", "marketing3Lead1Title": "Android和iOS上的应用程序", "marketing4Lead3Button": "今日即刻启程", - "missingClientHeader": "缺少 x-client 请求头。" + "missingClientHeader": "缺少 x-client 请求头。", + "emailBlockedRegistration": "该邮箱已被限制注册。若您认为此系误判,请发送邮件至 admin@habitica.com 联系我们。" } diff --git a/website/common/locales/zh_TW/faq.json b/website/common/locales/zh_TW/faq.json index 8362d8ceae..62137440b9 100644 --- a/website/common/locales/zh_TW/faq.json +++ b/website/common/locales/zh_TW/faq.json @@ -88,5 +88,14 @@ "webFaqAnswer42": "激勵自己去完成各種挑戰任務的最好的方法之一就是——去加入一個隊伍!和其他的Habitica玩家一起接收任務,贏得寵物和裝備,收穫隊伍成員技能加成,激發你的動力。\n\n另一種增加動力的方法是加入一個挑戰。挑戰會自動添加在您的任務和目標欄!挑戰也會添加一些競賽元素,可以給您動力去贏取寶石。這些挑戰既有Habitica官方創建的,也有其他玩家創建的。", "webFaqAnswer43": "如果想開啟副本,你需要加入一個隊伍。隊伍可以獨自展開冒險,也可以邀請其他的Habitica玩家一起組隊!\n\n點擊“開啟副本”並從你的物品中選擇一個副本捲軸。像平常一樣完成你的任務就能作用於副本!如果你開啟的是打Boss的副本就能給怪物造成傷害,如果開啟的是收集副本就能找到相應的物品。所有打副本的結果將在第二天結算。\n\n當你給予boss足夠的傷害或者收集到足夠的物品後,就能完成副本攻略並收穫你的報酬!", "webFaqAnswer44": "你需要離開挑戰或者等待挑戰被關閉才能刪除關聯的任務。紅色的喇叭圖標說明該挑戰已關閉,灰色的喇叭圖標說明挑戰還在進行中。\n\n在**Android**app中刪除挑戰任務需要:\n 1. 點擊任務所屬於的挑戰。\n 2. 點擊屏幕右上角的“刪除”按鈕。\n 3. 從任務欄中選擇並移除挑戰任務。\n\n在**iOS**app中刪除挑戰任務需要:\n 1. 通過喇叭圖標找到你希望刪除的挑戰任務。\n 2. 如果喇叭圖標是紅色的,點擊任務並選擇“刪除”按鈕\n 3. 如果喇叭圖標是灰色的,你需要找到該挑戰並離開挑戰來移除任務。\n\n在**網頁端**刪除挑戰任務需要:\n 1. 通過喇叭圖標找到你希望刪除的挑戰任務。\n 2. 如果喇叭圖標是紅色的,點擊並從你得任務欄中移除該任務。\n 3. 如果喇叭圖標是灰色的,你需要找到該挑戰並離開挑戰來移除任務。", - "webFaqAnswer45": "可以對其中一名隊伍成員使用季節限定的變身道具!你的形象將在次日從變身恢復。你也可以購買解毒劑(鹽、沙子、無花瓣或不透明藥水)來更快地移除變身形象。" + "webFaqAnswer45": "可以對其中一名隊伍成員使用季節限定的變身道具!你的形象將在次日從變身恢復。你也可以購買解毒劑(鹽、沙子、無花瓣或不透明藥水)來更快地移除變身形象。", + "webFaqAnswer46": "如果你遇到了報錯,請讓我們知道!\n\n在移動端報告報錯:\n * 從菜單進入,選擇支持並點擊“尋求幫助”,滾動菜單到“報告錯誤”\n\n在網頁端報告報錯:\n * 從幫助菜單進入,選擇“報告錯誤”", + "faqQuestion47": "我能查看有關我的任務和習慣完成情況的數據嗎?", + "webFaqAnswer47": "目前,Habitica沒有展示你的任務數據進度的功能,在Habitica的網頁端,你可以通過設置中的網站數據按鈕導出你的任務數據。", + "webFaqAnswer48": "是的,和隊伍一起!你可以建立自己的隊伍或者加入一個隊伍。和其他Habitica玩家一起參與副本,通過隊員技能得到增益加成來增強你打卡的動力。", + "faqQuestion49": "我該在哪裡找到隊伍去加入?", + "webFaqAnswer49": "如果你想要別人一起體驗Habitica但不認識其他玩家,搜索一個隊伍是最好的選擇!如果你已經知道某個已經在隊伍裡的玩家,你可以分享自己的@用戶名來獲取邀請。同樣,你也能創建一個新的隊伍,通過@用戶名或電郵地址來邀請別人。\n\n創建或搜索隊伍需要在導航欄選擇“隊伍”,然後選擇對應的選項。", + "faqQuestion50": "該怎麼搜索隊伍?", + "webFaqAnswer50": "在選擇“尋找隊伍”之後,你將被添加到想要加入隊伍的玩家清單中。隊長能夠看到這個清單並發送邀請。當你收到邀請,你就能在通知欄中選擇想要加入的隊伍!\n\n你也許會收到來自不同隊伍的多個邀請。但是,你只能成為其中一個隊伍的隊員。", + "parties": "隊伍" } From 3078af8f2aa3bcf3fd0a5db40195516ea8684fc2 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Fri, 8 Aug 2025 13:36:19 -0500 Subject: [PATCH 37/38] fix(apple): don't run auth middleware during redirect --- website/server/controllers/api-v3/auth.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/server/controllers/api-v3/auth.js b/website/server/controllers/api-v3/auth.js index 22530d0a55..d8359beaba 100644 --- a/website/server/controllers/api-v3/auth.js +++ b/website/server/controllers/api-v3/auth.js @@ -151,9 +151,7 @@ api.loginSocial = { // Called by apple for web authentication. api.redirectApple = { method: 'POST', - middlewares: [authWithHeaders({ - optional: true, - })], + middlewares: [], url: '/user/auth/apple', async handler (req, res) { if (req.body.id_token) { From 876d5a67d6b35f0633f05c48c0e1d875c40d1881 Mon Sep 17 00:00:00 2001 From: Kalista Payne Date: Fri, 8 Aug 2025 14:04:19 -0500 Subject: [PATCH 38/38] 5.38.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 68402c0071..1b9ddf57ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "habitica", - "version": "5.38.1", + "version": "5.38.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "habitica", - "version": "5.38.1", + "version": "5.38.2", "hasInstallScript": true, "dependencies": { "@babel/core": "^7.22.10", diff --git a/package.json b/package.json index 5e3482d381..cab727d710 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "5.38.1", + "version": "5.38.2", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.22.10",