From a442c9d4de89476b8647c9edc69e426b3076ea85 Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Sun, 27 Nov 2022 22:24:48 +0800 Subject: [PATCH 01/16] chore: update issue templates for Halo 2.0 --- .github/ISSUE_TEMPLATE/bug_report.en.yml | 7 ++++--- .github/ISSUE_TEMPLATE/bug_report.zh.yml | 7 ++++--- .github/ISSUE_TEMPLATE/feature_request.en.yml | 1 - .github/ISSUE_TEMPLATE/feature_request.zh.yml | 1 - 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.en.yml b/.github/ISSUE_TEMPLATE/bug_report.en.yml index c4b35434b1..c61c0bd69f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.en.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.en.yml @@ -16,18 +16,18 @@ body: required: true attributes: label: What is version of Halo has the issue? - description: "Can be found in backstage management system." - type: dropdown id: database validations: required: true attributes: label: "What database are you using?" - description: "Can be found in backstage management system." options: - H2 + - PostgreSQL - MySQL 5.7 - MySQL 8.x + - MariaDB - Other - type: dropdown id: deployment-method @@ -36,8 +36,9 @@ body: attributes: label: "What is your deployment method?" options: - - Fat Jar - Docker + - Docker Compose + - Fat Jar - type: input id: site-url attributes: diff --git a/.github/ISSUE_TEMPLATE/bug_report.zh.yml b/.github/ISSUE_TEMPLATE/bug_report.zh.yml index 51d5422bf9..a960a1c680 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.zh.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.zh.yml @@ -17,18 +17,18 @@ body: required: true attributes: label: "是什么版本出现了此问题?" - description: "可以在管理后台的关于页面中找到。" - type: dropdown id: database validations: required: true attributes: label: "使用的什么数据库?" - description: "可以在管理后台的关于页面中找到。" options: - H2 + - PostgreSQL - MySQL 5.7 - MySQL 8.x + - MariaDB - Other - type: dropdown id: deployment-method @@ -37,8 +37,9 @@ body: attributes: label: "使用的哪种方式部署?" options: - - Fat Jar - Docker + - Docker Compose + - Fat Jar - type: input id: site-url attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.en.yml b/.github/ISSUE_TEMPLATE/feature_request.en.yml index 8d090c16f1..132fb2a0a6 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.en.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.en.yml @@ -13,7 +13,6 @@ body: id: version attributes: label: "Your current Halo version" - description: "Can be found in backstage management system." - type: markdown id: details attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.zh.yml b/.github/ISSUE_TEMPLATE/feature_request.zh.yml index 30e22ab06b..f3ea93eeed 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.zh.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.zh.yml @@ -13,7 +13,6 @@ body: id: version attributes: label: "你当前使用的版本" - description: "可以在管理后台的关于页面中找到。" - type: markdown id: details attributes: From 71b916a4169c43f11a79fb94851ca48ceb507344 Mon Sep 17 00:00:00 2001 From: John Niang <johnniang@fastmail.com> Date: Sun, 9 Apr 2023 21:44:15 +0800 Subject: [PATCH 02/16] Enable mapper feature: accept case-insensitive enums (#3707) #### What type of PR is this? /kind improvement /area core #### What this PR does / why we need it: After enabling this mapper feature, we could pass a enum value with any case in request body(JSON format). See https://github.com/FasterXML/jackson-databind/blob/39fdb63607a0e7a6dbf9d6be84fe7e380e661dcb/src/test/java/com/fasterxml/jackson/databind/deser/enums/EnumDeserializationTest.java#L22 for more. #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../src/main/java/run/halo/app/config/HaloConfiguration.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/application/src/main/java/run/halo/app/config/HaloConfiguration.java b/application/src/main/java/run/halo/app/config/HaloConfiguration.java index fc67d21af1..ef7f8a2bca 100644 --- a/application/src/main/java/run/halo/app/config/HaloConfiguration.java +++ b/application/src/main/java/run/halo/app/config/HaloConfiguration.java @@ -1,6 +1,7 @@ package run.halo.app.config; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.MapperFeature; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -14,6 +15,7 @@ public class HaloConfiguration { Jackson2ObjectMapperBuilderCustomizer objectMapperCustomizer() { return builder -> { builder.serializationInclusion(JsonInclude.Include.NON_NULL); + builder.featuresToEnable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS); }; } } \ No newline at end of file From a8f67d3eaf42753256a57a693be7822b0a3e4f3d Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Sun, 26 Nov 2023 12:31:35 +0800 Subject: [PATCH 03/16] chore: update issue template Signed-off-by: Ryan Wang <i@ryanc.cc> --- .github/ISSUE_TEMPLATE/bug_report.en.yml | 20 ++++---------------- .github/ISSUE_TEMPLATE/bug_report.zh.yml | 22 +++++----------------- 2 files changed, 9 insertions(+), 33 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.en.yml b/.github/ISSUE_TEMPLATE/bug_report.en.yml index d9655561ce..44d13fdfd6 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.en.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.en.yml @@ -10,25 +10,13 @@ body: id: environment attributes: value: "## Environment" - - type: input - id: version - validations: - required: true + - type: textarea + id: system-information attributes: - label: What is version of Halo has the issue? - - type: dropdown - id: database + label: "System information" + description: "Access the actuator page of the Console, click the copy button in the upper right corner, and paste the information here." validations: required: true - attributes: - label: "What database are you using?" - options: - - H2 - - PostgreSQL - - MySQL 5.7 - - MySQL 8.x - - MariaDB - - Other - type: dropdown id: operation-method validations: diff --git a/.github/ISSUE_TEMPLATE/bug_report.zh.yml b/.github/ISSUE_TEMPLATE/bug_report.zh.yml index cc1b5f04fb..9b1c0d003b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.zh.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.zh.yml @@ -11,25 +11,13 @@ body: id: environment attributes: value: "## 环境信息" - - type: input - id: version - validations: - required: true + - type: textarea + id: system-information attributes: - label: "是什么版本出现了此问题?" - - type: dropdown - id: database + label: "系统信息" + description: "访问 Console 的概览页面,点击右上角的复制按钮,将信息粘贴到此处。" validations: required: true - attributes: - label: "使用的什么数据库?" - options: - - H2 - - PostgreSQL - - MySQL 5.7 - - MySQL 8.x - - MariaDB - - Other - type: dropdown id: operation-method validations: @@ -64,7 +52,7 @@ body: id: logs attributes: label: "相关日志输出" - description: "请复制并粘贴任何相关的日志输出。 这将自动格式化为代码,因此无需反引号。" + description: "请复制并粘贴任何相关的日志输出。这将自动格式化为代码,因此无需反引号。" render: shell - type: textarea id: additional-information From b4582e3b41b4554cd19ec64d5767682760734f06 Mon Sep 17 00:00:00 2001 From: John Niang <johnniang@foxmail.com> Date: Thu, 30 Nov 2023 18:46:08 +0800 Subject: [PATCH 04/16] Fix the problem of incorrect old data passed to watcher during updates (#4959) #### What type of PR is this? /kind bug /area core /milestone 2.11.0 #### What this PR does / why we need it: This PR resolves the problem of incorrect old data passed to watcher during updates. As shown in the following line, the old value should be `old` instead of `extension` from outside. https://github.com/halo-dev/halo/blob/7a84f553005b2d8047ccdb0acf473693384a7b51/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java#L172 #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../run/halo/app/extension/JsonExtension.java | 18 ++++ .../ReactiveExtensionClientImpl.java | 86 +++++++++++-------- .../run/halo/app/extension/FakeExtension.java | 13 +++ .../ReactiveExtensionClientTest.java | 38 ++++++++ 4 files changed, 118 insertions(+), 37 deletions(-) diff --git a/api/src/main/java/run/halo/app/extension/JsonExtension.java b/api/src/main/java/run/halo/app/extension/JsonExtension.java index 67ef64fc89..2bcfec3cd7 100644 --- a/api/src/main/java/run/halo/app/extension/JsonExtension.java +++ b/api/src/main/java/run/halo/app/extension/JsonExtension.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.time.Instant; import java.util.Map; +import java.util.Objects; import java.util.Set; /** @@ -117,6 +118,23 @@ public MetadataOperator getMetadataOrCreate() { return new ObjectNodeMetadata(metadataNode); } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + JsonExtension that = (JsonExtension) o; + return Objects.equals(objectNode, that.objectNode); + } + + @Override + public int hashCode() { + return Objects.hash(objectNode); + } + class ObjectNodeMetadata implements MetadataOperator { private final ObjectNode objectNode; diff --git a/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java b/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java index a495356809..48eda2f221 100644 --- a/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java +++ b/application/src/main/java/run/halo/app/extension/ReactiveExtensionClientImpl.java @@ -4,12 +4,13 @@ import static org.springframework.util.StringUtils.hasText; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.time.Duration; import java.time.Instant; import java.util.Comparator; +import java.util.HashSet; import java.util.List; import java.util.Objects; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Predicate; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.data.util.Predicates; @@ -137,42 +138,31 @@ public <E extends Extension> Mono<E> create(E extension) { @SuppressWarnings("unchecked") public <E extends Extension> Mono<E> update(E extension) { // Refactor the atomic reference if we have a better solution. - final var statusChangeOnly = new AtomicBoolean(false); - return getLatest(extension) - .map(old -> new JsonExtension(objectMapper, old)) - .flatMap(oldJsonExt -> { - var newJsonExt = new JsonExtension(objectMapper, extension); - // reset some mandatory fields - var oldMetadata = oldJsonExt.getMetadata(); - var newMetadata = newJsonExt.getMetadata(); - newMetadata.setCreationTimestamp(oldMetadata.getCreationTimestamp()); - newMetadata.setGenerateName(oldMetadata.getGenerateName()); - - var oldObjectNode = oldJsonExt.getInternal().deepCopy(); - var newObjectNode = newJsonExt.getInternal().deepCopy(); - if (Objects.equals(oldObjectNode, newObjectNode)) { - // if no data were changed, just skip updating. - return Mono.empty(); - } - // check status is changed - oldObjectNode.remove("status"); - newObjectNode.remove("status"); - if (Objects.equals(oldObjectNode, newObjectNode)) { - statusChangeOnly.set(true); - } - return Mono.just(newJsonExt); - }) - .map(converter::convertTo) - .flatMap(extensionStore -> client.update(extensionStore.getName(), - extensionStore.getVersion(), - extensionStore.getData())) - .map(updated -> converter.convertFrom((Class<E>) extension.getClass(), updated)) - .doOnNext(updated -> { - if (!statusChangeOnly.get()) { - watchers.onUpdate(extension, updated); - } - }) - .switchIfEmpty(Mono.defer(() -> Mono.just(extension))); + return getLatest(extension).flatMap(old -> { + var oldJsonExt = new JsonExtension(objectMapper, old); + var newJsonExt = new JsonExtension(objectMapper, extension); + // reset some mandatory fields + var oldMetadata = oldJsonExt.getMetadata(); + var newMetadata = newJsonExt.getMetadata(); + newMetadata.setCreationTimestamp(oldMetadata.getCreationTimestamp()); + newMetadata.setGenerateName(oldMetadata.getGenerateName()); + + if (Objects.equals(oldJsonExt, newJsonExt)) { + // skip updating if not data changed. + return Mono.just(extension); + } + + var onlyStatusChanged = + isOnlyStatusChanged(oldJsonExt.getInternal(), newJsonExt.getInternal()); + + var store = this.converter.convertTo(newJsonExt); + var updated = client.update(store.getName(), store.getVersion(), store.getData()) + .map(ext -> converter.convertFrom((Class<E>) extension.getClass(), ext)); + if (!onlyStatusChanged) { + updated = updated.doOnNext(ext -> watchers.onUpdate(old, ext)); + } + return updated; + }); } private Mono<? extends Extension> getLatest(Extension extension) { @@ -199,4 +189,26 @@ public void watch(Watcher watcher) { this.watchers.addWatcher(watcher); } + private static boolean isOnlyStatusChanged(ObjectNode oldNode, ObjectNode newNode) { + if (Objects.equals(oldNode, newNode)) { + return false; + } + // WARNING!!! + // Do not edit the ObjectNode + var oldFields = new HashSet<String>(); + var newFields = new HashSet<String>(); + oldNode.fieldNames().forEachRemaining(oldFields::add); + newNode.fieldNames().forEachRemaining(newFields::add); + oldFields.remove("status"); + newFields.remove("status"); + if (!Objects.equals(oldFields, newFields)) { + return false; + } + for (var field : oldFields) { + if (!Objects.equals(oldNode.get(field), newNode.get(field))) { + return false; + } + } + return true; + } } diff --git a/application/src/test/java/run/halo/app/extension/FakeExtension.java b/application/src/test/java/run/halo/app/extension/FakeExtension.java index d0e5cb03bf..5933c37a3c 100644 --- a/application/src/test/java/run/halo/app/extension/FakeExtension.java +++ b/application/src/test/java/run/halo/app/extension/FakeExtension.java @@ -1,12 +1,21 @@ package run.halo.app.extension; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + @GVK(group = "fake.halo.run", version = "v1alpha1", kind = "Fake", plural = "fakes", singular = "fake") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) public class FakeExtension extends AbstractExtension { + private FakeStatus status = new FakeStatus(); + public static FakeExtension createFake(String name) { var metadata = new Metadata(); metadata.setName(name); @@ -15,4 +24,8 @@ public static FakeExtension createFake(String name) { return fake; } + @Data + public static class FakeStatus { + private String state; + } } diff --git a/application/src/test/java/run/halo/app/extension/ReactiveExtensionClientTest.java b/application/src/test/java/run/halo/app/extension/ReactiveExtensionClientTest.java index 7e60e74f6d..0f83fbe092 100644 --- a/application/src/test/java/run/halo/app/extension/ReactiveExtensionClientTest.java +++ b/application/src/test/java/run/halo/app/extension/ReactiveExtensionClientTest.java @@ -455,6 +455,37 @@ void shouldNotUpdateIfExtensionNotChange() { verify(storeClient, never()).update(any(), any(), any()); } + @Test + void shouldUpdateIfExtensionStatusChangedOnly() { + var fake = createFakeExtension("fake", 2L); + fake.getStatus().setState("new-state"); + var storeName = "/registry/fake.halo.run/fakes/fake"; + when(converter.convertTo(any())).thenReturn( + createExtensionStore(storeName, 2L)); + when(storeClient.update(any(), any(), any())).thenReturn( + Mono.just(createExtensionStore(storeName, 2L))); + when(storeClient.fetchByName(storeName)).thenReturn( + Mono.just(createExtensionStore(storeName, 1L))); + + var oldFake = createFakeExtension("fake", 2L); + oldFake.getStatus().setState("old-state"); + + var updatedFake = createFakeExtension("fake", 3L); + when(converter.convertFrom(same(FakeExtension.class), any())) + .thenReturn(oldFake) + .thenReturn(updatedFake); + + StepVerifier.create(client.update(fake)) + .expectNext(updatedFake) + .verifyComplete(); + + verify(storeClient).fetchByName(storeName); + verify(converter).convertTo(isA(JsonExtension.class)); + verify(converter, times(2)).convertFrom(same(FakeExtension.class), any()); + verify(storeClient) + .update(eq("/registry/fake.halo.run/fakes/fake"), eq(2L), any()); + } + @Test void shouldUpdateUnstructuredSuccessfully() throws JsonProcessingException { var fake = createUnstructured(); @@ -539,6 +570,13 @@ void shouldNotWatchOnUpdateIfExtensionNotChange() { verify(watcher, never()).onUpdate(any(), any()); } + @Test + void shouldNotWatchOnUpdateIfExtensionStatusChangeOnly() { + shouldUpdateIfExtensionStatusChangedOnly(); + + verify(watcher, never()).onUpdate(any(), any()); + } + @Test void shouldWatchOnDeleteSuccessfully() { doNothing().when(watcher).onDelete(any()); From 23fd3bf8ee3933995a53587cd32e65668074808f Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Thu, 30 Nov 2023 18:56:10 +0800 Subject: [PATCH 05/16] feat: refine i18n for uc (#4957) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /area console /kind improvement /milestone 2.11.x #### What this PR does / why we need it: 完善个人中心相关页面的 i18n。 #### Special notes for your reviewer: 测试各个语言的个人中心相关页面。 #### Does this PR introduce a user-facing change? ```release-note 完善个人中心相关页面的 i18n。 ``` --- console/console-src/layouts/BasicLayout.vue | 3 +- .../roles/components/RoleEditingModal.vue | 2 +- .../modules/system/users/UserDetail.vue | 2 +- .../users/widgets/NotificationWidget.vue | 4 +- .../packages/editor/src/locales/zh-CN.yaml | 2 +- .../src/components/user-avatar/UserAvatar.vue | 8 +- .../user-avatar/UserAvatarCropper.vue | 12 +- console/src/locales/en.yaml | 444 ++- console/src/locales/es.yaml | 2544 +++++++++-------- console/src/locales/zh-CN.yaml | 292 +- console/src/locales/zh-TW.yaml | 292 +- console/uc-src/layouts/BasicLayout.vue | 3 +- .../modules/contents/posts/PostEditor.vue | 4 +- .../modules/contents/posts/PostList.vue | 14 +- .../posts/components/PostListItem.vue | 12 +- .../posts/components/PostSettingEditModal.vue | 2 +- .../uc-src/modules/contents/posts/module.ts | 6 +- .../modules/notifications/Notifications.vue | 10 +- .../components/NotificationListItem.vue | 10 +- .../uc-src/modules/notifications/module.ts | 4 +- console/uc-src/modules/profile/Profile.vue | 10 +- .../profile/components/EmailVerifyModal.vue | 52 +- .../components/PasswordChangeModal.vue | 10 +- .../PersonalAccessTokenCreationModal.vue | 24 +- .../PersonalAccessTokenListItem.vue | 26 +- .../components/ProfileEditingModal.vue | 18 +- console/uc-src/modules/profile/module.ts | 4 +- .../uc-src/modules/profile/tabs/Detail.vue | 38 +- .../profile/tabs/NotificationPreferences.vue | 2 +- .../profile/tabs/PersonalAccessTokens.vue | 4 +- 30 files changed, 2155 insertions(+), 1703 deletions(-) diff --git a/console/console-src/layouts/BasicLayout.vue b/console/console-src/layouts/BasicLayout.vue index 60244afec4..31090de702 100644 --- a/console/console-src/layouts/BasicLayout.vue +++ b/console/console-src/layouts/BasicLayout.vue @@ -179,7 +179,7 @@ onMounted(() => { <div class="flex items-center gap-1"> <a - v-tooltip="'个人中心'" + v-tooltip="$t('core.sidebar.operations.profile.tooltip')" class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100" href="/uc" > @@ -188,6 +188,7 @@ onMounted(() => { /> </a> <div + v-tooltip="$t('core.sidebar.operations.logout.tooltip')" class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100" @click="handleLogout" > diff --git a/console/console-src/modules/system/roles/components/RoleEditingModal.vue b/console/console-src/modules/system/roles/components/RoleEditingModal.vue index c093e5754c..35c8e8b823 100644 --- a/console/console-src/modules/system/roles/components/RoleEditingModal.vue +++ b/console/console-src/modules/system/roles/components/RoleEditingModal.vue @@ -161,7 +161,7 @@ const handleResetForm = () => { ] " type="text" - label="登录之后默认跳转位置" + :label="$t('core.role.editing_modal.fields.redirect_on_login')" ></FormKit> </FormKit> </div> diff --git a/console/console-src/modules/system/users/UserDetail.vue b/console/console-src/modules/system/users/UserDetail.vue index da3a3a6dfc..f7f607b5ab 100644 --- a/console/console-src/modules/system/users/UserDetail.vue +++ b/console/console-src/modules/system/users/UserDetail.vue @@ -123,7 +123,7 @@ function handleRouteToUC() { type="primary" @click="handleRouteToUC" > - 个人中心 + {{ $t("core.user.detail.actions.profile.title") }} </VButton> <VDropdown v-if="currentUserHasPermission(['system:users:manage'])"> <VButton type="default"> diff --git a/console/console-src/modules/system/users/widgets/NotificationWidget.vue b/console/console-src/modules/system/users/widgets/NotificationWidget.vue index b9239e58a6..14d2880fce 100644 --- a/console/console-src/modules/system/users/widgets/NotificationWidget.vue +++ b/console/console-src/modules/system/users/widgets/NotificationWidget.vue @@ -44,7 +44,7 @@ function handleRouteToNotification(notification: Notification) { <VCard :body-class="['h-full', '@container', '!p-0', '!overflow-auto']" class="h-full" - :title="$t('core.notification.title')" + :title="$t('core.dashboard.widgets.presets.notification.title')" > <template #actions> <div style="padding: 12px 16px"> @@ -59,7 +59,7 @@ function handleRouteToNotification(notification: Notification) { <VLoading v-if="isLoading" /> <VEmpty v-else-if="!notifications?.length" - :title="$t('core.notification.empty.titles.unread')" + :title="$t('core.dashboard.widgets.presets.notification.empty.title')" > <template #actions> <VButton :loading="isFetching" @click="refetch"> diff --git a/console/packages/editor/src/locales/zh-CN.yaml b/console/packages/editor/src/locales/zh-CN.yaml index 5146bdc960..62efb689df 100644 --- a/console/packages/editor/src/locales/zh-CN.yaml +++ b/console/packages/editor/src/locales/zh-CN.yaml @@ -26,7 +26,7 @@ editor: audio: 音频 table: 表格 no_results: 没有搜索结果 - placeholder: "输入 / 以选择输入类型" + placeholder: 输入 / 以选择输入类型 link: add_link: 添加链接 edit_link: 修改链接 diff --git a/console/src/components/user-avatar/UserAvatar.vue b/console/src/components/user-avatar/UserAvatar.vue index dced5800f1..f15f415894 100644 --- a/console/src/components/user-avatar/UserAvatar.vue +++ b/console/src/components/user-avatar/UserAvatar.vue @@ -83,7 +83,7 @@ const handleUploadAvatar = () => { handleCloseCropperModal(); }) .catch(() => { - Toast.error(t("core.user.detail.avatar.toast_upload_failed")); + Toast.error(t("core.components.user_avatar.toast_upload_failed")); }) .finally(() => { uploadSaving.value = false; @@ -93,7 +93,7 @@ const handleUploadAvatar = () => { const handleRemoveCurrentAvatar = () => { Dialog.warning({ - title: t("core.user.detail.avatar.remove.title"), + title: t("core.components.user_avatar.remove.title"), description: t("core.common.dialog.descriptions.cannot_be_recovered"), confirmType: "danger", confirmText: t("core.common.buttons.confirm"), @@ -111,7 +111,7 @@ const handleRemoveCurrentAvatar = () => { queryClient.invalidateQueries({ queryKey: ["user-detail"] }); }) .catch(() => { - Toast.error(t("core.user.detail.avatar.toast_remove_failed")); + Toast.error(t("core.components.user_avatar.toast_remove_failed")); }); }, }); @@ -174,7 +174,7 @@ const hasAvatar = computed(() => { <VModal :visible="visibleCropperModal" :width="1200" - :title="$t('core.user.detail.avatar.cropper_modal.title')" + :title="$t('core.components.user_avatar.cropper_modal.title')" mount-to-body @update:visible="handleCloseCropperModal" > diff --git a/console/src/components/user-avatar/UserAvatarCropper.vue b/console/src/components/user-avatar/UserAvatarCropper.vue index 75f7b938a6..878bcb821c 100644 --- a/console/src/components/user-avatar/UserAvatarCropper.vue +++ b/console/src/components/user-avatar/UserAvatarCropper.vue @@ -64,7 +64,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { emit("changeFile"); }, - title: t("core.user.detail.avatar.tooltips.upload"), + title: t("core.components.user_avatar.tooltips.upload"), }, { name: "zoomIn", @@ -72,7 +72,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { cropper.value?.zoom(0.1); }, - title: t("core.user.detail.avatar.tooltips.zoom_in"), + title: t("core.components.user_avatar.tooltips.zoom_in"), }, { name: "zoomOut", @@ -80,7 +80,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { cropper.value?.zoom(-0.1); }, - title: t("core.user.detail.avatar.tooltips.zoom_out"), + title: t("core.components.user_avatar.tooltips.zoom_out"), }, { name: "flipHorizontal", @@ -88,7 +88,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { cropper.value?.scaleX(-cropper.value?.getData().scaleX || -1); }, - title: t("core.user.detail.avatar.tooltips.flip_horizontal"), + title: t("core.components.user_avatar.tooltips.flip_horizontal"), }, { name: "flipVertical", @@ -96,7 +96,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { cropper.value?.scaleY(-cropper.value?.getData().scaleY || -1); }, - title: t("core.user.detail.avatar.tooltips.flip_vertical"), + title: t("core.components.user_avatar.tooltips.flip_vertical"), }, { name: "reset", @@ -104,7 +104,7 @@ const defaultToolbars: ToolbarItem[] = [ onClick: () => { cropper.value?.reset(); }, - title: t("core.user.detail.avatar.tooltips.reset"), + title: t("core.components.user_avatar.tooltips.reset"), }, ]; const previewElement = ref<HTMLElement>(); diff --git a/console/src/locales/en.yaml b/console/src/locales/en.yaml index deb4d3994f..2e64273868 100644 --- a/console/src/locales/en.yaml +++ b/console/src/locales/en.yaml @@ -42,7 +42,9 @@ core: title: Account binding common: toast: - mounted: The current login method is not bound to an account, Please bind or sign up a new account first + mounted: >- + The current login method is not bound to an account, Please bind or + sign up a new account first operations: login_and_bind: button: Login and Bind @@ -75,12 +77,21 @@ core: backup: Backup operations: logout: - button: Logout + tooltip: Logout title: Are you sure you want to log out? profile: - button: Profile + tooltip: Profile visit_homepage: title: Visit homepage + uc_sidebar: + menu: + items: + profile: Profile + notification: Notifications + posts: Posts + operations: + console: + tooltip: Console dashboard: title: Dashboard actions: @@ -104,7 +115,11 @@ core: title: Recent Posts visits: "{visits} Visits" comments: "{comments} Comments" - publishTime: "Publish Time {publishTime}" + publishTime: Publish Time {publishTime} + notification: + title: Notifications + empty: + title: No unread notifications quicklink: title: Quick Link actions: @@ -127,7 +142,9 @@ core: refresh_search_engine: title: Refresh Search Engine dialog_title: Do you want to refresh the search engine index? - dialog_content: This operation will recreate search engine indexes for all published posts. + dialog_content: >- + This operation will recreate search engine indexes for all + published posts. success_message: Refresh search engine index successfully. evict_page_cache: title: Refresh Page Cache @@ -152,10 +169,14 @@ core: operations: delete: title: Are you sure you want to delete this post? - description: This operation will move the post to the recycle bin, and it can be restored from the recycle bin later. + description: >- + This operation will move the post to the recycle bin, and it can be + restored from the recycle bin later. delete_in_batch: title: Are you sure you want to delete the selected posts? - description: This operation will move the posts to the recycle bin, and it can be restored from the recycle bin later. + description: >- + This operation will move the posts to the recycle bin, and it can be + restored from the recycle bin later. filters: status: items: @@ -252,7 +273,9 @@ core: operations: delete: title: Are you sure you want to delete this tag? - description: After deleting this tag, the association with the corresponding article will be removed. This operation cannot be undone. + description: >- + After deleting this tag, the association with the corresponding + article will be removed. This operation cannot be undone. editing_modal: titles: update: Update post tag @@ -283,7 +306,9 @@ core: operations: delete: title: Are you sure you want to delete this category? - description: After deleting this category, the association with corresponding articles will be removed. This operation cannot be undone. + description: >- + After deleting this category, the association with corresponding + articles will be removed. This operation cannot be undone. add_sub_category: button: Add sub category editing_modal: @@ -320,10 +345,14 @@ core: operations: delete: title: Are you sure you want to delete this page? - description: This operation will move the page to the recycle bin, and it can be restored from the recycle bin later. + description: >- + This operation will move the page to the recycle bin, and it can be + restored from the recycle bin later. delete_in_batch: title: Are you sure you want to delete the selected pages? - description: This operation will move the pages to the recycle bin, and it can be restored from the recycle bin later. + description: >- + This operation will move the pages to the recycle bin, and it can be + restored from the recycle bin later. filters: status: items: @@ -410,16 +439,22 @@ core: operations: delete_comment: title: Are you sure you want to delete this comment? - description: All replies under the comments will be deleted at the same time, and this operation cannot be undone. + description: >- + All replies under the comments will be deleted at the same time, and + this operation cannot be undone. delete_comment_in_batch: title: Are you sure you want to delete the selected comments? - description: All replies under the comments will be deleted at the same time, and this operation cannot be undone. + description: >- + All replies under the comments will be deleted at the same time, and + this operation cannot be undone. approve_comment_in_batch: button: Approve title: Are you sure you want to approve the selected comments for review? approve_applies_in_batch: button: Approve all replies - title: Are you sure you want to approve all replies to this comment for review? + title: >- + Are you sure you want to approve all replies to this comment for + review? delete_reply: title: Are you sure you want to delete this reply? approve_reply: @@ -468,7 +503,9 @@ core: storage_policies: Storage Policies empty: title: There are no attachments in the current group. - message: The current group has no attachments, you can try refreshing or uploading attachments. + message: >- + The current group has no attachments, you can try refreshing or + uploading attachments. actions: upload: Upload Attachment operations: @@ -484,10 +521,10 @@ core: filters: storage_policy: label: Storage Policy - result: "Storage Policy:{storage_policy}" + result: Storage Policy:{storage_policy} owner: label: Owner - result: "Owner:{owner}" + result: Owner:{owner} sort: items: create_time_desc: Latest uploaded @@ -531,18 +568,28 @@ core: delete: button: And move attachment to ungrouped title: Are you sure you want to delete this group? - description: The group will be deleted, and the attachments under the group will be moved to ungrouped. This operation cannot be undone. - toast_success: Deletion successful, {total} attachments have been moved to ungrouped + description: >- + The group will be deleted, and the attachments under the group will + be moved to ungrouped. This operation cannot be undone. + toast_success: >- + Deletion successful, {total} attachments have been moved to + ungrouped delete_with_attachments: button: Also delete attachments title: Are you sure you want to delete this group? - description: Deleting the group and all attachments within it, this action cannot be undone. - toast_success: Deletion successful, {total} attachments have been deleted simultaneously + description: >- + Deleting the group and all attachments within it, this action cannot + be undone. + toast_success: >- + Deletion successful, {total} attachments have been deleted + simultaneously policies_modal: title: Storage Policies empty: title: There is currently no available storage strategy. - message: There are no available storage policies at the moment. You can try refreshing or creating a new policy. + message: >- + There are no available storage policies at the moment. You can try + refreshing or creating a new policy. operations: delete: title: Are you sure you want to delete this policy? @@ -575,7 +622,7 @@ core: label: Attachments operations: select: - result: "({count} items selected)" + result: ({count} items selected) theme: title: Themes common: @@ -587,7 +634,9 @@ core: management: Themes empty: title: There are currently no activated or selected themes. - message: There are currently no activated or selected themes, you can switch themes or install new ones. + message: >- + There are currently no activated or selected themes, you can switch + themes or install new ones. actions: switch: Switch Theme operations: @@ -596,18 +645,24 @@ core: toast_success: Active theme successful reset: title: Are you sure you want to reset all configurations of the theme? - description: This operation will delete the saved configuration and reset it to default settings. + description: >- + This operation will delete the saved configuration and reset it to + default settings. toast_success: Reset configuration successful reload: button: Reload title: Are you sure you want to reload all configurations of the theme? - description: This operation will only reload the theme configuration and settings form definition, and will not delete any saved configurations. + description: >- + This operation will only reload the theme configuration and settings + form definition, and will not delete any saved configurations. toast_success: Reload configuration successful uninstall: title: Are you sure you want to uninstall this theme? uninstall_and_delete_config: button: Uninstall and delete config - title: Are you sure you want to uninstall this theme and its corresponding settings? + title: >- + Are you sure you want to uninstall this theme and its corresponding + settings? remote_download: title: Remote download address detected, do you want to download? description: "Please carefully verify whether this address can be trusted: {url}" @@ -625,7 +680,9 @@ core: url: Remote URL empty: title: There are no installed themes currently. - message: There are currently no installed themes, you can try refreshing or installing a new theme. + message: >- + There are currently no installed themes, you can try refreshing or + installing a new theme. not_installed_empty: title: There are no themes currently not installed. preview_model: @@ -661,10 +718,14 @@ core: toast_success: Setting successful delete_menu: title: Are you sure you want to delete this menu? - description: All menu items under this menu will be deleted at the same time, and this operation cannot be undone. + description: >- + All menu items under this menu will be deleted at the same time, and + this operation cannot be undone. delete_menu_item: title: Are you sure you want to delete this menu item? - description: All sub-menu items will be deleted at the same time, and cannot be restored after deletion. + description: >- + All sub-menu items will be deleted at the same time, and cannot be + restored after deletion. add_sub_menu_item: button: Add sub menu item list: @@ -691,7 +752,7 @@ core: placeholder: Select the parent menu item ref_kind: label: Type - placeholder: "Please select {label}" + placeholder: Please select {label} options: custom: Custom post: Post @@ -715,13 +776,17 @@ core: detail: Detail empty: title: There are no installed plugins currently. - message: There are no installed plugins currently, you can try refreshing or installing new plugins. + message: >- + There are no installed plugins currently, you can try refreshing or + installing new plugins. actions: install: Install Plugin operations: reset: title: Are you sure you want to reset all configurations of the plugin? - description: This operation will delete the saved configuration and reset it to default settings. + description: >- + This operation will delete the saved configuration and reset it to + default settings. toast_success: Reset configuration successfully uninstall: title: Are you sure you want to uninstall this plugin? @@ -729,13 +794,19 @@ core: title: Are you sure you want to uninstall these plugin? uninstall_and_delete_config: button: Uninstall and delete config - title: Are you sure you want to uninstall this plugin and its corresponding configuration? + title: >- + Are you sure you want to uninstall this plugin and its corresponding + configuration? uninstall_and_delete_config_in_batch: button: Uninstall and delete config - title: Are you sure you want to uninstall these plugin and its corresponding configuration? + title: >- + Are you sure you want to uninstall these plugin and its corresponding + configuration? uninstall_when_enabled: confirm_text: Stop running and uninstall - description: The current plugin is still in the enabled state and will be uninstalled after it stops running. This operation cannot be undone. + description: >- + The current plugin is still in the enabled state and will be + uninstalled after it stops running. This operation cannot be undone. change_status_in_batch: activate_title: Are you sure you want to activate these plugins? inactivate_title: Are you sure you want to inactivate these plugins? @@ -767,7 +838,9 @@ core: description: Would you like to activate the currently installed plugin? existed_during_installation: title: The plugin already exists. - description: The currently installed plugin already exists, do you want to upgrade? + description: >- + The currently installed plugin already exists, do you want to + upgrade? detail: title: Plugin detail header: @@ -783,8 +856,8 @@ core: last_starttime: Last Start Time loader: toast: - entry_load_failed: "Failed to load plugins entry file" - style_load_failed: "Failed to load plugins stylesheet file" + entry_load_failed: Failed to load plugins entry file + style_load_failed: Failed to load plugins stylesheet file extension_points: editor: providers: @@ -796,7 +869,9 @@ core: identity_authentication: Identity authentication empty: title: There are no users that meet the filtering criteria currently. - message: There are no users that match the filtering criteria at present. You can try refreshing or creating a new user. + message: >- + There are no users that match the filtering criteria at present. You can + try refreshing or creating a new user. operations: delete: title: Are you sure you want to delete this user? @@ -854,19 +929,13 @@ core: title: User detail tabs: detail: Detail - notification-preferences: Notification Preferences - pat: Personal Access Tokens actions: update_profile: title: Update profile change_password: title: Change password - operations: - bind: - button: Bind - unbind: - button: Unbind - title: "Are you sure you want to unbind the login method for {display_name}?" + profile: + title: Profile fields: display_name: Display name username: Username @@ -875,64 +944,6 @@ core: bio: Bio creation_time: Creation time identity_authentication: Identity authentication - avatar: - title: Avatar - toast_upload_failed: Failed to upload avatar - toast_remove_failed: Failed to delete avatar - cropper_modal: - title: Crop Avatar - remove: - title: Are you sure you want to delete the avatar? - tooltips: - upload: Upload - zoom_in: Zoom In - zoom_out: Zoom Out - flip_horizontal: Flip Horizontal - flip_vertical: Flip Vertical - reset: Reset - pat: - operations: - delete: - title: Delete Personal Access Token - description: Are you sure you want to delete this personal access token? - revoke: - button: Revoke - title: Revoke Personal Access Token - description: Are you sure you want to revoke this personal access token? - toast_success: Revocation succeeded - copy: - title: Please copy and save immediately, Token will only be displayed once. - restore: - button: Restore - toast_success: Restore successfully - list: - empty: - title: No personal access tokens have been created - message: You can try refreshing or creating a new personal access token - fields: - expiresAt: - dynamic: "Expires on {expiresAt}" - forever: Never expires - status: - normal: Normal - revoked: Revoked - expired: Expired - creation_modal: - title: Create Personal Access Token - groups: - general: General - permissions: Permissions - fields: - name: - label: Name - expiresAt: - label: Expiration Time - help: Leave empty for no expiration - description: - label: Description - notification-preferences: - fields: - type: Type role: title: Roles common: @@ -946,7 +957,9 @@ core: operations: delete: title: Are you sure you want to delete this role? - description: After the role is deleted, the associated users will have their role bindings removed and this operation cannot be undone. + description: >- + After the role is deleted, the associated users will have their role + bindings removed and this operation cannot be undone. create_based_on_this_role: button: Create based on this role detail: @@ -963,7 +976,9 @@ core: creation_time: Creation time permissions_detail: system_reserved_alert: - description: The system reserved role does not support modification, it is recommended to create a new role based on this one. + description: >- + The system reserved role does not support modification, it is + recommended to create a new role based on this one. editing_modal: titles: create: Create role @@ -973,6 +988,7 @@ core: permissions: Permissions fields: display_name: Display name + redirect_on_login: Default redirect location after logging in identity_authentication: title: Identity Authentication tabs: @@ -993,7 +1009,133 @@ core: website: Website help_page: Help page authentication_url: Login URL - notification: + uc_profile: + title: Profile + tabs: + detail: Detail + notification-preferences: Notification Preferences + pat: Personal Access Tokens + actions: + update_profile: + title: Update profile + change_password: + title: Change password + detail: + fields: + display_name: Display name + username: Username + email: Email + roles: Roles + bio: Bio + creation_time: Creation time + identity_authentication: Identity authentication + operations: + bind: + button: Bind + unbind: + button: Unbind + title: Are you sure you want to unbind the login method for {display_name}? + email_not_set: + description: >- + Your email address has not been set yet. Click the button below to set + it up. + title: Set up email + email_not_verified: + description: >- + Your email address has not been verified yet, click the button below + to verify it + title: Verify email + pat: + operations: + delete: + title: Delete Personal Access Token + description: Are you sure you want to delete this personal access token? + revoke: + button: Revoke + title: Revoke Personal Access Token + description: Are you sure you want to revoke this personal access token? + toast_success: Revocation succeeded + copy: + title: Please copy and save immediately, Token will only be displayed once. + restore: + button: Restore + toast_success: Restore successfully + list: + empty: + title: No personal access tokens have been created + message: You can try refreshing or creating a new personal access token + fields: + expiresAt: + dynamic: Expires on {expiresAt} + forever: Never expires + status: + normal: Normal + revoked: Revoked + expired: Expired + creation_modal: + title: Create Personal Access Token + groups: + general: General + permissions: Permissions + fields: + name: + label: Name + expiresAt: + label: Expiration Time + help: Leave empty for no expiration + description: + label: Description + notification-preferences: + fields: + type: Type + editing_modal: + title: Edit Profile + groups: + general: General + annotations: Annotations + fields: + username: + label: Username + validation: Please enter a valid username. + display_name: + label: Display name + email: + label: Email + phone: + label: Phone + avatar: + label: Avatar + bio: + label: Bio + change_password_modal: + title: Change password + fields: + new_password: + label: New password + confirm_password: + label: Confirm password + email_verify_modal: + fields: + code: + label: Verification code + email: + label: Email address + new_email: + label: New email address + operations: + send_code: + buttons: + countdown: Resend in {timer} seconds + send: Send the verification code + sending: sending + toast_email_empty: Please enter your email address + toast_success: Verification code sent + verify: + toast_success: Verification successful + titles: + modify: Modify email address + verify: Verify email + uc_notification: title: Notifications tabs: unread: Unread @@ -1005,6 +1147,9 @@ core: operations: mark_as_read: button: Mark as read + delete: + description: Are you sure you want to delete this notification? + title: Delete setting: title: Settings actuator: @@ -1039,7 +1184,10 @@ core: database: "Database: {database}" os: "Operating system: {os}" alert: - external_url_invalid: The external access url detected is inconsistent with the current access url, which may cause some links to fail to redirect properly. Please check the external access url settings. + external_url_invalid: >- + The external access url detected is inconsistent with the current access + url, which may cause some links to fail to redirect properly. Please + check the external access url settings. backup: title: Backup and Restore tabs: @@ -1052,14 +1200,19 @@ core: create: button: Create backup title: Create backup - description: Are you sure you want to create a backup? This operation may last for a long time. + description: >- + Are you sure you want to create a backup? This operation may last for + a long time. toast_success: Requested to create a backup delete: title: Delete the backup description: Are you sure you want to delete the backup? restore: title: Restore successfully - description: After successful restore, you need to restart Halo to load the system resources normally. After clicking OK, we will automatically restart Halo. + description: >- + After successful restore, you need to restart Halo to load the system + resources normally. After clicking OK, we will automatically restart + Halo. restart: toast_success: Requested to restart remote_download: @@ -1077,9 +1230,15 @@ core: expiresAt: Expires {expiresAt} restore: tips: - first: 1. The restore process may last for a long time, please do not refresh the page during this period. - second: 2. During the restore process, although the existing data will not be cleaned up, if there is a conflict, the data will be overwritten. - third: 3. After the restore is completed, you need to restart Halo to load the system resources normally. + first: >- + 1. The restore process may last for a long time, please do not refresh + the page during this period. + second: >- + 2. During the restore process, although the existing data will not be + cleaned up, if there is a conflict, the data will be overwritten. + third: >- + 3. After the restore is completed, you need to restart Halo to load + the system resources normally. complete: Restore completed, waiting for restart... start: Start restore tabs: @@ -1202,7 +1361,7 @@ core: extensions: placeholder: options: - placeholder: "Enter / to select input type." + placeholder: Enter / to select input type. toolbox: attachment: Attachment show_hide_sidebar: Show/Hide Sidebar @@ -1229,18 +1388,35 @@ core: social_auth_providers: title: Third-party login app_download_alert: - description: "Themes and plugins for Halo can be downloaded at the following addresses:" + description: >- + Themes and plugins for Halo can be downloaded at the following + addresses: sources: app_store: "Official App Store: {url}" github: "GitHub: {url}" + user_avatar: + title: Avatar + toast_upload_failed: Failed to upload avatar + toast_remove_failed: Failed to delete avatar + cropper_modal: + title: Crop Avatar + remove: + title: Are you sure you want to delete the avatar? + tooltips: + upload: Upload + zoom_in: Zoom In + zoom_out: Zoom Out + flip_horizontal: Flip Horizontal + flip_vertical: Flip Vertical + reset: Reset composables: content_cache: toast_recovered: Recovered unsaved content from cache formkit: category_select: - creation_label: "Create {text} category" + creation_label: Create {text} category tag_select: - creation_label: "Create {text} tag" + creation_label: Create {text} tag validation: trim: Please remove the leading and trailing spaces common: @@ -1278,9 +1454,11 @@ core: detail: Detail select: Select view_all: View all + verify: Verify + modify: Modify radio: - "yes": Yes - "no": No + "yes": "Yes" + "no": "No" select: public: Public private: Private @@ -1302,10 +1480,10 @@ core: copy_success: Copied successfully operation_failed: Failed to operate download_failed: Failed to download - save_failed_and_retry: "Failed to save, please retry" - publish_failed_and_retry: "Failed to publish, please retry" - network_error: "Network error, please check your connection" - login_expired: "Login expired, please log in again" + save_failed_and_retry: Failed to save, please retry + publish_failed_and_retry: Failed to publish, please retry + network_error: Network error, please check your connection + login_expired: Login expired, please log in again forbidden: Access denied not_found: Resource not found server_internal_error: Internal server error @@ -1316,7 +1494,9 @@ core: warning: Warning descriptions: cannot_be_recovered: This operation is irreversible. - editor_not_found: No editor found that matches the {raw_type} format. Please check if the editor plugin has been installed. + editor_not_found: >- + No editor found that matches the {raw_type} format. Please check if + the editor plugin has been installed. filters: results: keyword: "Keyword: {keyword}" @@ -1346,3 +1526,15 @@ core: recovering: Recovering fields: post_count: "{count} Posts" + uc_post: + creation_modal: + title: Create post + operations: + cancel_publish: + description: Are you sure you want to cancel publishing? + title: Cancel publish + publish_modal: + title: Publish post + setting_modal: + title: Post settings + title: My posts diff --git a/console/src/locales/es.yaml b/console/src/locales/es.yaml index a77b1838b4..afa2f7138b 100644 --- a/console/src/locales/es.yaml +++ b/console/src/locales/es.yaml @@ -1,1272 +1,1274 @@ +# core: +# login: +# title: Inicio de sesión +# fields: +# username: +# placeholder: Usuario +# password: +# placeholder: Contraseña +# operations: +# submit: +# toast_success: Inicio de sesión exitoso +# toast_failed: Error en el inicio de sesión, nombre de usuario o contraseña incorrectos +# toast_csrf: Token CSRF no válido, por favor inténtalo de nuevo +# signup: +# label: No tienes una cuenta +# button: Registrarse ahora +# return_login: +# label: Ya tienes una cuenta +# button: Iniciar sesión ahora +# return_site: Volver a la página de inicio +# button: Iniciar sesión +# modal: +# title: Volver a iniciar sesión +# signup: +# title: Registrarse +# fields: +# username: +# placeholder: Nombre de usuario +# display_name: +# placeholder: Nombre para mostrar +# password: +# placeholder: Contraseña +# password_confirm: +# placeholder: Confirmar contraseña +# operations: +# submit: +# button: Registrarse +# toast_success: Registrado exitosamente +# binding: +# title: Vinculación de cuentas +# common: +# toast: +# mounted: El método de inicio de sesión actual no está vinculado a una cuenta. Por favor, vincula o registra una nueva cuenta primero. +# operations: +# login_and_bind: +# button: Iniciar sesión y vincular +# signup_and_bind: +# button: Registrarse y vincular +# bind: +# toast_success: Vinculación exitosa +# toast_failed: Vinculación fallida, no se encontró ningún método de inicio de sesión habilitado. +# sidebar: +# search: +# placeholder: Buscar +# menu: +# groups: +# content: Contenido +# interface: Interfaz +# system: Sistema +# tool: Herramienta +# items: +# dashboard: Panel de control +# posts: Publicaciones +# single_pages: Páginas +# comments: Comentarios +# attachments: Archivos adjuntos +# themes: Temas +# menus: Menús +# plugins: Complementos +# users: Usuarios +# settings: Configuraciones +# actuator: Actuador +# backup: Respaldo +# operations: +# logout: +# button: Cerrar sesión +# title: ¿Estás seguro de que deseas cerrar sesión? +# profile: +# button: Perfil +# visit_homepage: +# title: Visitar página de inicio +# dashboard: +# title: Panel de control +# actions: +# setting: Configuración +# done: Hecho +# add_widget: Agregar Widget +# widgets: +# modal_title: Widgets +# groups: +# post: Publicación +# page: Página +# comment: Comentario +# user: Usuario +# other: Otros +# presets: +# post_stats: +# title: Publicaciones +# page_stats: +# title: Páginas +# recent_published: +# title: Publicaciones Recientes +# visits: "{visits} Visitas" +# comments: "{comments} Comentarios" +# quicklink: +# title: Enlace Rápido +# actions: +# user_center: +# title: Perfil de Usuario +# view_site: +# title: Ver Sitio +# new_post: +# title: Nueva Publicación +# new_page: +# title: Nueva Página +# upload_attachment: +# title: Subir Archivo Adjunto +# theme_manage: +# title: Administrar Temas +# plugin_manage: +# title: Administrar Complementos +# new_user: +# title: Nuevo Usuario +# refresh_search_engine: +# title: Actualizar Motor de Búsqueda +# dialog_title: ¿Deseas actualizar el índice del motor de búsqueda? +# dialog_content: Esta operación recreará los índices del motor de búsqueda para todas las publicaciones publicadas. +# success_message: Índice del motor de búsqueda actualizado exitosamente. +# evict_page_cache: +# title: Actualizar Caché de Página +# dialog_title: ¿Deseas actualizar el caché de las páginas? +# dialog_content: Esta operación borrará la caché de todas las páginas. +# success_message: Caché de página actualizada exitosamente. +# user_stats: +# title: Usuarios +# comment_stats: +# title: Comentarios +# views_stats: +# title: Visitas +# post: +# title: Publicaciones +# actions: +# categories: Categorías +# tags: Etiquetas +# recycle_bin: Papelera de reciclaje +# empty: +# title: No hay publicaciones actualmente. +# message: Puedes intentar actualizar o crear una nueva publicación. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar esta publicación? +# description: Esta operación moverá la publicación a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar las publicaciones seleccionadas? +# description: Esta operación moverá las publicaciones a la papelera de reciclaje, y podrán ser restauradas desde la papelera de reciclaje posteriormente. +# filters: +# status: +# items: +# published: Publicado +# draft: Borrador +# visible: +# label: Visible +# result: "Visible: {visible}" +# items: +# public: Público +# private: Privado +# category: +# label: Categoría +# result: "Categoría: {category}" +# tag: +# label: Etiqueta +# result: "Etiqueta: {tag}" +# author: +# label: Autor +# result: "Autor: {author}" +# sort: +# items: +# publish_time_desc: Publicado más reciente +# publish_time_asc: Publicado más antiguo +# create_time_desc: Creado más reciente +# create_time_asc: Creado más antiguo +# list: +# fields: +# categories: "Categorías:" +# visits: "{visits} Visitas" +# comments: "{comments} Comentarios" +# pinned: Fijado +# settings: +# title: Configuraciones +# groups: +# general: General +# advanced: Avanzado +# annotations: Anotaciones +# fields: +# title: +# label: Título +# slug: +# label: Slug +# help: Usualmente usado para generar el enlace permanente a las publicaciones +# refresh_message: Regenerar slug basado en el título. +# categories: +# label: Categorías +# tags: +# label: Etiquetas +# auto_generate_excerpt: +# label: Generar Extracto Automáticamente +# raw_excerpt: +# label: Extracto +# allow_comment: +# label: Permitir Comentarios +# pinned: +# label: Fijado +# visible: +# label: Visible +# publish_time: +# label: Hora de Publicación +# template: +# label: Plantilla +# cover: +# label: Portada +# deleted_post: +# title: Publicaciones eliminadas +# empty: +# title: No se han colocado publicaciones en la papelera de reciclaje. +# message: Puedes intentar actualizar o volver a la página anterior. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar permanentemente esta publicación? +# description: Después de la eliminación, no será posible recuperarla. +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar permanentemente las publicaciones seleccionadas? +# description: Después de la eliminación, no será posible recuperarlas. +# recovery: +# title: ¿Quieres restaurar esta publicación? +# description: Esta operación restaurará la publicación a su estado antes de la eliminación. +# recovery_in_batch: +# title: ¿Estás seguro de que deseas restaurar las publicaciones seleccionadas? +# description: Esta operación restaurará las publicaciones a su estado antes de la eliminación. +# post_editor: +# title: Edición de publicación +# untitled: Publicación sin título +# post_tag: +# title: Etiquetas de publicación +# header: +# title: "{count} Etiquetas" +# empty: +# title: No hay etiquetas actualmente. +# message: Puedes intentar actualizar o crear una nueva etiqueta. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar esta etiqueta? +# description: Después de eliminar esta etiqueta, se eliminará la asociación con el artículo correspondiente. Esta operación no se puede deshacer. +# editing_modal: +# titles: +# update: Actualizar etiqueta de publicación +# create: Crear etiqueta de publicación +# groups: +# general: General +# annotations: Anotaciones +# fields: +# display_name: +# label: Nombre para mostrar +# slug: +# label: Slug +# help: Usualmente utilizado para generar el enlace permanente de las etiquetas +# refresh_message: Regenerar slug basado en el nombre para mostrar. +# color: +# label: Color +# help: Se requiere adaptación del tema para ser compatible +# cover: +# label: Portada +# help: Se requiere adaptación del tema para ser compatible +# post_category: +# title: Categorías de publicación +# header: +# title: "{count} Categorías" +# empty: +# title: No hay categorías actualmente. +# message: Puedes intentar actualizar o crear una nueva categoría. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar esta categoría? +# description: Después de eliminar esta categoría, se eliminará la asociación con los artículos correspondientes. Esta operación no se puede deshacer. +# add_sub_category: +# button: Agregar subcategoría +# editing_modal: +# titles: +# update: Actualizar categoría de publicación +# create: Crear categoría de publicación +# groups: +# general: General +# annotations: Anotaciones +# fields: +# parent: +# label: Padre +# display_name: +# label: Nombre para mostrar +# slug: +# label: Slug +# help: Usualmente utilizado para generar el enlace permanente de las categorías +# refresh_message: Regenerar slug basado en el nombre para mostrar. +# template: +# label: Plantilla personalizada +# cover: +# label: Portada +# help: Se requiere adaptación del tema para ser compatible +# description: +# label: Descripción +# help: Se requiere adaptación del tema para ser compatible +# page: +# title: Páginas +# actions: +# recycle_bin: Papelera de reciclaje +# empty: +# title: No hay páginas actualmente. +# message: Puedes intentar actualizar o crear una nueva página. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar esta página? +# description: Esta operación moverá la página a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar las páginas seleccionadas? +# description: Esta operación moverá las páginas a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. +# filters: +# status: +# items: +# published: Publicado +# draft: Borrador +# visible: +# label: Visible +# result: "Visible: {visible}" +# items: +# public: Público +# private: Privado +# author: +# label: Autor +# result: "Autor: {author}" +# sort: +# items: +# publish_time_desc: Publicado más reciente +# publish_time_asc: Publicado más antiguo +# create_time_desc: Creado más reciente +# create_time_asc: Creado más antiguo +# list: +# fields: +# visits: "{visits} Visitas" +# comments: "{comments} Comentarios" +# settings: +# title: Configuraciones +# groups: +# general: General +# advanced: Avanzado +# annotations: Anotaciones +# fields: +# title: +# label: Título +# slug: +# label: Slug +# help: Usualmente utilizado para generar el enlace permanente de las páginas +# refresh_message: Regenerar slug basado en el título. +# auto_generate_excerpt: +# label: Generar Extracto Automáticamente +# raw_excerpt: +# label: Extracto +# allow_comment: +# label: Permitir Comentarios +# pinned: +# label: Fijado +# visible: +# label: Visible +# publish_time: +# label: Hora de Publicación +# template: +# label: Plantilla +# cover: +# label: Portada +# deleted_page: +# title: Páginas Eliminadas +# empty: +# title: No hay páginas en la papelera de reciclaje. +# message: Puedes intentar actualizar o volver a la página anterior. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar permanentemente esta página? +# description: Después de la eliminación, no será posible recuperarla. +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar permanentemente las páginas seleccionadas? +# description: Después de la eliminación, no será posible recuperarlas. +# recovery: +# title: ¿Quieres restaurar esta página? +# description: Esta operación restaurará la página a su estado antes de la eliminación. +# recovery_in_batch: +# title: ¿Estás seguro de que deseas restaurar las páginas seleccionadas? +# description: Esta operación restaurará las páginas a su estado antes de la eliminación. +# page_editor: +# title: Edición de Página +# untitled: Página Sin Título +# comment: +# title: Comentarios +# empty: +# title: No hay comentarios actualmente. +# message: Puedes intentar actualizar o modificar los criterios de filtrado. +# reply_empty: +# title: No hay respuestas actualmente. +# message: Puedes intentar actualizar o crear una nueva respuesta. +# new: Nueva Respuesta +# operations: +# delete_comment: +# title: ¿Estás seguro de que deseas eliminar este comentario? +# description: Todas las respuestas bajo los comentarios se eliminarán al mismo tiempo, y esta operación no se puede deshacer. +# delete_comment_in_batch: +# title: ¿Estás seguro de que deseas eliminar los comentarios seleccionados? +# description: Todas las respuestas bajo los comentarios se eliminarán al mismo tiempo, y esta operación no se puede deshacer. +# approve_comment_in_batch: +# button: Aprobar +# title: ¿Estás seguro de que deseas aprobar los comentarios seleccionados para su revisión? +# approve_applies_in_batch: +# button: Aprobar todas las respuestas +# title: ¿Estás seguro de que deseas aprobar todas las respuestas a este comentario para su revisión? +# delete_reply: +# title: ¿Estás seguro de que deseas eliminar esta respuesta? +# approve_reply: +# button: Aprobar +# reply: +# button: Responder +# filters: +# status: +# items: +# approved: Aprobado +# pending_review: Pendiente de Revisión +# owner: +# label: Propietario +# result: "Propietario: {owner}" +# sort: +# items: +# last_reply_time_desc: Respuesta Reciente +# last_reply_time_asc: Respuesta Antigua +# reply_count_desc: Más Respuestas +# reply_count_asc: Menos Respuestas +# create_time_desc: Creado más reciente +# create_time_asc: Creado más antiguo +# list: +# fields: +# reply_count: "{count} Respuestas" +# has_new_replies: Nuevas respuestas +# pending_review: Pendiente de revisión +# subject_refs: +# post: Publicación +# page: Página +# unknown: Desconocido +# reply_modal: +# title: Respuesta +# fields: +# content: +# label: Contenido +# operations: +# submit: +# toast_success: Respuesta enviada exitosamente +# attachment: +# title: Adjuntos +# common: +# text: +# ungrouped: Sin grupo +# actions: +# storage_policies: Políticas de Almacenamiento +# empty: +# title: No hay adjuntos en el grupo actual. +# message: El grupo actual no tiene adjuntos, puedes intentar actualizar o cargar adjuntos. +# actions: +# upload: Cargar Adjunto +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar este adjunto? +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar los adjuntos seleccionados? +# deselect_items: +# button: Deseleccionar ítems +# move: +# button: Mover +# toast_success: Movimiento exitoso +# filters: +# storage_policy: +# label: Política de Almacenamiento +# result: "Política de Almacenamiento: {storage_policy}" +# owner: +# label: Propietario +# result: "Propietario: {owner}" +# sort: +# items: +# create_time_desc: Cargado más reciente +# create_time_asc: Cargado más antiguo +# size_desc: Ordenar por tamaño descendente +# size_asc: Ordenar por tamaño ascendente +# view_type: +# items: +# grid: Modo Cuadrícula +# list: Modo Lista +# detail_modal: +# title: "Adjunto: {display_name}" +# fields: +# preview: Vista Previa +# storage_policy: Política de Almacenamiento +# group: Grupo +# display_name: Nombre para Mostrar +# media_type: Tipo de Medio +# size: Tamaño +# owner: Propietario +# creation_time: Hora de Creación +# permalink: Enlace Permanente +# preview: +# click_to_exit: Haz clic para salir de la vista previa +# video_not_support: El navegador actual no admite la reproducción de video. +# audio_not_support: El navegador actual no admite la reproducción de audio. +# not_support: Este archivo no admite la vista previa. +# group_editing_modal: +# titles: +# create: Crear grupo de adjuntos +# update: Actualizar grupo de adjuntos +# fields: +# display_name: +# label: Nombre para Mostrar +# group_list: +# internal_groups: +# all: Todo +# operations: +# rename: +# button: Cambiar nombre +# delete: +# button: Y mover adjunto a sin grupo +# title: ¿Estás seguro de que deseas eliminar este grupo? +# description: El grupo se eliminará, y los adjuntos bajo el grupo se moverán a sin grupo. Esta operación no se puede deshacer. +# toast_success: Eliminación exitosa, {total} adjuntos se han movido a sin grupo +# delete_with_attachments: +# button: También eliminar adjuntos +# title: ¿Estás seguro de que deseas eliminar este grupo? +# description: Al eliminar el grupo y todos los adjuntos dentro de él, esta acción no se puede deshacer. +# toast_success: Eliminación exitosa, {total} adjuntos se han eliminado simultáneamente +# policies_modal: +# title: Políticas de Almacenamiento +# empty: +# title: Actualmente no hay estrategias de almacenamiento disponibles. +# message: No hay políticas de almacenamiento disponibles en este momento. Puedes intentar actualizar o crear una nueva política. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar esta política? +# description: No hay adjuntos cargados bajo la política actual. +# can_not_delete: +# title: Fallo en la eliminación +# description: Hay adjuntos bajo esta política, que no se pueden eliminar. +# policy_editing_modal: +# titles: +# create: "Nueva política: {policy_template}" +# update: "Editar política: {policy}" +# fields: +# display_name: +# label: Nombre para Mostrar +# upload_modal: +# title: Cargar adjunto +# filters: +# group: +# label: "Seleccionar grupo:" +# policy: +# label: "Seleccionar política de almacenamiento:" +# empty: +# title: Sin política de almacenamiento +# description: Antes de cargar, es necesario crear una nueva política de almacenamiento. +# not_select: Por favor, selecciona una política de almacenamiento primero +# select_modal: +# title: Seleccionar adjunto +# providers: +# default: +# label: Adjuntos +# operations: +# select: +# result: "({count} elementos seleccionados)" +# theme: +# title: Temas +# common: +# buttons: +# install: Instalar Tema +# tabs: +# detail: Detalles +# actions: +# management: Gestión de Temas +# empty: +# title: No hay temas activados o seleccionados actualmente. +# message: Puedes cambiar de tema o instalar nuevos. +# actions: +# switch: Cambiar de Tema +# operations: +# active: +# title: ¿Estás seguro de activar el tema actual? +# toast_success: Tema activado exitosamente +# reset: +# title: ¿Estás seguro de que deseas restablecer todas las configuraciones del tema? +# description: Esta operación eliminará la configuración guardada y la restablecerá a los ajustes predeterminados. +# toast_success: Configuración restablecida exitosamente +# reload: +# button: Recargar +# title: ¿Estás seguro de que deseas recargar todas las configuraciones del tema? +# description: Esta operación solo recargará la configuración del tema y la definición del formulario de ajustes, y no eliminará ninguna configuración guardada. +# toast_success: Recarga de configuración exitosa +# uninstall: +# title: ¿Estás seguro de que deseas desinstalar este tema? +# uninstall_and_delete_config: +# button: Desinstalar y eliminar configuración +# title: ¿Estás seguro de que deseas desinstalar este tema y su configuración correspondiente? +# remote_download: +# title: Se ha detectado una dirección de descarga remota, ¿deseas descargar? +# description: "Por favor, verifica cuidadosamente si esta dirección es confiable: {url}" +# upload_modal: +# titles: +# install: Instalar tema +# upgrade: Actualizar tema ({display_name}) +# operations: +# existed_during_installation: +# title: El tema ya existe. +# description: El tema instalado actualmente ya existe, deseas actualizarlo? +# tabs: +# local: Local +# remote: +# title: Remoto +# fields: +# url: URL Remota +# list_modal: +# titles: +# installed_themes: Temas Instalados +# not_installed_themes: Temas no Instalados +# tabs: +# installed: Instalados +# not_installed: No Instalados +# empty: +# title: No hay temas instalados actualmente. +# message: No hay temas instalados actualmente, puedes intentar actualizar o instalar un nuevo tema. +# not_installed_empty: +# title: No hay temas actualmente no instalados. +# preview_model: +# title: "Vista Previa del Tema: {display_name}" +# actions: +# switch: Cambiar de tema +# setting: Ajustes +# open: Abrir +# detail: +# fields: +# author: Autor +# website: Sitio Web +# repo: Repositorio Fuente +# version: Versión +# requires: Requiere +# storage_location: Ubicación de Almacenamiento +# plugin_requires: Requiere Plugin +# settings: +# title: Ajustes del Tema +# custom_templates: +# default: Predeterminado +# menu: +# title: Menús +# empty: +# title: Actualmente no hay menús. +# message: Puedes intentar actualizar o crear un nuevo menú. +# menu_item_empty: +# title: Actualmente no hay elementos de menú. +# message: Puedes intentar actualizar o crear un nuevo elemento de menú. +# operations: +# set_primary: +# button: Establecer como menú principal +# toast_success: Configuración exitosa +# delete_menu: +# title: "¿Estás seguro de que deseas eliminar este menú?" +# description: Todos los elementos de menú de este menú se eliminarán al mismo tiempo y esta operación no se puede deshacer. +# delete_menu_item: +# title: "¿Estás seguro de que deseas eliminar este elemento de menú?" +# description: Todos los subelementos de menú se eliminarán al mismo tiempo y no se pueden restaurar después de la eliminación. +# add_sub_menu_item: +# button: Agregar subelemento de menú +# list: +# fields: +# primary: Principal +# items_count: "{count} elementos" +# menu_editing_modal: +# titles: +# create: Crear menú +# update: Actualizar menú +# fields: +# display_name: +# label: Nombre para mostrar +# menu_item_editing_modal: +# titles: +# create: Crear elemento de menú +# update: Actualizar elemento de menú +# groups: +# general: General +# annotations: Anotaciones +# fields: +# parent: +# label: Padre +# placeholder: Selecciona el elemento de menú padre +# ref_kind: +# label: Tipo +# placeholder: "Por favor selecciona {label}" +# options: +# custom: Personalizado +# post: Publicación +# single_page: Página +# category: Categoría +# tag: Etiqueta +# display_name: +# label: Nombre para mostrar +# href: +# label: Dirección del enlace +# target: +# label: Destino +# options: +# self: _self +# blank: _blank +# parent: _parent +# top: _top +# plugin: +# title: Plugins +# tabs: +# detail: Detail +# empty: +# title: There are no installed plugins currently. +# message: There are no installed plugins currently, you can try refreshing or installing new plugins. +# actions: +# install: Install Plugin +# operations: +# reset: +# title: Are you sure you want to reset all configurations of the plugin? +# description: This operation will delete the saved configuration and reset it to default settings. +# toast_success: Reset configuration successfully +# uninstall: +# title: Are you sure you want to uninstall this plugin? +# uninstall_and_delete_config: +# title: Are you sure you want to uninstall this plugin and its corresponding configuration? +# uninstall_when_enabled: +# confirm_text: Stop running and uninstall +# description: The current plugin is still in the enabled state and will be uninstalled after it stops running. This operation cannot be undone. +# change_status: +# active_title: Are you sure you want to active this plugin? +# inactive_title: Are you sure you want to inactive this plugin? +# remote_download: +# title: Remote download address detected, do you want to download? +# description: "Please carefully verify whether this address can be trusted: {url}" +# filters: +# status: +# items: +# active: Active +# inactive: Inactive +# sort: +# items: +# create_time_desc: Latest Installed +# create_time_asc: Earliest Installed +# list: +# actions: +# uninstall_and_delete_config: Uninstall and delete config +# upload_modal: +# titles: +# install: Install plugin +# upgrade: Upgrade plugin ({display_name}) +# tabs: +# local: Local +# remote: +# title: Remote +# fields: +# url: Remote URL +# operations: +# active_after_install: +# title: Install successful +# description: Would you like to activate the currently installed plugin? +# existed_during_installation: +# title: The plugin already exists. +# description: The currently installed plugin already exists, do you want to upgrade? +# detail: +# title: Plugin detail +# header: +# title: Plugin information +# fields: +# display_name: Display Name +# description: Description +# version: Version +# requires: Requires +# author: Author +# license: License +# role_templates: Role Templates +# last_starttime: Last Start Time +# loader: +# toast: +# entry_load_failed: "{name}: Failed to load plugin entry file" +# style_load_failed: "{name}: Failed to load plugin stylesheet file" +# extension_points: +# editor: +# providers: +# default: Default Editor +# user: +# title: Usuarios +# actions: +# roles: Roles +# identity_authentication: Autenticación de Identidad +# empty: +# title: Actualmente no hay usuarios que cumplan con los criterios de filtrado. +# message: No hay usuarios que coincidan con los criterios de filtrado en este momento. Puedes intentar actualizar o crear un nuevo usuario. +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar a este usuario? +# delete_in_batch: +# title: ¿Estás seguro de que deseas eliminar a los usuarios seleccionados? +# update_profile: +# title: Actualizar perfil +# change_password: +# title: Cambiar contraseña +# grant_permission: +# title: Conceder permiso +# filters: +# role: +# label: Rol +# result: "Rol: {role}" +# sort: +# items: +# create_time_desc: Últimos creados +# create_time_asc: Más antiguos creados +# editing_modal: +# titles: +# update: Editar usuario +# create: Crear usuario +# groups: +# general: General +# annotations: Anotaciones +# fields: +# username: +# label: Nombre de usuario +# validation: Por favor, introduce un nombre de usuario válido. +# display_name: +# label: Nombre para mostrar +# email: +# label: Correo electrónico +# phone: +# label: Teléfono +# avatar: +# label: Avatar +# bio: +# label: Biografía +# change_password_modal: +# title: Cambiar contraseña +# fields: +# new_password: +# label: Nueva contraseña +# confirm_password: +# label: Confirmar contraseña +# grant_permission_modal: +# title: Conceder permiso +# fields: +# role: +# label: Rol +# placeholder: Por favor, selecciona un rol +# detail: +# title: Detalles del usuario +# tabs: +# detail: Detalle +# actions: +# update_profile: +# title: Actualizar perfil +# change_password: +# title: Cambiar contraseña +# operations: +# bind: +# button: Vincular +# unbind: +# button: Desvincular +# title: ¿Estás seguro de que deseas desvincular el método de inicio de sesión para {display_name}? +# fields: +# display_name: Nombre para mostrar +# username: Nombre de usuario +# email: Correo electrónico +# roles: Roles +# bio: Biografía +# creation_time: Fecha de creación +# identity_authentication: Autenticación de identidad +# avatar: +# title: Avatar +# toast_upload_failed: No se pudo cargar el avatar +# toast_remove_failed: No se pudo eliminar el avatar +# cropper_modal: +# title: Recortar Avatar +# remove: +# title: ¿Estás seguro de que deseas eliminar el avatar? +# tooltips: +# upload: Cargar +# zoom_in: Acercar +# zoom_out: Alejar +# flip_horizontal: Voltear Horizontalmente +# flip_vertical: Voltear Verticalmente +# reset: Restablecer +# role: +# title: Roles +# common: +# text: +# contains_all_permissions: Contiene todos los permisos +# contains_n_permissions: Contiene {count} permisos +# system_reserved: Reservado del Sistema +# custom: Personalizado +# dependent_on: Dependiente de {roles} +# provided_by_plugin: Proporcionado por {plugin} +# operations: +# delete: +# title: ¿Estás seguro de que deseas eliminar este rol? +# description: Una vez eliminado el rol, se eliminarán las asignaciones de rol de los usuarios asociados y esta operación no se puede deshacer. +# create_based_on_this_role: +# button: Crear basado en este rol +# detail: +# title: Detalle del rol +# header: +# title: Información del rol +# tabs: +# detail: Detalle +# permissions: Permisos +# fields: +# display_name: Nombre para mostrar +# name: Nombre +# type: Tipo +# creation_time: Fecha de creación +# permissions_detail: +# system_reserved_alert: +# description: El rol reservado del sistema no admite modificaciones. Se recomienda crear un nuevo rol basado en este. +# editing_modal: +# titles: +# create: Crear rol +# update: Actualizar rol +# groups: +# general: General +# permissions: Permisos +# fields: +# display_name: Nombre para mostrar +# identity_authentication: +# title: Autenticación de Identidad +# tabs: +# detail: Detalle +# setting: Configuración +# operations: +# enable: +# title: ¿Estás seguro de que deseas habilitar este método de autenticación de identidad? +# disable: +# title: ¿Estás seguro de que deseas deshabilitar este método de autenticación de identidad? +# disable_privileged: +# tooltip: El método de autenticación reservado por el sistema no se puede deshabilitar +# detail: +# title: Detalle de la autenticación de identidad +# fields: +# display_name: Nombre para mostrar +# description: Descripción +# website: Sitio web +# help_page: Página de ayuda +# authentication_url: URL de inicio de sesión +# setting: +# title: Configuraciones +# actuator: +# title: Actuador +# actions: +# copy: +# toast_browser_not_supported: El navegador actual no admite la función de copiado +# header: +# titles: +# general: Información general +# environment: Información del entorno +# fields: +# external_url: URL externa +# start_time: Hora de inicio +# timezone: Zona horaria +# locale: Idioma +# version: Versión +# build_time: Fecha de compilación +# database: Base de datos +# os: Sistema operativo +# log: Registro del sistema +# fields_values: +# external_url: +# not_setup: No configurado +# copy_results: +# external_url: "URL externa: {external_url}" +# start_time: "Hora de inicio: {start_time}" +# version: "Versión: {version}" +# build_time: "Fecha de compilación: {build_time}" +# database: "Base de datos: {database}" +# os: "Sistema operativo: {os}" +# alert: +# external_url_invalid: La URL de acceso externo detectada no coincide con la URL de acceso actual, lo que podría causar que algunos enlaces no se redirijan correctamente. Por favor, verifica la configuración de la URL de acceso externo. +# backup: +# title: Copia de Seguridad y Restauración +# tabs: +# backup_list: Copias de Seguridad +# restore: Restaurar +# empty: +# title: Aún no se han creado copias de seguridad +# message: Puedes hacer clic en el botón debajo para crear una copia de seguridad +# operations: +# create: +# button: Crear copia de seguridad +# title: Crear copia de seguridad +# description: ¿Estás seguro de que deseas crear una copia de seguridad? Esta operación puede tomar un tiempo. +# toast_success: Solicitud de creación de copia de seguridad realizada +# delete: +# title: Eliminar copia de seguridad +# description: ¿Estás seguro de que deseas eliminar esta copia de seguridad? +# restore: +# title: Restauración exitosa +# description: Después de una restauración exitosa, necesitas reiniciar Halo para cargar los recursos del sistema normalmente. Después de hacer clic en OK, reiniciaremos automáticamente Halo. +# restart: +# toast_success: Solicitud de reinicio realizada +# list: +# phases: +# pending: Pendiente +# running: En Progreso +# succeeded: Exitosa +# failed: Fallida +# fields: +# expiresAt: Expira el {expiresAt} +# restore: +# tips: +# first: 1. El proceso de restauración puede tomar un tiempo, por favor no actualices la página durante este período. +# second: 2. Durante el proceso de restauración, aunque los datos existentes no se eliminarán, si hay un conflicto, los datos se sobrescribirán. +# third: 3. Después de completar la restauración, necesitas reiniciar Halo para cargar los recursos del sistema normalmente. +# complete: Restauración completada, esperando reinicio... +# start: Iniciar Restauración +# exception: +# not_found: +# message: Página no encontrada +# forbidden: +# message: Acceso no autorizado a esta página +# actions: +# home: Ir a la página de inicio +# setup: +# title: Configuración +# operations: +# submit: +# button: Configurar +# toast_success: Configuración exitosa +# setup_initial_data: +# loading: Inicializando datos, por favor espera... +# fields: +# site_title: +# label: Título del Sitio +# email: +# label: Correo Electrónico +# username: +# label: Nombre de Usuario +# password: +# label: Contraseña +# confirm_password: +# label: Confirmar Contraseña +# rbac: +# Attachments Management: Gestión de archivos adjuntos +# Attachment Manage: Gestor de adjuntos +# Attachment View: Vista de adjuntos +# role-template-view-attachments: Vista de adjuntos +# Comments Management: Comentarios +# Comment Manage: Gestor de comentarios +# Comment View: Vista de comentarios +# role-template-view-comments: Vista de comentarios +# ConfigMaps Management: ConfigMaps +# ConfigMap Manage: Gestor de ConfigMaps +# ConfigMap View: Vista de ConfigMaps +# role-template-view-configmaps: Vista de ConfigMaps +# Menus Management: Menús +# Menu Manage: Gestor de menús +# Menu View: Vista de menús +# role-template-view-menus: Vista de menús +# Permissions Management: Permisos +# Permissions Manage: Gestor de permisos +# Permissions View: Vista de permisos +# role-template-view-permissions: Vista de permisos +# role-template-manage-permissions: Gestor de permisos +# Plugins Management: Plugins +# Plugin Manage: Gestor de plugins +# Plugin View: Vista de plugins +# role-template-view-plugins: Vista de plugins +# Posts Management: Publicaciones +# Post Manage: Gestor de publicaciones +# Post View: Vista de publicaciones +# role-template-view-posts: Vista de publicaciones +# role-template-manage-snapshots: Gestor de snapshots +# role-template-view-snapshots: Vista de snapshots +# role-template-manage-tags: Gestor de etiquetas +# role-template-view-tags: Vista de etiquetas +# role-template-manage-categories: Gestor de categorías +# role-template-view-categories: Vista de categorías +# Roles Management: Roles +# Role Manage: Gestor de roles +# Role View: Vista de roles +# role-template-view-roles: Vista de roles +# Settings Management: Configuración +# Setting Manage: Gestor de configuración +# Setting View: Vista de configuración +# role-template-view-settings: Vista de configuración +# SinglePages Management: SinglePages +# SinglePage Manage: Gestor de SinglePages +# SinglePage View: Vista de SinglePages +# role-template-view-singlepages: Vista de SinglePages +# Themes Management: Temas +# Theme Manage: Gestor de temas +# Theme View: Vista de temas +# role-template-view-themes: Vista de temas +# Users Management: Usuarios +# User manage: Gestor de usuarios +# User View: Vista de usuarios +# Migration Management: Copia de seguridad y restauración +# Migration Manage: Gestor de copia de seguridad y restauración +# role-template-view-users: Vista de usuarios +# role-template-change-password: Cambiar contraseña +# components: +# submit_button: +# computed_text: "{text} ({shortcut})" +# annotations_form: +# custom_fields: +# label: Personalizado +# validation: La clave actual ya está en uso +# default_editor: +# tabs: +# toc: +# title: Índice +# empty: No hay índice disponible +# detail: +# title: Detalle +# fields: +# character_count: Conteo de caracteres +# word_count: Conteo de palabras +# publish_time: Hora de publicación +# draft: Borrador +# owner: Propietario +# permalink: Enlace permanente +# extensions: +# placeholder: +# options: +# placeholder: "Ingresa / para seleccionar el tipo de entrada." +# toolbox: +# attachment: Adjunto +# global_search: +# placeholder: Ingresa palabras clave para buscar +# no_results: Sin resultados de búsqueda +# buttons: +# select: Seleccionar +# groups: +# console: Página de la consola +# user: Usuario +# plugin: Plugin +# post: Publicación +# category: Categoría +# tag: Etiqueta +# page: Página +# attachment: Adjunto +# setting: Configuración +# theme_setting: Configuración del tema +# pagination: +# page_label: página +# size_label: elementos por página +# total_label: Total de {total} elementos +# social_auth_providers: +# title: Inicio de sesión de terceros +# app_download_alert: +# description: "Los temas y complementos para Halo se pueden descargar en las siguientes direcciones:" +# sources: +# app_store: "Tienda de aplicaciones oficial: {url}" +# github: "GitHub: {url}" +# composables: +# content_cache: +# toast_recovered: Contenido no guardado recuperado de la caché +# formkit: +# category_select: +# creation_label: "Crear categoría {text}" +# tag_select: +# creation_label: "Crear etiqueta {text}" +# validation: +# trim: Por favor, elimina los espacios al inicio y al final +# common: +# buttons: +# save: Guardar +# close: Cerrar +# close_and_shortcut: Cerrar (Esc) +# delete: Borrar +# setting: Configuración +# confirm: Confirmar +# cancel: Cancelar +# cancel_and_shortcut: Cancelar (Esc) +# new: Nuevo +# edit: Editar +# back: Volver +# refresh: Actualizar +# publish: Publicar +# cancel_publish: Cancelar Publicación +# next: Siguiente +# previous: Anterior +# install: Instalar +# uninstall: Desinstalar +# upgrade: Actualizar +# reset: Reiniciar +# preview: Vista previa +# recovery: Recuperar +# delete_permanently: Borrar permanentemente +# active: Activar +# download: Descargar +# copy: Copiar +# upload: Subir +# add: Agregar +# submit: Enviar +# detail: Detalle +# radio: +# "yes": Sí +# "no": No +# select: +# public: Público +# private: Privado +# placeholder: +# search: Ingresa palabras clave para buscar +# toast: +# operation_success: Operación realizada con éxito +# delete_success: Eliminado exitosamente +# save_success: Guardado exitosamente +# publish_success: Publicado exitosamente +# cancel_publish_success: Publicación cancelada exitosamente +# recovery_success: Recuperado exitosamente +# uninstall_success: Desinstalado exitosamente +# active_success: Activado exitosamente +# inactive_success: Desactivado exitosamente +# upgrade_success: Actualizado exitosamente +# install_success: Instalado exitosamente +# download_success: Descargado exitosamente +# copy_success: Copiado exitosamente +# operation_failed: Fallo en la operación +# download_failed: Fallo en la descarga +# save_failed_and_retry: "Fallo al guardar, por favor intenta nuevamente" +# publish_failed_and_retry: "Fallo al publicar, por favor intenta nuevamente" +# network_error: "Error de red, por favor verifica tu conexión" +# login_expired: "Sesión expirada, por favor inicia sesión nuevamente" +# forbidden: Acceso denegado +# not_found: Recurso no encontrado +# server_internal_error: Error interno del servidor +# unknown_error: Error desconocido +# dialog: +# titles: +# tip: Consejo +# warning: Advertencia +# descriptions: +# cannot_be_recovered: Esta operación es irreversible. +# editor_not_found: No se encontró ningún editor que coincida con el formato {raw_type}. Por favor verifica si el complemento del editor ha sido instalado. +# filters: +# results: +# keyword: "Palabra clave: {keyword}" +# sort: "Ordenar: {sort}" +# status: "Estado: {status}" +# labels: +# sort: Ordenar +# status: Estado +# item_labels: +# all: Todo +# default: Por defecto +# status: +# deleting: Borrando +# loading: Cargando +# loading_error: Error al cargar +# activated: Activado +# not_activated: No activado +# installed: Instalado +# not_installed: No instalado +# text: +# none: Ninguno +# tip: Consejo +# warning: Advertencia +# tooltips: +# unpublished_content_tip: Hay contenido que ha sido guardado pero aún no ha sido publicado. +# publishing: Publicando +# recovering: Recuperando +# fields: +# post_count: "{count} Publicaciones" + core: - login: - title: Inicio de sesión - fields: - username: - placeholder: Usuario - password: - placeholder: Contraseña - operations: - submit: - toast_success: Inicio de sesión exitoso - toast_failed: Error en el inicio de sesión, nombre de usuario o contraseña incorrectos - toast_csrf: Token CSRF no válido, por favor inténtalo de nuevo - signup: - label: No tienes una cuenta - button: Registrarse ahora - return_login: - label: Ya tienes una cuenta - button: Iniciar sesión ahora - return_site: Volver a la página de inicio - button: Iniciar sesión - modal: - title: Volver a iniciar sesión - signup: - title: Registrarse - fields: - username: - placeholder: Nombre de usuario - display_name: - placeholder: Nombre para mostrar - password: - placeholder: Contraseña - password_confirm: - placeholder: Confirmar contraseña - operations: - submit: - button: Registrarse - toast_success: Registrado exitosamente - binding: - title: Vinculación de cuentas - common: - toast: - mounted: El método de inicio de sesión actual no está vinculado a una cuenta. Por favor, vincula o registra una nueva cuenta primero. - operations: - login_and_bind: - button: Iniciar sesión y vincular - signup_and_bind: - button: Registrarse y vincular - bind: - toast_success: Vinculación exitosa - toast_failed: Vinculación fallida, no se encontró ningún método de inicio de sesión habilitado. - sidebar: - search: - placeholder: Buscar - menu: - groups: - content: Contenido - interface: Interfaz - system: Sistema - tool: Herramienta - items: - dashboard: Panel de control - posts: Publicaciones - single_pages: Páginas - comments: Comentarios - attachments: Archivos adjuntos - themes: Temas - menus: Menús - plugins: Complementos - users: Usuarios - settings: Configuraciones - actuator: Actuador - backup: Respaldo - operations: - logout: - button: Cerrar sesión - title: ¿Estás seguro de que deseas cerrar sesión? - profile: - button: Perfil - visit_homepage: - title: Visitar página de inicio - dashboard: - title: Panel de control - actions: - setting: Configuración - done: Hecho - add_widget: Agregar Widget - widgets: - modal_title: Widgets - groups: - post: Publicación - page: Página - comment: Comentario - user: Usuario - other: Otros - presets: - post_stats: - title: Publicaciones - page_stats: - title: Páginas - recent_published: - title: Publicaciones Recientes - visits: "{visits} Visitas" - comments: "{comments} Comentarios" - quicklink: - title: Enlace Rápido - actions: - user_center: - title: Perfil de Usuario - view_site: - title: Ver Sitio - new_post: - title: Nueva Publicación - new_page: - title: Nueva Página - upload_attachment: - title: Subir Archivo Adjunto - theme_manage: - title: Administrar Temas - plugin_manage: - title: Administrar Complementos - new_user: - title: Nuevo Usuario - refresh_search_engine: - title: Actualizar Motor de Búsqueda - dialog_title: ¿Deseas actualizar el índice del motor de búsqueda? - dialog_content: Esta operación recreará los índices del motor de búsqueda para todas las publicaciones publicadas. - success_message: Índice del motor de búsqueda actualizado exitosamente. - evict_page_cache: - title: Actualizar Caché de Página - dialog_title: ¿Deseas actualizar el caché de las páginas? - dialog_content: Esta operación borrará la caché de todas las páginas. - success_message: Caché de página actualizada exitosamente. - user_stats: - title: Usuarios - comment_stats: - title: Comentarios - views_stats: - title: Visitas - post: - title: Publicaciones - actions: - categories: Categorías - tags: Etiquetas - recycle_bin: Papelera de reciclaje - empty: - title: No hay publicaciones actualmente. - message: Puedes intentar actualizar o crear una nueva publicación. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar esta publicación? - description: Esta operación moverá la publicación a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar las publicaciones seleccionadas? - description: Esta operación moverá las publicaciones a la papelera de reciclaje, y podrán ser restauradas desde la papelera de reciclaje posteriormente. - filters: - status: - items: - published: Publicado - draft: Borrador - visible: - label: Visible - result: "Visible: {visible}" - items: - public: Público - private: Privado - category: - label: Categoría - result: "Categoría: {category}" - tag: - label: Etiqueta - result: "Etiqueta: {tag}" - author: - label: Autor - result: "Autor: {author}" - sort: - items: - publish_time_desc: Publicado más reciente - publish_time_asc: Publicado más antiguo - create_time_desc: Creado más reciente - create_time_asc: Creado más antiguo - list: - fields: - categories: "Categorías:" - visits: "{visits} Visitas" - comments: "{comments} Comentarios" - pinned: Fijado - settings: - title: Configuraciones - groups: - general: General - advanced: Avanzado - annotations: Anotaciones - fields: - title: - label: Título - slug: - label: Slug - help: Usualmente usado para generar el enlace permanente a las publicaciones - refresh_message: Regenerar slug basado en el título. - categories: - label: Categorías - tags: - label: Etiquetas - auto_generate_excerpt: - label: Generar Extracto Automáticamente - raw_excerpt: - label: Extracto - allow_comment: - label: Permitir Comentarios - pinned: - label: Fijado - visible: - label: Visible - publish_time: - label: Hora de Publicación - template: - label: Plantilla - cover: - label: Portada - deleted_post: - title: Publicaciones eliminadas - empty: - title: No se han colocado publicaciones en la papelera de reciclaje. - message: Puedes intentar actualizar o volver a la página anterior. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar permanentemente esta publicación? - description: Después de la eliminación, no será posible recuperarla. - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar permanentemente las publicaciones seleccionadas? - description: Después de la eliminación, no será posible recuperarlas. - recovery: - title: ¿Quieres restaurar esta publicación? - description: Esta operación restaurará la publicación a su estado antes de la eliminación. - recovery_in_batch: - title: ¿Estás seguro de que deseas restaurar las publicaciones seleccionadas? - description: Esta operación restaurará las publicaciones a su estado antes de la eliminación. - post_editor: - title: Edición de publicación - untitled: Publicación sin título - post_tag: - title: Etiquetas de publicación - header: - title: "{count} Etiquetas" - empty: - title: No hay etiquetas actualmente. - message: Puedes intentar actualizar o crear una nueva etiqueta. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar esta etiqueta? - description: Después de eliminar esta etiqueta, se eliminará la asociación con el artículo correspondiente. Esta operación no se puede deshacer. - editing_modal: - titles: - update: Actualizar etiqueta de publicación - create: Crear etiqueta de publicación - groups: - general: General - annotations: Anotaciones - fields: - display_name: - label: Nombre para mostrar - slug: - label: Slug - help: Usualmente utilizado para generar el enlace permanente de las etiquetas - refresh_message: Regenerar slug basado en el nombre para mostrar. - color: - label: Color - help: Se requiere adaptación del tema para ser compatible - cover: - label: Portada - help: Se requiere adaptación del tema para ser compatible - post_category: - title: Categorías de publicación - header: - title: "{count} Categorías" - empty: - title: No hay categorías actualmente. - message: Puedes intentar actualizar o crear una nueva categoría. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar esta categoría? - description: Después de eliminar esta categoría, se eliminará la asociación con los artículos correspondientes. Esta operación no se puede deshacer. - add_sub_category: - button: Agregar subcategoría - editing_modal: - titles: - update: Actualizar categoría de publicación - create: Crear categoría de publicación - groups: - general: General - annotations: Anotaciones - fields: - parent: - label: Padre - display_name: - label: Nombre para mostrar - slug: - label: Slug - help: Usualmente utilizado para generar el enlace permanente de las categorías - refresh_message: Regenerar slug basado en el nombre para mostrar. - template: - label: Plantilla personalizada - cover: - label: Portada - help: Se requiere adaptación del tema para ser compatible - description: - label: Descripción - help: Se requiere adaptación del tema para ser compatible - page: - title: Páginas - actions: - recycle_bin: Papelera de reciclaje - empty: - title: No hay páginas actualmente. - message: Puedes intentar actualizar o crear una nueva página. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar esta página? - description: Esta operación moverá la página a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar las páginas seleccionadas? - description: Esta operación moverá las páginas a la papelera de reciclaje, y podrá ser restaurada desde la papelera de reciclaje posteriormente. - filters: - status: - items: - published: Publicado - draft: Borrador - visible: - label: Visible - result: "Visible: {visible}" - items: - public: Público - private: Privado - author: - label: Autor - result: "Autor: {author}" - sort: - items: - publish_time_desc: Publicado más reciente - publish_time_asc: Publicado más antiguo - create_time_desc: Creado más reciente - create_time_asc: Creado más antiguo - list: - fields: - visits: "{visits} Visitas" - comments: "{comments} Comentarios" - settings: - title: Configuraciones - groups: - general: General - advanced: Avanzado - annotations: Anotaciones - fields: - title: - label: Título - slug: - label: Slug - help: Usualmente utilizado para generar el enlace permanente de las páginas - refresh_message: Regenerar slug basado en el título. - auto_generate_excerpt: - label: Generar Extracto Automáticamente - raw_excerpt: - label: Extracto - allow_comment: - label: Permitir Comentarios - pinned: - label: Fijado - visible: - label: Visible - publish_time: - label: Hora de Publicación - template: - label: Plantilla - cover: - label: Portada - deleted_page: - title: Páginas Eliminadas - empty: - title: No hay páginas en la papelera de reciclaje. - message: Puedes intentar actualizar o volver a la página anterior. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar permanentemente esta página? - description: Después de la eliminación, no será posible recuperarla. - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar permanentemente las páginas seleccionadas? - description: Después de la eliminación, no será posible recuperarlas. - recovery: - title: ¿Quieres restaurar esta página? - description: Esta operación restaurará la página a su estado antes de la eliminación. - recovery_in_batch: - title: ¿Estás seguro de que deseas restaurar las páginas seleccionadas? - description: Esta operación restaurará las páginas a su estado antes de la eliminación. - page_editor: - title: Edición de Página - untitled: Página Sin Título - comment: - title: Comentarios - empty: - title: No hay comentarios actualmente. - message: Puedes intentar actualizar o modificar los criterios de filtrado. - reply_empty: - title: No hay respuestas actualmente. - message: Puedes intentar actualizar o crear una nueva respuesta. - new: Nueva Respuesta - operations: - delete_comment: - title: ¿Estás seguro de que deseas eliminar este comentario? - description: Todas las respuestas bajo los comentarios se eliminarán al mismo tiempo, y esta operación no se puede deshacer. - delete_comment_in_batch: - title: ¿Estás seguro de que deseas eliminar los comentarios seleccionados? - description: Todas las respuestas bajo los comentarios se eliminarán al mismo tiempo, y esta operación no se puede deshacer. - approve_comment_in_batch: - button: Aprobar - title: ¿Estás seguro de que deseas aprobar los comentarios seleccionados para su revisión? - approve_applies_in_batch: - button: Aprobar todas las respuestas - title: ¿Estás seguro de que deseas aprobar todas las respuestas a este comentario para su revisión? - delete_reply: - title: ¿Estás seguro de que deseas eliminar esta respuesta? - approve_reply: - button: Aprobar - reply: - button: Responder - filters: - status: - items: - approved: Aprobado - pending_review: Pendiente de Revisión - owner: - label: Propietario - result: "Propietario: {owner}" - sort: - items: - last_reply_time_desc: Respuesta Reciente - last_reply_time_asc: Respuesta Antigua - reply_count_desc: Más Respuestas - reply_count_asc: Menos Respuestas - create_time_desc: Creado más reciente - create_time_asc: Creado más antiguo - list: - fields: - reply_count: "{count} Respuestas" - has_new_replies: Nuevas respuestas - pending_review: Pendiente de revisión - subject_refs: - post: Publicación - page: Página - unknown: Desconocido - reply_modal: - title: Respuesta - fields: - content: - label: Contenido - operations: - submit: - toast_success: Respuesta enviada exitosamente - attachment: - title: Adjuntos - common: - text: - ungrouped: Sin grupo - actions: - storage_policies: Políticas de Almacenamiento - empty: - title: No hay adjuntos en el grupo actual. - message: El grupo actual no tiene adjuntos, puedes intentar actualizar o cargar adjuntos. - actions: - upload: Cargar Adjunto - operations: - delete: - title: ¿Estás seguro de que deseas eliminar este adjunto? - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar los adjuntos seleccionados? - deselect_items: - button: Deseleccionar ítems - move: - button: Mover - toast_success: Movimiento exitoso - filters: - storage_policy: - label: Política de Almacenamiento - result: "Política de Almacenamiento: {storage_policy}" - owner: - label: Propietario - result: "Propietario: {owner}" - sort: - items: - create_time_desc: Cargado más reciente - create_time_asc: Cargado más antiguo - size_desc: Ordenar por tamaño descendente - size_asc: Ordenar por tamaño ascendente - view_type: - items: - grid: Modo Cuadrícula - list: Modo Lista - detail_modal: - title: "Adjunto: {display_name}" - fields: - preview: Vista Previa - storage_policy: Política de Almacenamiento - group: Grupo - display_name: Nombre para Mostrar - media_type: Tipo de Medio - size: Tamaño - owner: Propietario - creation_time: Hora de Creación - permalink: Enlace Permanente - preview: - click_to_exit: Haz clic para salir de la vista previa - video_not_support: El navegador actual no admite la reproducción de video. - audio_not_support: El navegador actual no admite la reproducción de audio. - not_support: Este archivo no admite la vista previa. - group_editing_modal: - titles: - create: Crear grupo de adjuntos - update: Actualizar grupo de adjuntos - fields: - display_name: - label: Nombre para Mostrar - group_list: - internal_groups: - all: Todo - operations: - rename: - button: Cambiar nombre - delete: - button: Y mover adjunto a sin grupo - title: ¿Estás seguro de que deseas eliminar este grupo? - description: El grupo se eliminará, y los adjuntos bajo el grupo se moverán a sin grupo. Esta operación no se puede deshacer. - toast_success: Eliminación exitosa, {total} adjuntos se han movido a sin grupo - delete_with_attachments: - button: También eliminar adjuntos - title: ¿Estás seguro de que deseas eliminar este grupo? - description: Al eliminar el grupo y todos los adjuntos dentro de él, esta acción no se puede deshacer. - toast_success: Eliminación exitosa, {total} adjuntos se han eliminado simultáneamente - policies_modal: - title: Políticas de Almacenamiento - empty: - title: Actualmente no hay estrategias de almacenamiento disponibles. - message: No hay políticas de almacenamiento disponibles en este momento. Puedes intentar actualizar o crear una nueva política. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar esta política? - description: No hay adjuntos cargados bajo la política actual. - can_not_delete: - title: Fallo en la eliminación - description: Hay adjuntos bajo esta política, que no se pueden eliminar. - policy_editing_modal: - titles: - create: "Nueva política: {policy_template}" - update: "Editar política: {policy}" - fields: - display_name: - label: Nombre para Mostrar - upload_modal: - title: Cargar adjunto - filters: - group: - label: "Seleccionar grupo:" - policy: - label: "Seleccionar política de almacenamiento:" - empty: - title: Sin política de almacenamiento - description: Antes de cargar, es necesario crear una nueva política de almacenamiento. - not_select: Por favor, selecciona una política de almacenamiento primero - select_modal: - title: Seleccionar adjunto - providers: - default: - label: Adjuntos - operations: - select: - result: "({count} elementos seleccionados)" - theme: - title: Temas - common: - buttons: - install: Instalar Tema - tabs: - detail: Detalles - actions: - management: Gestión de Temas - empty: - title: No hay temas activados o seleccionados actualmente. - message: Puedes cambiar de tema o instalar nuevos. - actions: - switch: Cambiar de Tema - operations: - active: - title: ¿Estás seguro de activar el tema actual? - toast_success: Tema activado exitosamente - reset: - title: ¿Estás seguro de que deseas restablecer todas las configuraciones del tema? - description: Esta operación eliminará la configuración guardada y la restablecerá a los ajustes predeterminados. - toast_success: Configuración restablecida exitosamente - reload: - button: Recargar - title: ¿Estás seguro de que deseas recargar todas las configuraciones del tema? - description: Esta operación solo recargará la configuración del tema y la definición del formulario de ajustes, y no eliminará ninguna configuración guardada. - toast_success: Recarga de configuración exitosa - uninstall: - title: ¿Estás seguro de que deseas desinstalar este tema? - uninstall_and_delete_config: - button: Desinstalar y eliminar configuración - title: ¿Estás seguro de que deseas desinstalar este tema y su configuración correspondiente? - remote_download: - title: Se ha detectado una dirección de descarga remota, ¿deseas descargar? - description: "Por favor, verifica cuidadosamente si esta dirección es confiable: {url}" - upload_modal: - titles: - install: Instalar tema - upgrade: Actualizar tema ({display_name}) - operations: - existed_during_installation: - title: El tema ya existe. - description: El tema instalado actualmente ya existe, deseas actualizarlo? - tabs: - local: Local - remote: - title: Remoto - fields: - url: URL Remota - list_modal: - titles: - installed_themes: Temas Instalados - not_installed_themes: Temas no Instalados - tabs: - installed: Instalados - not_installed: No Instalados - empty: - title: No hay temas instalados actualmente. - message: No hay temas instalados actualmente, puedes intentar actualizar o instalar un nuevo tema. - not_installed_empty: - title: No hay temas actualmente no instalados. - preview_model: - title: "Vista Previa del Tema: {display_name}" - actions: - switch: Cambiar de tema - setting: Ajustes - open: Abrir - detail: - fields: - author: Autor - website: Sitio Web - repo: Repositorio Fuente - version: Versión - requires: Requiere - storage_location: Ubicación de Almacenamiento - plugin_requires: Requiere Plugin - settings: - title: Ajustes del Tema - custom_templates: - default: Predeterminado - menu: - title: Menús - empty: - title: Actualmente no hay menús. - message: Puedes intentar actualizar o crear un nuevo menú. - menu_item_empty: - title: Actualmente no hay elementos de menú. - message: Puedes intentar actualizar o crear un nuevo elemento de menú. - operations: - set_primary: - button: Establecer como menú principal - toast_success: Configuración exitosa - delete_menu: - title: "¿Estás seguro de que deseas eliminar este menú?" - description: Todos los elementos de menú de este menú se eliminarán al mismo tiempo y esta operación no se puede deshacer. - delete_menu_item: - title: "¿Estás seguro de que deseas eliminar este elemento de menú?" - description: Todos los subelementos de menú se eliminarán al mismo tiempo y no se pueden restaurar después de la eliminación. - add_sub_menu_item: - button: Agregar subelemento de menú - list: - fields: - primary: Principal - items_count: "{count} elementos" - menu_editing_modal: - titles: - create: Crear menú - update: Actualizar menú - fields: - display_name: - label: Nombre para mostrar - menu_item_editing_modal: - titles: - create: Crear elemento de menú - update: Actualizar elemento de menú - groups: - general: General - annotations: Anotaciones - fields: - parent: - label: Padre - placeholder: Selecciona el elemento de menú padre - ref_kind: - label: Tipo - placeholder: "Por favor selecciona {label}" - options: - custom: Personalizado - post: Publicación - single_page: Página - category: Categoría - tag: Etiqueta - display_name: - label: Nombre para mostrar - href: - label: Dirección del enlace - target: - label: Destino - options: - self: _self - blank: _blank - parent: _parent - top: _top - plugin: - title: Plugins - tabs: - detail: Detail - empty: - title: There are no installed plugins currently. - message: There are no installed plugins currently, you can try refreshing or installing new plugins. - actions: - install: Install Plugin - operations: - reset: - title: Are you sure you want to reset all configurations of the plugin? - description: This operation will delete the saved configuration and reset it to default settings. - toast_success: Reset configuration successfully - uninstall: - title: Are you sure you want to uninstall this plugin? - uninstall_and_delete_config: - title: Are you sure you want to uninstall this plugin and its corresponding configuration? - uninstall_when_enabled: - confirm_text: Stop running and uninstall - description: The current plugin is still in the enabled state and will be uninstalled after it stops running. This operation cannot be undone. - change_status: - active_title: Are you sure you want to active this plugin? - inactive_title: Are you sure you want to inactive this plugin? - remote_download: - title: Remote download address detected, do you want to download? - description: "Please carefully verify whether this address can be trusted: {url}" - filters: - status: - items: - active: Active - inactive: Inactive - sort: - items: - create_time_desc: Latest Installed - create_time_asc: Earliest Installed - list: - actions: - uninstall_and_delete_config: Uninstall and delete config - upload_modal: - titles: - install: Install plugin - upgrade: Upgrade plugin ({display_name}) - tabs: - local: Local - remote: - title: Remote - fields: - url: Remote URL - operations: - active_after_install: - title: Install successful - description: Would you like to activate the currently installed plugin? - existed_during_installation: - title: The plugin already exists. - description: The currently installed plugin already exists, do you want to upgrade? - detail: - title: Plugin detail - header: - title: Plugin information - fields: - display_name: Display Name - description: Description - version: Version - requires: Requires - author: Author - license: License - role_templates: Role Templates - last_starttime: Last Start Time - loader: - toast: - entry_load_failed: "{name}: Failed to load plugin entry file" - style_load_failed: "{name}: Failed to load plugin stylesheet file" - extension_points: - editor: - providers: - default: Default Editor - user: - title: Usuarios - actions: - roles: Roles - identity_authentication: Autenticación de Identidad - empty: - title: Actualmente no hay usuarios que cumplan con los criterios de filtrado. - message: No hay usuarios que coincidan con los criterios de filtrado en este momento. Puedes intentar actualizar o crear un nuevo usuario. - operations: - delete: - title: ¿Estás seguro de que deseas eliminar a este usuario? - delete_in_batch: - title: ¿Estás seguro de que deseas eliminar a los usuarios seleccionados? - update_profile: - title: Actualizar perfil - change_password: - title: Cambiar contraseña - grant_permission: - title: Conceder permiso - filters: - role: - label: Rol - result: "Rol: {role}" - sort: - items: - create_time_desc: Últimos creados - create_time_asc: Más antiguos creados - editing_modal: - titles: - update: Editar usuario - create: Crear usuario - groups: - general: General - annotations: Anotaciones - fields: - username: - label: Nombre de usuario - validation: Por favor, introduce un nombre de usuario válido. - display_name: - label: Nombre para mostrar - email: - label: Correo electrónico - phone: - label: Teléfono - avatar: - label: Avatar - bio: - label: Biografía - change_password_modal: - title: Cambiar contraseña - fields: - new_password: - label: Nueva contraseña - confirm_password: - label: Confirmar contraseña - grant_permission_modal: - title: Conceder permiso - fields: - role: - label: Rol - placeholder: Por favor, selecciona un rol - detail: - title: Detalles del usuario - tabs: - detail: Detalle - actions: - update_profile: - title: Actualizar perfil - change_password: - title: Cambiar contraseña - operations: - bind: - button: Vincular - unbind: - button: Desvincular - title: ¿Estás seguro de que deseas desvincular el método de inicio de sesión para {display_name}? - fields: - display_name: Nombre para mostrar - username: Nombre de usuario - email: Correo electrónico - roles: Roles - bio: Biografía - creation_time: Fecha de creación - identity_authentication: Autenticación de identidad - avatar: - title: Avatar - toast_upload_failed: No se pudo cargar el avatar - toast_remove_failed: No se pudo eliminar el avatar - cropper_modal: - title: Recortar Avatar - remove: - title: ¿Estás seguro de que deseas eliminar el avatar? - tooltips: - upload: Cargar - zoom_in: Acercar - zoom_out: Alejar - flip_horizontal: Voltear Horizontalmente - flip_vertical: Voltear Verticalmente - reset: Restablecer - role: - title: Roles - common: - text: - contains_all_permissions: Contiene todos los permisos - contains_n_permissions: Contiene {count} permisos - system_reserved: Reservado del Sistema - custom: Personalizado - dependent_on: Dependiente de {roles} - provided_by_plugin: Proporcionado por {plugin} - operations: - delete: - title: ¿Estás seguro de que deseas eliminar este rol? - description: Una vez eliminado el rol, se eliminarán las asignaciones de rol de los usuarios asociados y esta operación no se puede deshacer. - create_based_on_this_role: - button: Crear basado en este rol - detail: - title: Detalle del rol - header: - title: Información del rol - tabs: - detail: Detalle - permissions: Permisos - fields: - display_name: Nombre para mostrar - name: Nombre - type: Tipo - creation_time: Fecha de creación - permissions_detail: - system_reserved_alert: - description: El rol reservado del sistema no admite modificaciones. Se recomienda crear un nuevo rol basado en este. - editing_modal: - titles: - create: Crear rol - update: Actualizar rol - groups: - general: General - permissions: Permisos - fields: - display_name: Nombre para mostrar - identity_authentication: - title: Autenticación de Identidad - tabs: - detail: Detalle - setting: Configuración - operations: - enable: - title: ¿Estás seguro de que deseas habilitar este método de autenticación de identidad? - disable: - title: ¿Estás seguro de que deseas deshabilitar este método de autenticación de identidad? - disable_privileged: - tooltip: El método de autenticación reservado por el sistema no se puede deshabilitar - detail: - title: Detalle de la autenticación de identidad - fields: - display_name: Nombre para mostrar - description: Descripción - website: Sitio web - help_page: Página de ayuda - authentication_url: URL de inicio de sesión - setting: - title: Configuraciones - actuator: - title: Actuador - actions: - copy: - toast_browser_not_supported: El navegador actual no admite la función de copiado - header: - titles: - general: Información general - environment: Información del entorno - fields: - external_url: URL externa - start_time: Hora de inicio - timezone: Zona horaria - locale: Idioma - version: Versión - build_time: Fecha de compilación - database: Base de datos - os: Sistema operativo - log: Registro del sistema - fields_values: - external_url: - not_setup: No configurado - copy_results: - external_url: "URL externa: {external_url}" - start_time: "Hora de inicio: {start_time}" - version: "Versión: {version}" - build_time: "Fecha de compilación: {build_time}" - database: "Base de datos: {database}" - os: "Sistema operativo: {os}" - alert: - external_url_invalid: La URL de acceso externo detectada no coincide con la URL de acceso actual, lo que podría causar que algunos enlaces no se redirijan correctamente. Por favor, verifica la configuración de la URL de acceso externo. - backup: - title: Copia de Seguridad y Restauración - tabs: - backup_list: Copias de Seguridad - restore: Restaurar - empty: - title: Aún no se han creado copias de seguridad - message: Puedes hacer clic en el botón debajo para crear una copia de seguridad - operations: - create: - button: Crear copia de seguridad - title: Crear copia de seguridad - description: ¿Estás seguro de que deseas crear una copia de seguridad? Esta operación puede tomar un tiempo. - toast_success: Solicitud de creación de copia de seguridad realizada - delete: - title: Eliminar copia de seguridad - description: ¿Estás seguro de que deseas eliminar esta copia de seguridad? - restore: - title: Restauración exitosa - description: Después de una restauración exitosa, necesitas reiniciar Halo para cargar los recursos del sistema normalmente. Después de hacer clic en OK, reiniciaremos automáticamente Halo. - restart: - toast_success: Solicitud de reinicio realizada - list: - phases: - pending: Pendiente - running: En Progreso - succeeded: Exitosa - failed: Fallida - fields: - expiresAt: Expira el {expiresAt} - restore: - tips: - first: 1. El proceso de restauración puede tomar un tiempo, por favor no actualices la página durante este período. - second: 2. Durante el proceso de restauración, aunque los datos existentes no se eliminarán, si hay un conflicto, los datos se sobrescribirán. - third: 3. Después de completar la restauración, necesitas reiniciar Halo para cargar los recursos del sistema normalmente. - complete: Restauración completada, esperando reinicio... - start: Iniciar Restauración - exception: - not_found: - message: Página no encontrada - forbidden: - message: Acceso no autorizado a esta página - actions: - home: Ir a la página de inicio - setup: - title: Configuración - operations: - submit: - button: Configurar - toast_success: Configuración exitosa - setup_initial_data: - loading: Inicializando datos, por favor espera... - fields: - site_title: - label: Título del Sitio - email: - label: Correo Electrónico - username: - label: Nombre de Usuario - password: - label: Contraseña - confirm_password: - label: Confirmar Contraseña - rbac: - Attachments Management: Gestión de archivos adjuntos - Attachment Manage: Gestor de adjuntos - Attachment View: Vista de adjuntos - role-template-view-attachments: Vista de adjuntos - Comments Management: Comentarios - Comment Manage: Gestor de comentarios - Comment View: Vista de comentarios - role-template-view-comments: Vista de comentarios - ConfigMaps Management: ConfigMaps - ConfigMap Manage: Gestor de ConfigMaps - ConfigMap View: Vista de ConfigMaps - role-template-view-configmaps: Vista de ConfigMaps - Menus Management: Menús - Menu Manage: Gestor de menús - Menu View: Vista de menús - role-template-view-menus: Vista de menús - Permissions Management: Permisos - Permissions Manage: Gestor de permisos - Permissions View: Vista de permisos - role-template-view-permissions: Vista de permisos - role-template-manage-permissions: Gestor de permisos - Plugins Management: Plugins - Plugin Manage: Gestor de plugins - Plugin View: Vista de plugins - role-template-view-plugins: Vista de plugins - Posts Management: Publicaciones - Post Manage: Gestor de publicaciones - Post View: Vista de publicaciones - role-template-view-posts: Vista de publicaciones - role-template-manage-snapshots: Gestor de snapshots - role-template-view-snapshots: Vista de snapshots - role-template-manage-tags: Gestor de etiquetas - role-template-view-tags: Vista de etiquetas - role-template-manage-categories: Gestor de categorías - role-template-view-categories: Vista de categorías - Roles Management: Roles - Role Manage: Gestor de roles - Role View: Vista de roles - role-template-view-roles: Vista de roles - Settings Management: Configuración - Setting Manage: Gestor de configuración - Setting View: Vista de configuración - role-template-view-settings: Vista de configuración - SinglePages Management: SinglePages - SinglePage Manage: Gestor de SinglePages - SinglePage View: Vista de SinglePages - role-template-view-singlepages: Vista de SinglePages - Themes Management: Temas - Theme Manage: Gestor de temas - Theme View: Vista de temas - role-template-view-themes: Vista de temas - Users Management: Usuarios - User manage: Gestor de usuarios - User View: Vista de usuarios - Migration Management: Copia de seguridad y restauración - Migration Manage: Gestor de copia de seguridad y restauración - role-template-view-users: Vista de usuarios - role-template-change-password: Cambiar contraseña - components: - submit_button: - computed_text: "{text} ({shortcut})" - annotations_form: - custom_fields: - label: Personalizado - validation: La clave actual ya está en uso - default_editor: - tabs: - toc: - title: Índice - empty: No hay índice disponible - detail: - title: Detalle - fields: - character_count: Conteo de caracteres - word_count: Conteo de palabras - publish_time: Hora de publicación - draft: Borrador - owner: Propietario - permalink: Enlace permanente - extensions: - placeholder: - options: - placeholder: "Ingresa / para seleccionar el tipo de entrada." - toolbox: - attachment: Adjunto - global_search: - placeholder: Ingresa palabras clave para buscar - no_results: Sin resultados de búsqueda - buttons: - select: Seleccionar - groups: - console: Página de la consola - user: Usuario - plugin: Plugin - post: Publicación - category: Categoría - tag: Etiqueta - page: Página - attachment: Adjunto - setting: Configuración - theme_setting: Configuración del tema - pagination: - page_label: página - size_label: elementos por página - total_label: Total de {total} elementos - social_auth_providers: - title: Inicio de sesión de terceros - app_download_alert: - description: "Los temas y complementos para Halo se pueden descargar en las siguientes direcciones:" - sources: - app_store: "Tienda de aplicaciones oficial: {url}" - github: "GitHub: {url}" - composables: - content_cache: - toast_recovered: Contenido no guardado recuperado de la caché - formkit: - category_select: - creation_label: "Crear categoría {text}" - tag_select: - creation_label: "Crear etiqueta {text}" - validation: - trim: Por favor, elimina los espacios al inicio y al final - common: - buttons: - save: Guardar - close: Cerrar - close_and_shortcut: Cerrar (Esc) - delete: Borrar - setting: Configuración - confirm: Confirmar - cancel: Cancelar - cancel_and_shortcut: Cancelar (Esc) - new: Nuevo - edit: Editar - back: Volver - refresh: Actualizar - publish: Publicar - cancel_publish: Cancelar Publicación - next: Siguiente - previous: Anterior - install: Instalar - uninstall: Desinstalar - upgrade: Actualizar - reset: Reiniciar - preview: Vista previa - recovery: Recuperar - delete_permanently: Borrar permanentemente - active: Activar - download: Descargar - copy: Copiar - upload: Subir - add: Agregar - submit: Enviar - detail: Detalle - radio: - "yes": Sí - "no": No - select: - public: Público - private: Privado - placeholder: - search: Ingresa palabras clave para buscar - toast: - operation_success: Operación realizada con éxito - delete_success: Eliminado exitosamente - save_success: Guardado exitosamente - publish_success: Publicado exitosamente - cancel_publish_success: Publicación cancelada exitosamente - recovery_success: Recuperado exitosamente - uninstall_success: Desinstalado exitosamente - active_success: Activado exitosamente - inactive_success: Desactivado exitosamente - upgrade_success: Actualizado exitosamente - install_success: Instalado exitosamente - download_success: Descargado exitosamente - copy_success: Copiado exitosamente - operation_failed: Fallo en la operación - download_failed: Fallo en la descarga - save_failed_and_retry: "Fallo al guardar, por favor intenta nuevamente" - publish_failed_and_retry: "Fallo al publicar, por favor intenta nuevamente" - network_error: "Error de red, por favor verifica tu conexión" - login_expired: "Sesión expirada, por favor inicia sesión nuevamente" - forbidden: Acceso denegado - not_found: Recurso no encontrado - server_internal_error: Error interno del servidor - unknown_error: Error desconocido - dialog: - titles: - tip: Consejo - warning: Advertencia - descriptions: - cannot_be_recovered: Esta operación es irreversible. - editor_not_found: No se encontró ningún editor que coincida con el formato {raw_type}. Por favor verifica si el complemento del editor ha sido instalado. - filters: - results: - keyword: "Palabra clave: {keyword}" - sort: "Ordenar: {sort}" - status: "Estado: {status}" - labels: - sort: Ordenar - status: Estado - item_labels: - all: Todo - default: Por defecto - status: - deleting: Borrando - loading: Cargando - loading_error: Error al cargar - activated: Activado - not_activated: No activado - installed: Instalado - not_installed: No instalado - text: - none: Ninguno - tip: Consejo - warning: Advertencia - tooltips: - unpublished_content_tip: Hay contenido que ha sido guardado pero aún no ha sido publicado. - publishing: Publicando - recovering: Recuperando - fields: - post_count: "{count} Publicaciones" diff --git a/console/src/locales/zh-CN.yaml b/console/src/locales/zh-CN.yaml index 341857cb54..300d5d0c14 100644 --- a/console/src/locales/zh-CN.yaml +++ b/console/src/locales/zh-CN.yaml @@ -75,12 +75,21 @@ core: backup: 备份 operations: logout: - button: 退出登录 + tooltip: 退出登录 title: 确定要退出登录吗? profile: - button: 个人资料 + tooltip: 个人中心 visit_homepage: title: 访问首页 + uc_sidebar: + menu: + items: + profile: 我的 + notification: 消息 + posts: 文章 + operations: + console: + tooltip: 管理控制台 dashboard: title: 仪表板 actions: @@ -102,9 +111,13 @@ core: title: 页面 recent_published: title: 最近文章 - visits: "访问量 {visits}" - comments: "评论 {comments}" - publishTime: "发布日期 {publishTime}" + visits: 访问量 {visits} + comments: 评论 {comments} + publishTime: 发布日期 {publishTime} + notification: + title: 通知 + empty: + title: 当前没有未读的消息 quicklink: title: 快捷访问 actions: @@ -163,19 +176,19 @@ core: draft: 未发布 visible: label: 可见性 - result: "可见性:{visible}" + result: 可见性:{visible} items: public: 公开 private: 私有 category: label: 分类 - result: "分类:{category}" + result: 分类:{category} tag: label: 标签 - result: "标签:{tag}" + result: 标签:{tag} author: label: 作者 - result: "作者:{author}" + result: 作者:{author} sort: items: publish_time_desc: 较近发布 @@ -185,8 +198,8 @@ core: list: fields: categories: 分类: - visits: "访问量 {visits}" - comments: "评论 {comments}" + visits: 访问量 {visits} + comments: 评论 {comments} pinned: 已置顶 settings: title: 文章设置 @@ -239,6 +252,18 @@ core: recovery_in_batch: title: 确定要恢复选中的文章吗? description: 该操作会将文章恢复到被删除之前的状态。 + uc_post: + title: 我的文章 + setting_modal: + title: 文章设置 + creation_modal: + title: 创建文章 + publish_modal: + title: 发布文章 + operations: + cancel_publish: + title: 取消发布 + description: 确定要取消发布吗? post_editor: title: 文章编辑 untitled: 未命名文章 @@ -331,13 +356,13 @@ core: draft: 未发布 visible: label: 可见性 - result: "可见性:{visible}" + result: 可见性:{visible} items: public: 公开 private: 私有 author: label: 作者 - result: "作者:{author}" + result: 作者:{author} sort: items: publish_time_desc: 较近发布 @@ -346,8 +371,8 @@ core: create_time_asc: 较早创建 list: fields: - visits: "访问量 {visits}" - comments: "评论 {comments}" + visits: 访问量 {visits} + comments: 评论 {comments} settings: title: 页面设置 groups: @@ -433,7 +458,7 @@ core: pending_review: 待审核 owner: label: 评论者 - result: "评论者:{owner}" + result: 评论者:{owner} sort: items: last_reply_time_desc: 较近回复 @@ -484,10 +509,10 @@ core: filters: storage_policy: label: 存储策略 - result: "存储策略:{storage_policy}" + result: 存储策略:{storage_policy} owner: label: 上传者 - result: "上传者:{owner}" + result: 上传者:{owner} sort: items: create_time_desc: 较近上传 @@ -691,7 +716,7 @@ core: placeholder: 选择上级菜单项 ref_kind: label: 类型 - placeholder: "请选择{label}" + placeholder: 请选择{label} options: custom: 自定义链接 post: 文章 @@ -783,8 +808,8 @@ core: last_starttime: 最近一次启动 loader: toast: - entry_load_failed: "加载插件入口文件失败" - style_load_failed: "加载插件样式文件失败" + entry_load_failed: 加载插件入口文件失败 + style_load_failed: 加载插件样式文件失败 extension_points: editor: providers: @@ -854,19 +879,13 @@ core: title: 用户详情 tabs: detail: 详情 - notification-preferences: 通知配置 - pat: 个人令牌 actions: update_profile: title: 修改资料 change_password: title: 修改密码 - operations: - bind: - button: 绑定 - unbind: - button: 解绑 - title: "确定要取消绑定 {display_name} 的登录方式吗?" + profile: + title: 个人中心 fields: display_name: 显示名称 username: 用户名 @@ -875,64 +894,6 @@ core: bio: 描述 creation_time: 注册时间 identity_authentication: 登录方式 - avatar: - title: 头像 - toast_upload_failed: 上传头像失败 - toast_remove_failed: 删除头像失败 - cropper_modal: - title: 裁剪头像 - remove: - title: 确定要删除头像吗? - tooltips: - upload: 上传 - zoom_in: 放大 - zoom_out: 缩小 - flip_horizontal: 水平翻转 - flip_vertical: 垂直翻转 - reset: 重置 - pat: - operations: - delete: - title: 删除个人令牌 - description: 确定要删除该个人令牌吗? - revoke: - button: 撤销 - title: 撤销个人令牌 - description: 确定要撤销该个人令牌吗? - toast_success: 撤销成功 - copy: - title: 请立即复制并保存,Token 将仅显示一次。 - restore: - button: 恢复 - toast_success: 恢复成功 - list: - empty: - title: 当前没有创建个人令牌 - message: 你可以尝试刷新或者新建个人令牌 - fields: - expiresAt: - dynamic: "{expiresAt}失效" - forever: 永久有效 - status: - normal: 正常 - revoked: 已撤销 - expired: 已过期 - creation_modal: - title: 创建个人令牌 - groups: - general: 基本信息 - permissions: 权限 - fields: - name: - label: 名称 - expiresAt: - label: 过期时间 - help: 不设置代表永不过期 - description: - label: 描述 - notification-preferences: - fields: - type: 通知类型 role: title: 角色 common: @@ -973,6 +934,7 @@ core: permissions: 权限 fields: display_name: 名称 + redirect_on_login: 登录之后默认跳转位置 identity_authentication: title: 身份认证 tabs: @@ -993,7 +955,129 @@ core: website: 网站 help_page: 帮助页面 authentication_url: 登录入口 - notification: + uc_profile: + title: 我的 + tabs: + detail: 详情 + notification-preferences: 通知配置 + pat: 个人令牌 + actions: + update_profile: + title: 修改资料 + change_password: + title: 修改密码 + detail: + fields: + display_name: 显示名称 + username: 用户名 + email: 电子邮箱 + roles: 角色 + bio: 描述 + creation_time: 注册时间 + identity_authentication: 登录方式 + operations: + bind: + button: 绑定 + unbind: + button: 解绑 + title: 确定要取消绑定 {display_name} 的登录方式吗? + email_not_set: + title: 设置电子邮箱 + description: 电子邮箱地址还未设置,点击下方按钮进行设置 + email_not_verified: + title: 验证电子邮箱 + description: 电子邮箱地址还未验证,点击下方按钮进行验证 + pat: + operations: + delete: + title: 删除个人令牌 + description: 确定要删除该个人令牌吗? + revoke: + button: 撤销 + title: 撤销个人令牌 + description: 确定要撤销该个人令牌吗? + toast_success: 撤销成功 + copy: + title: 请立即复制并保存,Token 将仅显示一次。 + restore: + button: 恢复 + toast_success: 恢复成功 + list: + empty: + title: 当前没有创建个人令牌 + message: 你可以尝试刷新或者新建个人令牌 + fields: + expiresAt: + dynamic: "{expiresAt}失效" + forever: 永久有效 + status: + normal: 正常 + revoked: 已撤销 + expired: 已过期 + creation_modal: + title: 创建个人令牌 + groups: + general: 基本信息 + permissions: 权限 + fields: + name: + label: 名称 + expiresAt: + label: 过期时间 + help: 不设置代表永不过期 + description: + label: 描述 + notification-preferences: + fields: + type: 通知类型 + editing_modal: + title: 编辑资料 + groups: + general: 常规 + annotations: 元数据 + fields: + username: + label: 用户名 + validation: 请输入有效的用户名 + display_name: + label: 显示名称 + email: + label: 电子邮箱 + phone: + label: 手机号 + avatar: + label: 头像 + bio: + label: 描述 + change_password_modal: + title: 密码修改 + fields: + new_password: + label: 新密码 + confirm_password: + label: 确认密码 + email_verify_modal: + titles: + modify: 修改电子邮箱 + verify: 验证电子邮箱 + fields: + new_email: + label: 新电子邮箱 + email: + label: 电子邮箱 + code: + label: 验证码 + operations: + send_code: + buttons: + sending: 发送中 + send: 发送验证码 + countdown: "{timer} 秒后重发" + toast_success: 验证码已发送 + toast_email_empty: 请输入电子邮箱 + verify: + toast_success: 验证成功 + uc_notification: title: 消息 tabs: unread: 未读 @@ -1005,6 +1089,9 @@ core: operations: mark_as_read: button: 标记为已读 + delete: + title: 删除消息 + description: 确定要删除该消息吗? setting: title: 设置 actuator: @@ -1202,7 +1289,7 @@ core: extensions: placeholder: options: - placeholder: "输入 / 以选择输入类型" + placeholder: 输入 / 以选择输入类型 toolbox: attachment: 选择附件 show_hide_sidebar: 显示 / 隐藏侧边栏 @@ -1231,8 +1318,23 @@ core: app_download_alert: description: Halo 的主题和插件可以在以下地址下载: sources: - app_store: "官方应用市场:{url}" - github: "GitHub:{url}" + app_store: 官方应用市场:{url} + github: GitHub:{url} + user_avatar: + title: 头像 + toast_upload_failed: 上传头像失败 + toast_remove_failed: 删除头像失败 + cropper_modal: + title: 裁剪头像 + remove: + title: 确定要删除头像吗? + tooltips: + upload: 上传 + zoom_in: 放大 + zoom_out: 缩小 + flip_horizontal: 水平翻转 + flip_vertical: 垂直翻转 + reset: 重置 composables: content_cache: toast_recovered: 已从缓存中恢复未保存的内容 @@ -1278,6 +1380,8 @@ core: detail: 详情 select: 选择 view_all: 查看全部 + verify: 验证 + modify: 修改 radio: "yes": 是 "no": 否 @@ -1319,9 +1423,9 @@ core: editor_not_found: 未找到符合 {raw_type} 格式的编辑器,请检查是否已安装编辑器插件。 filters: results: - keyword: "关键词:{keyword}" - sort: "排序:{sort}" - status: "状态:{status}" + keyword: 关键词:{keyword} + sort: 排序:{sort} + status: 状态:{status} labels: sort: 排序 status: 状态 diff --git a/console/src/locales/zh-TW.yaml b/console/src/locales/zh-TW.yaml index e7d6af9d59..20d08648cc 100644 --- a/console/src/locales/zh-TW.yaml +++ b/console/src/locales/zh-TW.yaml @@ -75,12 +75,21 @@ core: backup: 備份 operations: logout: - button: 登出 + tooltip: 登出 title: 確定要登出嗎? profile: - button: 個人資料 + tooltip: 個人中心 visit_homepage: title: 訪問首頁 + uc_sidebar: + menu: + items: + profile: 我的 + notification: 消息 + posts: 文章 + operations: + console: + tooltip: 管理控制台 dashboard: title: 儀表板 actions: @@ -102,9 +111,13 @@ core: title: 頁面 recent_published: title: 最近文章 - visits: "訪問量 {visits}" - comments: "留言 {comments}" - publishTime: "發佈日期 {publishTime}" + visits: 訪問量 {visits} + comments: 留言 {comments} + publishTime: 發佈日期 {publishTime} + notification: + title: 通知 + empty: + title: 当前没有未读的消息 quicklink: title: 快捷訪問 actions: @@ -163,19 +176,19 @@ core: draft: 未發布 visible: label: 可見性 - result: "可見性:{visible}" + result: 可見性:{visible} items: public: 公開 private: 私有 category: label: 分類 - result: "分類:{category}" + result: 分類:{category} tag: label: 標籤 - result: "標籤:{tag}" + result: 標籤:{tag} author: label: 作者 - result: "作者:{author}" + result: 作者:{author} sort: items: publish_time_desc: 較近發布 @@ -185,8 +198,8 @@ core: list: fields: categories: 分類: - visits: "訪問量 {visits}" - comments: "留言 {comments}" + visits: 訪問量 {visits} + comments: 留言 {comments} pinned: 已置頂 settings: title: 文章設置 @@ -331,13 +344,13 @@ core: draft: 未發布 visible: label: 可見性 - result: "可見性:{visible}" + result: 可見性:{visible} items: public: 公開 private: 私有 author: label: 作者 - result: "作者:{author}" + result: 作者:{author} sort: items: publish_time_desc: 較近發布 @@ -346,8 +359,8 @@ core: create_time_asc: 較早創建 list: fields: - visits: "訪問量 {visits}" - comments: "留言 {comments}" + visits: 訪問量 {visits} + comments: 留言 {comments} settings: title: 頁面設置 groups: @@ -433,7 +446,7 @@ core: pending_review: 待審核 owner: label: 留言者 - result: "留言者:{owner}" + result: 留言者:{owner} sort: items: last_reply_time_desc: 較近回覆 @@ -484,10 +497,10 @@ core: filters: storage_policy: label: 存儲策略 - result: "存儲策略:{storage_policy}" + result: 存儲策略:{storage_policy} owner: label: 上傳者 - result: "上傳者:{owner}" + result: 上傳者:{owner} sort: items: create_time_desc: 較近上傳 @@ -691,7 +704,7 @@ core: placeholder: 選擇上級選單項 ref_kind: label: 類型 - placeholder: "請選擇{label}" + placeholder: 請選擇{label} options: custom: 自定義連結 post: 文章 @@ -783,8 +796,8 @@ core: last_starttime: 最近一次啟動 loader: toast: - entry_load_failed: "讀取插件入口文件失敗" - style_load_failed: "讀取插件樣式文件失敗" + entry_load_failed: 讀取插件入口文件失敗 + style_load_failed: 讀取插件樣式文件失敗 extension_points: editor: providers: @@ -854,19 +867,13 @@ core: title: 用戶詳情 tabs: detail: 詳情 - notification-preferences: 通知配置 - pat: 個人令牌 actions: update_profile: title: 修改資料 change_password: title: 修改密碼 - operations: - bind: - button: 綁定 - unbind: - button: 解綁 - title: "確定要取消綁定 {display_name} 的登入方式嗎?" + profile: + title: 個人中心 fields: display_name: 顯示名稱 username: 用戶名 @@ -875,64 +882,6 @@ core: bio: 描述 creation_time: 註冊時間 identity_authentication: 登入方式 - avatar: - title: 頭像 - toast_upload_failed: 上傳頭像失敗 - toast_remove_failed: 刪除頭像失敗 - cropper_modal: - title: 裁剪頭像 - remove: - title: 確定要刪除頭像嗎? - tooltips: - upload: 上傳 - zoom_in: 放大 - zoom_out: 縮小 - flip_horizontal: 水平翻轉 - flip_vertical: 垂直翻轉 - reset: 重置 - pat: - operations: - delete: - title: 刪除個人令牌 - description: 您確定要刪除此個人令牌嗎? - revoke: - button: 撤銷 - title: 撤銷個人令牌 - description: 您確定要撤銷此個人令牌嗎? - toast_success: 撤銷成功 - copy: - title: 請立即複製並保存,令牌僅顯示一次。 - restore: - button: 還原 - toast_success: 還原成功 - list: - empty: - title: 目前尚未建立個人令牌 - message: 您可以嘗試重新整理或建立新的個人令牌 - fields: - expiresAt: - dynamic: "到期於 {expiresAt}" - forever: 永久有效 - status: - normal: 正常 - revoked: 已撤銷 - expired: 已過期 - creation_modal: - title: 建立個人令牌 - groups: - general: 基本資訊 - permissions: 權限 - fields: - name: - label: 名稱 - expiresAt: - label: 到期時間 - help: 留空代表永不過期 - description: - label: 描述 - notification-preferences: - fields: - type: 通知類型 role: title: 角色 common: @@ -973,6 +922,7 @@ core: permissions: 權限 fields: display_name: 名稱 + redirect_on_login: 登入之後預設跳轉位置 identity_authentication: title: 身份認證 tabs: @@ -993,7 +943,129 @@ core: website: 網站 help_page: 幫助頁面 authentication_url: 登入入口 - notification: + uc_profile: + title: 我的 + tabs: + detail: 詳情 + notification-preferences: 通知配置 + pat: 個人令牌 + actions: + update_profile: + title: 修改資料 + change_password: + title: 修改密碼 + detail: + fields: + display_name: 顯示名稱 + username: 用戶名 + email: 電子郵箱 + roles: 角色 + bio: 描述 + creation_time: 註冊時間 + identity_authentication: 登入方式 + operations: + bind: + button: 綁定 + unbind: + button: 解綁 + title: 確定要取消綁定 {display_name} 的登入方式嗎? + email_not_set: + description: 電子郵件地址尚未設置,點擊下方按鈕進行設置 + title: 設定電子郵件信箱 + email_not_verified: + description: 電子郵件地址尚未驗證,點擊下方按鈕進行驗證 + title: 驗證電子郵件信箱 + pat: + operations: + delete: + title: 刪除個人令牌 + description: 您確定要刪除此個人令牌嗎? + revoke: + button: 撤銷 + title: 撤銷個人令牌 + description: 您確定要撤銷此個人令牌嗎? + toast_success: 撤銷成功 + copy: + title: 請立即複製並保存,令牌僅顯示一次。 + restore: + button: 還原 + toast_success: 還原成功 + list: + empty: + title: 目前尚未建立個人令牌 + message: 您可以嘗試重新整理或建立新的個人令牌 + fields: + expiresAt: + dynamic: 到期於 {expiresAt} + forever: 永久有效 + status: + normal: 正常 + revoked: 已撤銷 + expired: 已過期 + creation_modal: + title: 建立個人令牌 + groups: + general: 基本資訊 + permissions: 權限 + fields: + name: + label: 名稱 + expiresAt: + label: 到期時間 + help: 留空代表永不過期 + description: + label: 描述 + notification-preferences: + fields: + type: 通知類型 + editing_modal: + title: 編輯資料 + groups: + general: 常規 + annotations: 元數據 + fields: + username: + label: 用戶名 + validation: 請輸入有效的用戶名 + display_name: + label: 顯示名稱 + email: + label: 電子郵箱 + phone: + label: 手機號 + avatar: + label: 頭像 + bio: + label: 描述 + change_password_modal: + title: 密碼修改 + fields: + new_password: + label: 新密碼 + confirm_password: + label: 確認密碼 + email_verify_modal: + fields: + code: + label: 驗證碼 + email: + label: 電子郵件信箱 + new_email: + label: 新電子郵件信箱 + operations: + send_code: + buttons: + countdown: "{timer} 秒後重發" + send: 發送驗證碼 + sending: 發送中 + toast_email_empty: 請輸入電子郵件信箱 + toast_success: 驗證碼已發送 + verify: + toast_success: 驗證成功 + titles: + modify: 修改電子郵件信箱 + verify: 驗證電子郵件信箱 + uc_notification: title: 訊息 tabs: unread: 未讀 @@ -1005,6 +1077,9 @@ core: operations: mark_as_read: button: 標記為已讀 + delete: + description: 確定要刪除該訊息嗎? + title: 刪除訊息 setting: title: 設置 actuator: @@ -1202,7 +1277,7 @@ core: extensions: placeholder: options: - placeholder: "輸入 / 以選擇輸入類型" + placeholder: 輸入 / 以選擇輸入類型 toolbox: attachment: 選擇附件 show_hide_sidebar: 顯示 / 隱藏側邊欄 @@ -1231,8 +1306,23 @@ core: app_download_alert: description: Halo 的主題和插件可以在以下地址下載: sources: - app_store: "官方應用市場:{url}" - github: "GitHub:{url}" + app_store: 官方應用市場:{url} + github: GitHub:{url} + user_avatar: + title: 頭像 + toast_upload_failed: 上傳頭像失敗 + toast_remove_failed: 刪除頭像失敗 + cropper_modal: + title: 裁剪頭像 + remove: + title: 確定要刪除頭像嗎? + tooltips: + upload: 上傳 + zoom_in: 放大 + zoom_out: 縮小 + flip_horizontal: 水平翻轉 + flip_vertical: 垂直翻轉 + reset: 重置 composables: content_cache: toast_recovered: 已從緩存中恢復未保存的內容 @@ -1278,6 +1368,8 @@ core: detail: 詳情 select: 選擇 view_all: 查看全部 + modify: 修改 + verify: 驗證 radio: "yes": 是 "no": 否 @@ -1319,9 +1411,9 @@ core: editor_not_found: 未找到符合 {raw_type} 格式的編輯器,請檢查是否已安裝編輯器插件。 filters: results: - keyword: "關鍵字:{keyword}" - sort: "排序:{sort}" - status: "狀態:{status}" + keyword: 關鍵字:{keyword} + sort: 排序:{sort} + status: 狀態:{status} labels: sort: 排序 status: 狀態 @@ -1346,3 +1438,15 @@ core: recovering: 還原中 fields: post_count: "{count} 篇文章" + uc_post: + creation_modal: + title: 創建文章 + operations: + cancel_publish: + description: 確定要取消發布嗎? + title: 取消發布 + publish_modal: + title: 發布文章 + setting_modal: + title: 文章設定 + title: 我的文章 diff --git a/console/uc-src/layouts/BasicLayout.vue b/console/uc-src/layouts/BasicLayout.vue index e705774fd9..229e5ebb0c 100644 --- a/console/uc-src/layouts/BasicLayout.vue +++ b/console/uc-src/layouts/BasicLayout.vue @@ -145,7 +145,7 @@ onMounted(() => { </div> <div class="flex items-center gap-1"> <a - v-tooltip="'管理控制台'" + v-tooltip="$t('core.uc_sidebar.operations.console.tooltip')" class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100" href="/console" > @@ -154,6 +154,7 @@ onMounted(() => { /> </a> <div + v-tooltip="$t('core.sidebar.operations.logout.tooltip')" class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100" @click="handleLogout" > diff --git a/console/uc-src/modules/contents/posts/PostEditor.vue b/console/uc-src/modules/contents/posts/PostEditor.vue index aa28bd5dc6..074b6c157f 100644 --- a/console/uc-src/modules/contents/posts/PostEditor.vue +++ b/console/uc-src/modules/contents/posts/PostEditor.vue @@ -419,7 +419,7 @@ useSessionKeepAlive(); <PostCreationModal v-if="postCreationModal" - title="创建文章" + :title="$t('core.uc_post.creation_modal.title')" :content="content" @close="postCreationModal = false" @success="onCreatePostSuccess" @@ -427,7 +427,7 @@ useSessionKeepAlive(); <PostCreationModal v-if="postPublishModal" - title="发布文章" + :title="$t('core.uc_post.publish_modal.title')" :content="content" publish @close="postPublishModal = false" diff --git a/console/uc-src/modules/contents/posts/PostList.vue b/console/uc-src/modules/contents/posts/PostList.vue index e0ad0e6724..3a9646c914 100644 --- a/console/uc-src/modules/contents/posts/PostList.vue +++ b/console/uc-src/modules/contents/posts/PostList.vue @@ -84,7 +84,7 @@ const { </script> <template> - <VPageHeader title="我的文章"> + <VPageHeader :title="$t('core.uc_post.title')"> <template #icon> <IconBookRead class="mr-2 self-center" /> </template> @@ -121,21 +121,13 @@ const { value: undefined, }, { - label: '已发布', + label: $t('core.post.filters.status.items.published'), value: 'PUBLISHED', }, { - label: '待审核', - value: 'PENDING_APPROVAL', - }, - { - label: '未发布', + label: $t('core.post.filters.status.items.draft'), value: 'DRAFT', }, - { - label: '发布失败', - value: 'FAILED', - }, ]" /> <div diff --git a/console/uc-src/modules/contents/posts/components/PostListItem.vue b/console/uc-src/modules/contents/posts/components/PostListItem.vue index b396b37738..a156f07d6c 100644 --- a/console/uc-src/modules/contents/posts/components/PostListItem.vue +++ b/console/uc-src/modules/contents/posts/components/PostListItem.vue @@ -67,8 +67,10 @@ async function handlePublish() { function handleUnpublish() { Dialog.warning({ - title: "取消发布", - description: "确定要取消发布吗?", + title: t("core.uc_post.operations.cancel_publish.title"), + description: t("core.uc_post.operations.cancel_publish.description"), + confirmText: t("core.common.buttons.confirm"), + cancelText: t("core.common.buttons.cancel"), async onConfirm() { await apiClient.uc.post.unpublishMyPost({ name: props.post.post.metadata.name, @@ -216,17 +218,17 @@ function handleUnpublish() { }) " > - 编辑 + {{ $t("core.common.buttons.edit") }} </VDropdownItem> <HasPermission :permissions="['uc:posts:publish']"> <VDropdownItem v-if="post.post.metadata.labels?.[postLabels.PUBLISHED] === 'false'" @click="handlePublish" > - 发布 + {{ $t("core.common.buttons.publish") }} </VDropdownItem> <VDropdownItem v-else type="danger" @click="handleUnpublish"> - 取消发布 + {{ $t("core.common.buttons.cancel_publish") }} </VDropdownItem> </HasPermission> </template> diff --git a/console/uc-src/modules/contents/posts/components/PostSettingEditModal.vue b/console/uc-src/modules/contents/posts/components/PostSettingEditModal.vue index 89aec50161..a3fc216fd4 100644 --- a/console/uc-src/modules/contents/posts/components/PostSettingEditModal.vue +++ b/console/uc-src/modules/contents/posts/components/PostSettingEditModal.vue @@ -88,7 +88,7 @@ function onSubmit(data: PostFormState) { <VModal v-if="shouldRender" v-model:visible="visible" - title="文章设置" + :title="$t('core.uc_post.setting_modal.title')" :width="700" centered @close="onClose" diff --git a/console/uc-src/modules/contents/posts/module.ts b/console/uc-src/modules/contents/posts/module.ts index 1b10c37157..8a1054896f 100644 --- a/console/uc-src/modules/contents/posts/module.ts +++ b/console/uc-src/modules/contents/posts/module.ts @@ -16,11 +16,11 @@ export default definePlugin({ name: "Posts", component: PostList, meta: { - title: "core.post.title", + title: "core.uc_post.title", searchable: true, permissions: ["uc:posts:manage"], menu: { - name: "core.sidebar.menu.items.posts", + name: "core.uc_sidebar.menu.items.posts", group: "content", icon: markRaw(IconBookRead), priority: 0, @@ -33,7 +33,7 @@ export default definePlugin({ name: "PostEditor", component: PostEditor, meta: { - title: "文章编辑", + title: "core.post_editor.title", searchable: true, permissions: ["uc:posts:manage"], }, diff --git a/console/uc-src/modules/notifications/Notifications.vue b/console/uc-src/modules/notifications/Notifications.vue index 4da43d4415..cb296853e6 100644 --- a/console/uc-src/modules/notifications/Notifications.vue +++ b/console/uc-src/modules/notifications/Notifications.vue @@ -56,7 +56,7 @@ const selectedNotification = computed(() => { </script> <template> - <VPageHeader :title="$t('core.notification.title')"> + <VPageHeader :title="$t('core.uc_notification.title')"> <template #icon> <IconNotificationBadgeLine class="mr-2 self-center" /> </template> @@ -80,8 +80,8 @@ const selectedNotification = computed(() => { v-model:active-id="activeTab" class="sticky top-0 z-10 !rounded-none" :items="[ - { id: 'unread', label: $t('core.notification.tabs.unread') }, - { id: 'read', label: $t('core.notification.tabs.read') }, + { id: 'unread', label: $t('core.uc_notification.tabs.unread') }, + { id: 'read', label: $t('core.uc_notification.tabs.read') }, ]" type="outline" @change="selectedNotificationName = undefined" @@ -95,8 +95,8 @@ const selectedNotification = computed(() => { <VEmpty :title="`${ activeTab === 'unread' - ? $t('core.notification.empty.titles.unread') - : $t('core.notification.empty.titles.read') + ? $t('core.uc_notification.empty.titles.unread') + : $t('core.uc_notification.empty.titles.read') }`" > <template #actions> diff --git a/console/uc-src/modules/notifications/components/NotificationListItem.vue b/console/uc-src/modules/notifications/components/NotificationListItem.vue index 41d894c886..9cbd6a2ae6 100644 --- a/console/uc-src/modules/notifications/components/NotificationListItem.vue +++ b/console/uc-src/modules/notifications/components/NotificationListItem.vue @@ -7,8 +7,10 @@ import { useMutation, useQueryClient } from "@tanstack/vue-query"; import { Dialog, Toast, VStatusDot } from "@halo-dev/components"; import { watch } from "vue"; import { ref } from "vue"; +import { useI18n } from "vue-i18n"; const queryClient = useQueryClient(); +const { t } = useI18n(); const props = withDefaults( defineProps<{ @@ -43,8 +45,8 @@ const { mutate: handleMarkAsRead } = useMutation({ function handleDelete() { Dialog.warning({ - title: "删除消息", - description: "确定要删除该消息吗?", + title: t("core.uc_notification.operations.delete.title"), + description: t("core.uc_notification.operations.delete.description"), async onConfirm() { await apiClient.notification.deleteSpecifiedNotification({ name: props.notification.metadata.name, @@ -53,7 +55,7 @@ function handleDelete() { await queryClient.invalidateQueries({ queryKey: ["user-notifications"] }); - Toast.success("删除成功"); + Toast.success(t("core.common.toast.delete_success")); }, }); } @@ -109,7 +111,7 @@ watch( class="text-sm text-gray-600 hover:text-gray-900" @click.stop="handleMarkAsRead({ refetch: true })" > - {{ $t("core.notification.operations.mark_as_read.button") }} + {{ $t("core.uc_notification.operations.mark_as_read.button") }} </span> <span class="text-sm text-red-600 hover:text-red-700" diff --git a/console/uc-src/modules/notifications/module.ts b/console/uc-src/modules/notifications/module.ts index 1b0581403a..082ee16b79 100644 --- a/console/uc-src/modules/notifications/module.ts +++ b/console/uc-src/modules/notifications/module.ts @@ -15,10 +15,10 @@ export default definePlugin({ name: "Notifications", component: Notifications, meta: { - title: "消息", + title: "core.uc_notification.title", searchable: true, menu: { - name: "消息", + name: "core.uc_sidebar.menu.items.notification", group: "dashboard", icon: markRaw(IconNotificationBadgeLine), priority: 1, diff --git a/console/uc-src/modules/profile/Profile.vue b/console/uc-src/modules/profile/Profile.vue index aea7e2e681..0ed9097b99 100644 --- a/console/uc-src/modules/profile/Profile.vue +++ b/console/uc-src/modules/profile/Profile.vue @@ -63,19 +63,19 @@ provide<Ref<DetailedUser | undefined>>("user", user); const tabs: UserTab[] = [ { id: "detail", - label: t("core.user.detail.tabs.detail"), + label: t("core.uc_profile.tabs.detail"), component: markRaw(DetailTab), priority: 10, }, { id: "notification-preferences", - label: t("core.user.detail.tabs.notification-preferences"), + label: t("core.uc_profile.tabs.notification-preferences"), component: markRaw(NotificationPreferences), priority: 20, }, { id: "pat", - label: t("core.user.detail.tabs.pat"), + label: t("core.uc_profile.tabs.pat"), component: markRaw(PersonalAccessTokensTab), priority: 30, }, @@ -122,10 +122,10 @@ const activeTab = useRouteQuery<string>("tab", tabs[0].id, { </VButton> <template #popper> <VDropdownItem @click="editingModal = true"> - {{ $t("core.user.detail.actions.update_profile.title") }} + {{ $t("core.uc_profile.actions.update_profile.title") }} </VDropdownItem> <VDropdownItem @click="passwordChangeModal = true"> - {{ $t("core.user.detail.actions.change_password.title") }} + {{ $t("core.uc_profile.actions.change_password.title") }} </VDropdownItem> </template> </VDropdown> diff --git a/console/uc-src/modules/profile/components/EmailVerifyModal.vue b/console/uc-src/modules/profile/components/EmailVerifyModal.vue index 93a33bdeb3..9e72090d14 100644 --- a/console/uc-src/modules/profile/components/EmailVerifyModal.vue +++ b/console/uc-src/modules/profile/components/EmailVerifyModal.vue @@ -8,8 +8,10 @@ import { apiClient } from "@/utils/api-client"; import { useUserStore } from "@/stores/user"; import { useIntervalFn } from "@vueuse/shared"; import { computed } from "vue"; +import { useI18n } from "vue-i18n"; const queryClient = useQueryClient(); +const { t } = useI18n(); const { currentUser, fetchCurrentUser } = useUserStore(); @@ -58,7 +60,11 @@ const { mutate: sendVerifyCode, isLoading: isSending } = useMutation({ mutationKey: ["send-verify-code"], mutationFn: async () => { if (!email.value) { - Toast.error("请输入电子邮箱"); + Toast.error( + t( + "core.uc_profile.email_verify_modal.operations.send_code.toast_email_empty" + ) + ); throw new Error("email is empty"); } return await apiClient.user.sendEmailVerificationCode({ @@ -68,7 +74,9 @@ const { mutate: sendVerifyCode, isLoading: isSending } = useMutation({ }); }, onSuccess() { - Toast.success("验证码已发送"); + Toast.success( + t("core.uc_profile.email_verify_modal.operations.send_code.toast_success") + ); timer.value = 60; resume(); }, @@ -76,9 +84,16 @@ const { mutate: sendVerifyCode, isLoading: isSending } = useMutation({ const sendVerifyCodeButtonText = computed(() => { if (isSending.value) { - return "发送中"; + return t( + "core.uc_profile.email_verify_modal.operations.send_code.buttons.sending" + ); } - return isActive.value ? `${timer.value} 秒后重发` : "发送验证码"; + return isActive.value + ? t( + "core.uc_profile.email_verify_modal.operations.send_code.buttons.countdown", + { timer: timer.value } + ) + : t("core.uc_profile.email_verify_modal.operations.send_code.buttons.send"); }); const { mutate: verifyEmail, isLoading: isVerifying } = useMutation({ @@ -91,7 +106,9 @@ const { mutate: verifyEmail, isLoading: isVerifying } = useMutation({ }); }, onSuccess() { - Toast.success("验证成功"); + Toast.success( + t("core.uc_profile.email_verify_modal.operations.verify.toast_success") + ); queryClient.invalidateQueries({ queryKey: ["user-detail"] }); fetchCurrentUser(); onClose(); @@ -107,7 +124,11 @@ function handleVerify(data: { code: string }) { <VModal v-if="shouldRender" v-model:visible="visible" - :title="currentUser?.spec.emailVerified ? '修改电子邮箱' : '绑定电子邮箱'" + :title=" + currentUser?.spec.emailVerified + ? $t('core.uc_profile.email_verify_modal.titles.modify') + : $t('core.uc_profile.email_verify_modal.titles.verify') + " @close="onClose" > <FormKit @@ -119,11 +140,20 @@ function handleVerify(data: { code: string }) { <FormKit v-model="email" type="email" - :label="currentUser?.spec.emailVerified ? '新电子邮箱' : '电子邮箱'" + :label=" + currentUser?.spec.emailVerified + ? $t('core.uc_profile.email_verify_modal.fields.new_email.label') + : $t('core.uc_profile.email_verify_modal.fields.email.label') + " name="email" validation="required|email" ></FormKit> - <FormKit type="number" name="code" label="验证码" validation="required"> + <FormKit + type="number" + name="code" + :label="$t('core.uc_profile.email_verify_modal.fields.code.label')" + validation="required" + > <template #suffix> <VButton :loading="isSending" @@ -143,9 +173,11 @@ function handleVerify(data: { code: string }) { type="secondary" @click="$formkit.submit('email-verify-form')" > - 验证 + {{ $t("core.common.buttons.verify") }} + </VButton> + <VButton @click="emit('close')"> + {{ $t("core.common.buttons.close_and_shortcut") }} </VButton> - <VButton @click="emit('close')">取消</VButton> </VSpace> </template> </VModal> diff --git a/console/uc-src/modules/profile/components/PasswordChangeModal.vue b/console/uc-src/modules/profile/components/PasswordChangeModal.vue index 3c6852c007..6d69e96403 100644 --- a/console/uc-src/modules/profile/components/PasswordChangeModal.vue +++ b/console/uc-src/modules/profile/components/PasswordChangeModal.vue @@ -85,7 +85,7 @@ const handleChangePassword = async () => { <VModal :visible="visible" :width="500" - :title="$t('core.user.change_password_modal.title')" + :title="$t('core.uc_profile.change_password_modal.title')" @update:visible="onVisibleChange" > <FormKit @@ -99,7 +99,9 @@ const handleChangePassword = async () => { > <FormKit id="passwordInput" - :label="$t('core.user.change_password_modal.fields.new_password.label')" + :label=" + $t('core.uc_profile.change_password_modal.fields.new_password.label') + " name="password" type="password" validation="required:trim|length:5,100|matches:/^\S.*\S$/" @@ -109,7 +111,9 @@ const handleChangePassword = async () => { ></FormKit> <FormKit :label=" - $t('core.user.change_password_modal.fields.confirm_password.label') + $t( + 'core.uc_profile.change_password_modal.fields.confirm_password.label' + ) " name="password_confirm" type="password" diff --git a/console/uc-src/modules/profile/components/PersonalAccessTokenCreationModal.vue b/console/uc-src/modules/profile/components/PersonalAccessTokenCreationModal.vue index 46f77adfd6..dc4f39e955 100644 --- a/console/uc-src/modules/profile/components/PersonalAccessTokenCreationModal.vue +++ b/console/uc-src/modules/profile/components/PersonalAccessTokenCreationModal.vue @@ -76,7 +76,7 @@ const { setTimeout(() => { Dialog.info({ - title: t("core.user.pat.operations.copy.title"), + title: t("core.uc_profile.pat.operations.copy.title"), description: data.metadata.annotations?.[patAnnotations.ACCESS_TOKEN], confirmType: "secondary", confirmText: t("core.common.buttons.copy"), @@ -102,7 +102,7 @@ const { copy } = useClipboard({ <VModal v-model:visible="visible" :width="700" - :title="$t('core.user.pat.creation_modal.title')" + :title="$t('core.uc_profile.pat.creation_modal.title')" @close="emit('close')" > <div> @@ -110,7 +110,7 @@ const { copy } = useClipboard({ <div class="md:col-span-1"> <div class="sticky top-0"> <span class="text-base font-medium text-gray-900"> - {{ $t("core.user.pat.creation_modal.groups.general") }} + {{ $t("core.uc_profile.pat.creation_modal.groups.general") }} </span> </div> </div> @@ -126,19 +126,27 @@ const { copy } = useClipboard({ validation="required" type="text" name="name" - :label="$t('core.user.pat.creation_modal.fields.name.label')" + :label=" + $t('core.uc_profile.pat.creation_modal.fields.name.label') + " ></FormKit> <FormKit type="datetime-local" name="expiresAt" - :label="$t('core.user.pat.creation_modal.fields.expiresAt.label')" - :help="$t('core.user.pat.creation_modal.fields.expiresAt.help')" + :label=" + $t('core.uc_profile.pat.creation_modal.fields.expiresAt.label') + " + :help=" + $t('core.uc_profile.pat.creation_modal.fields.expiresAt.help') + " ></FormKit> <FormKit type="textarea" name="description" :label=" - $t('core.user.pat.creation_modal.fields.description.label') + $t( + 'core.uc_profile.pat.creation_modal.fields.description.label' + ) " ></FormKit> </FormKit> @@ -154,7 +162,7 @@ const { copy } = useClipboard({ <div class="md:col-span-1"> <div class="sticky top-0"> <span class="text-base font-medium text-gray-900"> - {{ $t("core.user.pat.creation_modal.groups.permissions") }} + {{ $t("core.uc_profile.pat.creation_modal.groups.permissions") }} </span> </div> </div> diff --git a/console/uc-src/modules/profile/components/PersonalAccessTokenListItem.vue b/console/uc-src/modules/profile/components/PersonalAccessTokenListItem.vue index f4792d382c..a2d052ba96 100644 --- a/console/uc-src/modules/profile/components/PersonalAccessTokenListItem.vue +++ b/console/uc-src/modules/profile/components/PersonalAccessTokenListItem.vue @@ -27,8 +27,8 @@ const { t } = useI18n(); function handleDelete() { Dialog.warning({ - title: t("core.user.pat.operations.delete.title"), - description: t("core.user.pat.operations.delete.description"), + title: t("core.uc_profile.pat.operations.delete.title"), + description: t("core.uc_profile.pat.operations.delete.description"), async onConfirm() { await apiClient.pat.deletePat({ name: props.token.metadata.name, @@ -42,14 +42,14 @@ function handleDelete() { function handleRevoke() { Dialog.warning({ - title: t("core.user.pat.operations.revoke.title"), - description: t("core.user.pat.operations.revoke.description"), + title: t("core.uc_profile.pat.operations.revoke.title"), + description: t("core.uc_profile.pat.operations.revoke.description"), async onConfirm() { await apiClient.pat.revokePat({ name: props.token.metadata.name, }); - Toast.success(t("core.user.pat.operations.revoke.toast_success")); + Toast.success(t("core.uc_profile.pat.operations.revoke.toast_success")); queryClient.invalidateQueries({ queryKey: ["personal-access-tokens"] }); }, }); @@ -58,19 +58,19 @@ function handleRevoke() { async function handleRestore() { await apiClient.pat.restorePat({ name: props.token.metadata.name }); - Toast.success(t("core.user.pat.operations.restore.toast_success")); + Toast.success(t("core.uc_profile.pat.operations.restore.toast_success")); queryClient.invalidateQueries({ queryKey: ["personal-access-tokens"] }); } const statusText = computed(() => { const { expiresAt } = props.token.spec || {}; if (expiresAt && new Date(expiresAt) < new Date()) { - return t("core.user.pat.list.fields.status.expired"); + return t("core.uc_profile.pat.list.fields.status.expired"); } return t( props.token.spec?.revoked - ? "core.user.pat.list.fields.status.revoked" - : "core.user.pat.list.fields.status.normal" + ? "core.uc_profile.pat.list.fields.status.revoked" + : "core.uc_profile.pat.list.fields.status.normal" ); }); @@ -109,13 +109,13 @@ const statusTheme = computed(() => { v-tooltip="formatDatetime(token.spec.expiresAt)" > {{ - $t("core.user.pat.list.fields.expiresAt.dynamic", { + $t("core.uc_profile.pat.list.fields.expiresAt.dynamic", { expiresAt: relativeTimeTo(token.spec?.expiresAt), }) }} </span> <span v-else> - {{ $t("core.user.pat.list.fields.expiresAt.forever") }} + {{ $t("core.uc_profile.pat.list.fields.expiresAt.forever") }} </span> </div> </template> @@ -135,10 +135,10 @@ const statusTheme = computed(() => { type="danger" @click="handleRevoke" > - {{ $t("core.user.pat.operations.revoke.button") }} + {{ $t("core.uc_profile.pat.operations.revoke.button") }} </VDropdownItem> <VDropdownItem v-else @click="handleRestore"> - {{ $t("core.user.pat.operations.restore.button") }} + {{ $t("core.uc_profile.pat.operations.restore.button") }} </VDropdownItem> <VDropdownDivider /> <VDropdownItem type="danger" @click="handleDelete"> diff --git a/console/uc-src/modules/profile/components/ProfileEditingModal.vue b/console/uc-src/modules/profile/components/ProfileEditingModal.vue index d25444a7d6..4b17076667 100644 --- a/console/uc-src/modules/profile/components/ProfileEditingModal.vue +++ b/console/uc-src/modules/profile/components/ProfileEditingModal.vue @@ -114,7 +114,7 @@ async function onEmailVerifyModalClose() { </script> <template> <VModal - :title="$t('core.user.editing_modal.titles.update')" + :title="$t('core.uc_profile.editing_modal.title')" :visible="visible" :width="700" @update:visible="onVisibleChange" @@ -131,7 +131,7 @@ async function onEmailVerifyModalClose() { <div class="md:col-span-1"> <div class="sticky top-0"> <span class="text-base font-medium text-gray-900"> - {{ $t("core.user.editing_modal.groups.general") }} + {{ $t("core.uc_profile.editing_modal.groups.general") }} </span> </div> </div> @@ -140,21 +140,23 @@ async function onEmailVerifyModalClose() { id="userNameInput" v-model="formState.metadata.name" :disabled="true" - :label="$t('core.user.editing_modal.fields.username.label')" + :label="$t('core.uc_profile.editing_modal.fields.username.label')" type="text" name="name" ></FormKit> <FormKit id="displayNameInput" v-model="formState.spec.displayName" - :label="$t('core.user.editing_modal.fields.display_name.label')" + :label=" + $t('core.uc_profile.editing_modal.fields.display_name.label') + " type="text" name="displayName" validation="required|length:0,50" ></FormKit> <FormKit v-model="formState.spec.email" - :label="$t('core.user.editing_modal.fields.email.label')" + :label="$t('core.uc_profile.editing_modal.fields.email.label')" type="email" name="email" readonly @@ -165,20 +167,20 @@ async function onEmailVerifyModalClose() { class="rounded-none border-y-0 border-l border-r-0" @click="emailVerifyModal = true" > - 修改 + {{ $t("core.common.buttons.modify") }} </VButton> </template> </FormKit> <FormKit v-model="formState.spec.phone" - :label="$t('core.user.editing_modal.fields.phone.label')" + :label="$t('core.uc_profile.editing_modal.fields.phone.label')" type="text" name="phone" validation="length:0,20" ></FormKit> <FormKit v-model="formState.spec.bio" - :label="$t('core.user.editing_modal.fields.bio.label')" + :label="$t('core.uc_profile.editing_modal.fields.bio.label')" type="textarea" name="bio" validation="length:0,2048" diff --git a/console/uc-src/modules/profile/module.ts b/console/uc-src/modules/profile/module.ts index c1c4f2d8e4..773d9a5003 100644 --- a/console/uc-src/modules/profile/module.ts +++ b/console/uc-src/modules/profile/module.ts @@ -17,10 +17,10 @@ export default definePlugin({ name: "Profile", component: Profile, meta: { - title: "个人资料", + title: "core.uc_profile.title", searchable: true, menu: { - name: "我的", + name: "core.uc_sidebar.menu.items.profile", group: "dashboard", icon: markRaw(IconAccountCircleLine), priority: 0, diff --git a/console/uc-src/modules/profile/tabs/Detail.vue b/console/uc-src/modules/profile/tabs/Detail.vue index 2130ad222a..88ba4c2f97 100644 --- a/console/uc-src/modules/profile/tabs/Detail.vue +++ b/console/uc-src/modules/profile/tabs/Detail.vue @@ -40,7 +40,7 @@ const availableAuthProviders = computed(() => { const handleUnbindAuth = (authProvider: ListedAuthProvider) => { Dialog.warning({ - title: t("core.user.detail.operations.unbind.title", { + title: t("core.uc_profile.detail.operations.unbind.title", { display_name: authProvider.displayName, }), confirmText: t("core.common.buttons.confirm"), @@ -74,29 +74,33 @@ const emailVerifyModal = ref(false); <div class="border-t border-gray-100"> <VDescription> <VDescriptionItem - :label="$t('core.user.detail.fields.display_name')" + :label="$t('core.uc_profile.detail.fields.display_name')" :content="user?.user.spec.displayName" class="!px-2" /> <VDescriptionItem - :label="$t('core.user.detail.fields.username')" + :label="$t('core.uc_profile.detail.fields.username')" :content="user?.user.metadata.name" class="!px-2" /> <VDescriptionItem - :label="$t('core.user.detail.fields.email')" + :label="$t('core.uc_profile.detail.fields.email')" class="!px-2" > <div v-if="user" class="w-full xl:w-1/2"> <VAlert v-if="!user.user.spec.email" - title="设置电子邮箱" - description="电子邮箱地址还未设置,点击下方按钮进行设置" + :title="$t('core.uc_profile.detail.email_not_set.title')" + :description=" + $t('core.uc_profile.detail.email_not_set.description') + " type="warning" :closable="false" > <template #actions> - <VButton size="sm" @click="emailVerifyModal = true">设置</VButton> + <VButton size="sm" @click="emailVerifyModal = true"> + {{ $t("core.common.buttons.setting") }} + </VButton> </template> </VAlert> @@ -104,14 +108,16 @@ const emailVerifyModal = ref(false); <span>{{ user.user.spec.email }}</span> <div v-if="!user.user.spec.emailVerified" class="mt-3"> <VAlert - title="验证电子邮箱" - description="电子邮箱地址还未验证,点击下方按钮进行验证" + :title="$t('core.uc_profile.detail.email_not_verified.title')" + :description=" + $t('core.uc_profile.detail.email_not_verified.description') + " type="warning" :closable="false" > <template #actions> <VButton size="sm" @click="emailVerifyModal = true"> - 验证 + {{ $t("core.common.buttons.verify") }} </VButton> </template> </VAlert> @@ -120,7 +126,7 @@ const emailVerifyModal = ref(false); </div> </VDescriptionItem> <VDescriptionItem - :label="$t('core.user.detail.fields.roles')" + :label="$t('core.uc_profile.detail.fields.roles')" class="!px-2" > <VTag v-for="role in user?.roles" :key="role.metadata.name"> @@ -134,18 +140,18 @@ const emailVerifyModal = ref(false); </VTag> </VDescriptionItem> <VDescriptionItem - :label="$t('core.user.detail.fields.bio')" + :label="$t('core.uc_profile.detail.fields.bio')" :content="user?.user.spec?.bio || $t('core.common.text.none')" class="!px-2" /> <VDescriptionItem - :label="$t('core.user.detail.fields.creation_time')" + :label="$t('core.uc_profile.detail.fields.creation_time')" :content="formatDatetime(user?.user.metadata?.creationTimestamp)" class="!px-2" /> <VDescriptionItem v-if="!isFetching && availableAuthProviders?.length" - :label="$t('core.user.detail.fields.identity_authentication')" + :label="$t('core.uc_profile.detail.fields.identity_authentication')" class="!px-2" > <ul class="space-y-2"> @@ -171,7 +177,7 @@ const emailVerifyModal = ref(false); size="sm" @click="handleUnbindAuth(authProvider)" > - {{ $t("core.user.detail.operations.unbind.button") }} + {{ $t("core.uc_profile.detail.operations.unbind.button") }} </VButton> <VButton v-else @@ -179,7 +185,7 @@ const emailVerifyModal = ref(false); type="secondary" @click="handleBindAuth(authProvider)" > - {{ $t("core.user.detail.operations.bind.button") }} + {{ $t("core.uc_profile.detail.operations.unbind.button") }} </VButton> </div> </div> diff --git a/console/uc-src/modules/profile/tabs/NotificationPreferences.vue b/console/uc-src/modules/profile/tabs/NotificationPreferences.vue index ca3d838781..e59761c2f0 100644 --- a/console/uc-src/modules/profile/tabs/NotificationPreferences.vue +++ b/console/uc-src/modules/profile/tabs/NotificationPreferences.vue @@ -101,7 +101,7 @@ const { class="px-4 py-3 text-left text-sm font-semibold text-gray-900 sm:w-96" scope="col" > - {{ $t("core.user.notification-preferences.fields.type") }} + {{ $t("core.uc_profile.notification-preferences.fields.type") }} </th> <th v-for="notifier in data?.notifiers" diff --git a/console/uc-src/modules/profile/tabs/PersonalAccessTokens.vue b/console/uc-src/modules/profile/tabs/PersonalAccessTokens.vue index 9b9f24624a..19bd81ac90 100644 --- a/console/uc-src/modules/profile/tabs/PersonalAccessTokens.vue +++ b/console/uc-src/modules/profile/tabs/PersonalAccessTokens.vue @@ -65,8 +65,8 @@ function onCreationModalClose() { <Transition v-else-if="!pats?.length" appear name="fade"> <VEmpty - :message="$t('core.user.pat.list.empty.message')" - :title="$t('core.user.pat.list.empty.title')" + :message="$t('core.uc_profile.pat.list.empty.message')" + :title="$t('core.uc_profile.pat.list.empty.title')" > <template #actions> <VSpace> From 0ed29831b88bb17e966311299770b5eb514c5f37 Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Mon, 22 Jan 2024 16:10:35 +0800 Subject: [PATCH 06/16] refactor: improve role dependency-related functions and i18n Signed-off-by: Ryan Wang <i@ryanc.cc> --- .../extensions/role-template-post.yaml | 2 +- .../extensions/role-template-uc-content.yaml | 38 +++++---- .../modules/system/roles/RoleDetail.vue | 46 +++++------ .../modules/system/roles/RoleList.vue | 82 ++++++++++++++----- console/src/composables/use-role.ts | 17 ++-- console/src/locales/en.yaml | 10 ++- console/src/locales/zh-CN.yaml | 10 ++- console/src/locales/zh-TW.yaml | 6 +- console/src/utils/role.ts | 32 ++++++++ 9 files changed, 164 insertions(+), 79 deletions(-) create mode 100644 console/src/utils/role.ts diff --git a/application/src/main/resources/extensions/role-template-post.yaml b/application/src/main/resources/extensions/role-template-post.yaml index 70d38c21b1..bb442c66c3 100644 --- a/application/src/main/resources/extensions/role-template-post.yaml +++ b/application/src/main/resources/extensions/role-template-post.yaml @@ -6,7 +6,7 @@ metadata: halo.run/role-template: "true" annotations: rbac.authorization.halo.run/dependencies: | - [ "role-template-view-posts", "role-template-manage-snapshots", "role-template-manage-tags", "role-template-manage-categories" ] + [ "role-template-view-posts", "role-template-manage-snapshots", "role-template-manage-tags", "role-template-manage-categories", "role-template-post-author" ] rbac.authorization.halo.run/module: "Posts Management" rbac.authorization.halo.run/display-name: "Post Manage" rbac.authorization.halo.run/ui-permissions: | diff --git a/application/src/main/resources/extensions/role-template-uc-content.yaml b/application/src/main/resources/extensions/role-template-uc-content.yaml index 7b9b42a2e0..b14a984ca8 100644 --- a/application/src/main/resources/extensions/role-template-uc-content.yaml +++ b/application/src/main/resources/extensions/role-template-uc-content.yaml @@ -8,14 +8,16 @@ metadata: # Currently, yaml definition does not support i18n, please see https://github.com/halo-dev/halo/issues/3573 rbac.authorization.halo.run/display-name: "编辑者" rbac.authorization.halo.run/dependencies: | - ["role-template-post-editor"] -rules: [ ] + ["role-template-manage-posts"] +rules: [] --- apiVersion: v1alpha1 kind: "Role" metadata: name: role-template-post-editor + # Deprecated, will be removed in the future + deletionTimestamp: 2023-12-01T03:36:25.875373Z labels: halo.run/role-template: "true" annotations: @@ -24,7 +26,7 @@ metadata: rbac.authorization.halo.run/display-name: "Post Editor" rbac.authorization.halo.run/dependencies: | ["role-template-manage-posts", "role-template-post-author"] -rules: [ ] +rules: [] --- apiVersion: v1alpha1 @@ -40,7 +42,7 @@ metadata: rbac.authorization.halo.run/redirect-on-login: "/uc" rbac.authorization.halo.run/dependencies: | [ "role-template-post-author" ] -rules: [ ] +rules: [] --- apiVersion: v1alpha1 @@ -55,7 +57,7 @@ metadata: rbac.authorization.halo.run/display-name: "Post Author" rbac.authorization.halo.run/dependencies: | [ "role-template-post-contributor", "role-template-post-publisher", "role-template-post-attachment-manager" ] -rules: [ ] +rules: [] --- apiVersion: v1alpha1 @@ -71,7 +73,7 @@ metadata: rbac.authorization.halo.run/redirect-on-login: "/uc" rbac.authorization.halo.run/dependencies: | [ "role-template-post-contributor" ] -rules: [ ] +rules: [] --- apiVersion: v1alpha1 @@ -89,12 +91,12 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:posts:manage" ] rules: - - apiGroups: [ "uc.api.content.halo.run" ] - resources: [ "posts" ] - verbs: [ "get", "list", "create", "update", "delete" ] - - apiGroups: [ "uc.api.content.halo.run" ] - resources: [ "posts/draft" ] - verbs: [ "update", "get" ] + - apiGroups: ["uc.api.content.halo.run"] + resources: ["posts"] + verbs: ["get", "list", "create", "update", "delete"] + - apiGroups: ["uc.api.content.halo.run"] + resources: ["posts/draft"] + verbs: ["update", "get"] --- apiVersion: v1alpha1 @@ -109,9 +111,9 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:posts:publish" ] rules: - - apiGroups: [ "uc.api.content.halo.run" ] - resources: [ "posts/publish", "posts/unpublish" ] - verbs: [ "update" ] + - apiGroups: ["uc.api.content.halo.run"] + resources: ["posts/publish", "posts/unpublish"] + verbs: ["update"] --- apiVersion: v1alpha1 @@ -126,6 +128,6 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:attachments:manage" ] rules: - - apiGroups: [ "uc.api.content.halo.run" ] - resources: [ "attachments" ] - verbs: [ "create", "update", "delete" ] + - apiGroups: ["uc.api.content.halo.run"] + resources: ["attachments"] + verbs: ["create", "update", "delete"] diff --git a/console/console-src/modules/system/roles/RoleDetail.vue b/console/console-src/modules/system/roles/RoleDetail.vue index e8922503c3..9d8f8305d9 100644 --- a/console/console-src/modules/system/roles/RoleDetail.vue +++ b/console/console-src/modules/system/roles/RoleDetail.vue @@ -11,7 +11,7 @@ import { VDescriptionItem, } from "@halo-dev/components"; import { useRoute } from "vue-router"; -import { computed, onMounted, ref, watch } from "vue"; +import { computed, ref, watch } from "vue"; import { apiClient } from "@/utils/api-client"; import { pluginLabels, roleLabels } from "@/constants/labels"; import { rbacAnnotations } from "@/constants/annotations"; @@ -20,6 +20,8 @@ import { SUPER_ROLE_NAME } from "@/constants/constants"; import { useI18n } from "vue-i18n"; import { formatDatetime } from "@/utils/date"; import { useQuery } from "@tanstack/vue-query"; +import type { Role } from "packages/api-client/dist"; +import { resolveDeepDependencies } from "@/utils/role"; const route = useRoute(); const { t } = useI18n(); @@ -58,12 +60,14 @@ const getRoleCountText = computed(() => { return t("core.role.common.text.contains_all_permissions"); } - const dependenciesCount = JSON.parse( - formState.value.metadata.annotations?.[rbacAnnotations.DEPENDENCIES] || "[]" - ).length; + const dependencies = new Set<string>( + resolveDeepDependencies(formState.value, roleTemplates.value || []) + ); + + console.log(dependencies); return t("core.role.common.text.contains_n_permissions", { - count: dependenciesCount, + count: dependencies.size || 0, }); }); @@ -77,31 +81,27 @@ watch( } ); -const handleFetchRole = async () => { - try { - const response = await apiClient.extension.role.getv1alpha1Role({ +const { refetch } = useQuery<Role>({ + queryKey: ["role", route.params.name], + queryFn: async () => { + const { data } = await apiClient.extension.role.getv1alpha1Role({ name: route.params.name as string, }); - formState.value = response.data; - selectedRoleTemplates.value = new Set( - JSON.parse( - response.data.metadata.annotations?.[rbacAnnotations.DEPENDENCIES] || - "[]" - ) + return data; + }, + onSuccess(data) { + formState.value = data; + selectedRoleTemplates.value = new Set<string>( + resolveDeepDependencies(data, roleTemplates.value || []) ); - } catch (error) { - console.error(error); - } -}; + }, + enabled: computed(() => !!roleTemplates.value), +}); const handleUpdateRole = async () => { await handleCreateOrUpdate(); - await handleFetchRole(); + await refetch(); }; - -onMounted(() => { - handleFetchRole(); -}); </script> <template> <VPageHeader :title="$t('core.role.detail.title')"> diff --git a/console/console-src/modules/system/roles/RoleList.vue b/console/console-src/modules/system/roles/RoleList.vue index b2e0764ab8..9cb83b3d31 100644 --- a/console/console-src/modules/system/roles/RoleList.vue +++ b/console/console-src/modules/system/roles/RoleList.vue @@ -1,7 +1,7 @@ <script lang="ts" setup> // core libs -import { computed, ref, watch } from "vue"; -import type { Role } from "@halo-dev/api-client"; +import { computed, ref } from "vue"; +import type { Role, RoleList } from "@halo-dev/api-client"; // components import { @@ -25,9 +25,6 @@ import RoleEditingModal from "./components/RoleEditingModal.vue"; import { rbacAnnotations } from "@/constants/annotations"; import { formatDatetime } from "@/utils/date"; -// hooks -import { useFetchRole } from "@/composables/use-role"; - // libs import { apiClient } from "@/utils/api-client"; import Fuse from "fuse.js"; @@ -35,6 +32,8 @@ import { usePermission } from "@/utils/permission"; import { roleLabels } from "@/constants/labels"; import { SUPER_ROLE_NAME } from "@/constants/constants"; import { useI18n } from "vue-i18n"; +import { useQuery } from "@tanstack/vue-query"; +import { resolveDeepDependencies } from "@/utils/role"; const { currentUserHasPermission } = usePermission(); const { t } = useI18n(); @@ -42,26 +41,65 @@ const { t } = useI18n(); const editingModal = ref<boolean>(false); const selectedRole = ref<Role>(); -const { roles, handleFetchRoles, loading } = useFetchRole(); - let fuse: Fuse<Role> | undefined = undefined; -watch( - () => roles.value, - (value) => { - fuse = new Fuse(value, { - keys: ["spec.displayName", "metadata.name"], +const { data: roleTemplates } = useQuery({ + queryKey: ["role-templates"], + queryFn: async () => { + const { data } = await apiClient.extension.role.listv1alpha1Role({ + page: 0, + size: 0, + labelSelector: [`${roleLabels.TEMPLATE}=true`, "!halo.run/hidden"], + }); + return data.items; + }, +}); + +const { + data: roles, + isLoading, + refetch, +} = useQuery<RoleList>({ + queryKey: ["roles"], + queryFn: async () => { + const { data } = await apiClient.extension.role.listv1alpha1Role({ + page: 0, + size: 0, + labelSelector: [`!${roleLabels.TEMPLATE}`], + }); + return data; + }, + refetchInterval(data) { + const hasDeletingRole = data?.items.some( + (item) => !!item.metadata.deletionTimestamp + ); + return hasDeletingRole ? 1000 : false; + }, + onSuccess(data) { + fuse = new Fuse(data.items, { + keys: [ + { + name: "displayName", + getFn: (role) => { + return ( + role.metadata.annotations?.[rbacAnnotations.DISPLAY_NAME] || "" + ); + }, + }, + "metadata.name", + ], useExtendedSearch: true, threshold: 0.2, }); - } -); + }, + enabled: computed(() => !!roleTemplates.value), +}); const keyword = ref(""); const searchResults = computed(() => { if (!fuse || !keyword.value) { - return roles.value; + return roles.value?.items || []; } return fuse?.search(keyword.value).map((item) => item.item); @@ -76,12 +114,12 @@ const getRoleCountText = (role: Role) => { return t("core.role.common.text.contains_all_permissions"); } - const dependenciesCount = JSON.parse( - role.metadata.annotations?.[rbacAnnotations.DEPENDENCIES] || "[]" - ).length; + const dependencies = new Set<string>( + resolveDeepDependencies(role, roleTemplates.value || []) + ); return t("core.role.common.text.contains_n_permissions", { - count: dependenciesCount, + count: dependencies.size || 0, }); }; @@ -92,7 +130,7 @@ const handleOpenEditingModal = (role: Role) => { const onEditingModalClose = () => { selectedRole.value = undefined; - handleFetchRoles(); + refetch(); }; const handleCloneRole = async (role: Role) => { @@ -152,7 +190,7 @@ const handleDelete = async (role: Role) => { } catch (e) { console.error("Failed to delete role", e); } finally { - handleFetchRoles(); + refetch(); } }, }); @@ -200,7 +238,7 @@ const handleDelete = async (role: Role) => { </div> </div> </template> - <VLoading v-if="loading" /> + <VLoading v-if="isLoading" /> <Transition v-else appear name="fade"> <ul class="box-border h-full w-full divide-y divide-gray-100" diff --git a/console/src/composables/use-role.ts b/console/src/composables/use-role.ts index 480bd8c1a2..e0ecd2c06a 100644 --- a/console/src/composables/use-role.ts +++ b/console/src/composables/use-role.ts @@ -6,6 +6,7 @@ import { rbacAnnotations } from "@/constants/annotations"; import { apiClient } from "@/utils/api-client"; import { Toast } from "@halo-dev/components"; import { useI18n } from "vue-i18n"; +import { resolveDeepDependencies } from "@/utils/role"; interface RoleTemplateGroup { module: string | null | undefined; @@ -38,7 +39,7 @@ interface useRoleFormReturn { initialFormState: Role; saving: Ref<boolean>; isUpdateMode: ComputedRef<boolean>; - handleCreateOrUpdate: () => void; + handleCreateOrUpdate: () => Promise<void>; } interface useRoleTemplateSelectionReturn { @@ -271,15 +272,15 @@ export function useRoleTemplateSelection( const role = roleTemplates.value?.find( (role) => role.metadata.name === value ); - const dependencies = - role?.metadata.annotations?.[rbacAnnotations.DEPENDENCIES]; - if (!dependencies) { + + if (!role) { return; } - const dependenciesArray = JSON.parse(dependencies); - dependenciesArray.forEach((role) => { - selectedRoleTemplates.value.add(role); - }); + + selectedRoleTemplates.value = new Set([ + role.metadata.name, + ...resolveDeepDependencies(role, roleTemplates.value || []), + ]); }; return { diff --git a/console/src/locales/en.yaml b/console/src/locales/en.yaml index ded65111dc..421577dfd8 100644 --- a/console/src/locales/en.yaml +++ b/console/src/locales/en.yaml @@ -1322,6 +1322,11 @@ core: role-template-view-tags: Tag View role-template-manage-categories: Category Manage role-template-view-categories: Category View + role-template-manage-posts: Post Manage + role-template-post-author: Allows you to manage your own posts + role-template-post-contributor: Contributions allowed + role-template-post-publisher: Allow to publish own posts + role-template-post-attachment-manager: Allow images to be uploaded in posts Roles Management: Roles Role Manage: Role Manage Role View: Role View @@ -1352,9 +1357,8 @@ core: Notification Configuration: Notification Configuration Configure Notifier: Configure Notifier Post Attachment Manager: Allow images to be uploaded in posts - Post Author: Contributions allowed - Post Contributor: Allows you to manage your own posts - Post Editor: Allow management of all posts + Post Author: Allows you to manage your own posts + Post Contributor: Contributions allowed Post Publisher: Allow to publish own posts components: submit_button: diff --git a/console/src/locales/zh-CN.yaml b/console/src/locales/zh-CN.yaml index 31939888ee..55a6594982 100644 --- a/console/src/locales/zh-CN.yaml +++ b/console/src/locales/zh-CN.yaml @@ -1270,6 +1270,11 @@ core: role-template-view-tags: 标签查看 role-template-manage-categories: 分类管理 role-template-view-categories: 分类查看 + role-template-manage-posts: 文章管理 + role-template-post-author: 允许管理自己的文章 + role-template-post-contributor: 允许投稿 + role-template-post-publisher: 允许发布自己的文章 + role-template-post-attachment-manager: 允许在文章中上传图片 Roles Management: 角色 Role Manage: 角色管理 Role View: 角色查看 @@ -1299,9 +1304,8 @@ core: Cache Manage: 缓存管理 Notification Configuration: 通知配置 Configure Notifier: 配置通知器 - Post Editor: 允许管理所有文章 - Post Contributor: 允许管理自己的文章 - Post Author: 允许投稿 + Post Contributor: 允许投稿 + Post Author: 允许管理自己的文章 Post Attachment Manager: 允许在文章中上传图片 Post Publisher: 允许发布自己的文章 components: diff --git a/console/src/locales/zh-TW.yaml b/console/src/locales/zh-TW.yaml index 53278cf4e5..eb4c6d0863 100644 --- a/console/src/locales/zh-TW.yaml +++ b/console/src/locales/zh-TW.yaml @@ -1236,6 +1236,11 @@ core: role-template-view-tags: 標籤查看 role-template-manage-categories: 分類管理 role-template-view-categories: 分類查看 + role-template-manage-posts: 文章管理 + role-template-post-author: 允许管理自己的文章 + role-template-post-contributor: 允许投稿 + role-template-post-publisher: 允許發布自己的文章 + role-template-post-attachment-manager: 允許在文章中上傳圖片 Roles Management: 角色 Role Manage: 角色管理 Role View: 角色查看 @@ -1268,7 +1273,6 @@ core: Post Attachment Manager: 允許在文章中上傳圖片 Post Author: 允许管理自己的文章 Post Contributor: 允许投稿 - Post Editor: 允许管理所有文章 Post Publisher: 允許發布自己的文章 components: submit_button: diff --git a/console/src/utils/role.ts b/console/src/utils/role.ts new file mode 100644 index 0000000000..66c70132eb --- /dev/null +++ b/console/src/utils/role.ts @@ -0,0 +1,32 @@ +import { rbacAnnotations } from "@/constants/annotations"; +import type { Role } from "@halo-dev/api-client"; + +export function resolveDeepDependencies( + role: Role, + roleTemplates: Role[] +): string[] { + if (!role) { + return []; + } + + const result: string[] = []; + + const dependencies: string[] = JSON.parse( + role.metadata.annotations?.[rbacAnnotations.DEPENDENCIES] || "[]" + ); + + dependencies.forEach((depName) => { + result.push(depName); + const dep = roleTemplates.find((item) => item.metadata.name === depName); + + if (!dep) { + return; + } + + resolveDeepDependencies(dep, roleTemplates).forEach((nextDep) => + result.push(nextDep) + ); + }); + + return result; +} From 13cf24f6e930441c5ba6457db7288309ec534046 Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Mon, 22 Jan 2024 16:47:03 +0800 Subject: [PATCH 07/16] Reformat code Signed-off-by: Ryan Wang <i@ryanc.cc> --- .../extensions/role-template-uc-content.yaml | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/application/src/main/resources/extensions/role-template-uc-content.yaml b/application/src/main/resources/extensions/role-template-uc-content.yaml index b14a984ca8..fd9aa1cece 100644 --- a/application/src/main/resources/extensions/role-template-uc-content.yaml +++ b/application/src/main/resources/extensions/role-template-uc-content.yaml @@ -9,7 +9,7 @@ metadata: rbac.authorization.halo.run/display-name: "编辑者" rbac.authorization.halo.run/dependencies: | ["role-template-manage-posts"] -rules: [] +rules: [ ] --- apiVersion: v1alpha1 @@ -26,7 +26,7 @@ metadata: rbac.authorization.halo.run/display-name: "Post Editor" rbac.authorization.halo.run/dependencies: | ["role-template-manage-posts", "role-template-post-author"] -rules: [] +rules: [ ] --- apiVersion: v1alpha1 @@ -42,7 +42,7 @@ metadata: rbac.authorization.halo.run/redirect-on-login: "/uc" rbac.authorization.halo.run/dependencies: | [ "role-template-post-author" ] -rules: [] +rules: [ ] --- apiVersion: v1alpha1 @@ -57,7 +57,7 @@ metadata: rbac.authorization.halo.run/display-name: "Post Author" rbac.authorization.halo.run/dependencies: | [ "role-template-post-contributor", "role-template-post-publisher", "role-template-post-attachment-manager" ] -rules: [] +rules: [ ] --- apiVersion: v1alpha1 @@ -73,7 +73,7 @@ metadata: rbac.authorization.halo.run/redirect-on-login: "/uc" rbac.authorization.halo.run/dependencies: | [ "role-template-post-contributor" ] -rules: [] +rules: [ ] --- apiVersion: v1alpha1 @@ -91,12 +91,12 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:posts:manage" ] rules: - - apiGroups: ["uc.api.content.halo.run"] - resources: ["posts"] - verbs: ["get", "list", "create", "update", "delete"] - - apiGroups: ["uc.api.content.halo.run"] - resources: ["posts/draft"] - verbs: ["update", "get"] + - apiGroups: [ "uc.api.content.halo.run" ] + resources: [ "posts" ] + verbs: [ "get", "list", "create", "update", "delete" ] + - apiGroups: [ "uc.api.content.halo.run" ] + resources: [ "posts/draft" ] + verbs: [ "update", "get" ] --- apiVersion: v1alpha1 @@ -111,9 +111,9 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:posts:publish" ] rules: - - apiGroups: ["uc.api.content.halo.run"] - resources: ["posts/publish", "posts/unpublish"] - verbs: ["update"] + - apiGroups: [ "uc.api.content.halo.run" ] + resources: [ "posts/publish", "posts/unpublish" ] + verbs: [ "update" ] --- apiVersion: v1alpha1 @@ -128,6 +128,6 @@ metadata: rbac.authorization.halo.run/ui-permissions: | [ "uc:attachments:manage" ] rules: - - apiGroups: ["uc.api.content.halo.run"] - resources: ["attachments"] - verbs: ["create", "update", "delete"] + - apiGroups: [ "uc.api.content.halo.run" ] + resources: [ "attachments" ] + verbs: [ "create", "update", "delete" ] From e2f840733d0e531936c06e1e6c43c105125ed08c Mon Sep 17 00:00:00 2001 From: John Niang <johnniang@foxmail.com> Date: Mon, 3 Jun 2024 23:05:45 +0800 Subject: [PATCH 08/16] Upgrade to Gradle 8.8 (#6033) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind cleanup /area core #### What this PR does / why we need it: This PR upgrades Gradle to 8.8. See https://github.com/gradle/gradle/releases/tag/v8.8.0 for more. #### Does this PR introduce a user-facing change? ```release-note 升级 Gradle 至 8.8 ``` --- gradle/wrapper/gradle-wrapper.jar | Bin 63721 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew.bat | 20 ++++++++++---------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c49b765f8051ef9d0a6055ff8e46073d8..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 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 literal 63721 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鯊%1Et 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⁢ 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a80b22ce5c..a4413138c9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 6689b85bee..7101f8e467 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 82e269ad0176e7ecff0b49f27bd4f838dc8c850b Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Wed, 5 Jun 2024 10:31:18 +0800 Subject: [PATCH 09/16] fix: missing default values for system settings (#6035) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug /area core /milestone 2.16.x #### What this PR does / why we need it: 补充缺失的系统设置默认值。 #### Does this PR introduce a user-facing change? ```release-note 修复系统设置未保存导致无法正常注册的问题 ``` --- .../resources/extensions/system-configurable-configmap.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/main/resources/extensions/system-configurable-configmap.yaml b/application/src/main/resources/extensions/system-configurable-configmap.yaml index e30b1dca81..0b31723e15 100644 --- a/application/src/main/resources/extensions/system-configurable-configmap.yaml +++ b/application/src/main/resources/extensions/system-configurable-configmap.yaml @@ -6,7 +6,8 @@ data: user: | { "allowRegistration": false, - "defaultRole": "", + "mustVerifyEmailOnRegistration": false, + "defaultRole": "guest", "avatarPolicy": "default-policy" } theme: | From 3dc5156fb11b8405bc13b4c9d98c70778c6c9776 Mon Sep 17 00:00:00 2001 From: John Niang <johnniang@foxmail.com> Date: Thu, 6 Jun 2024 11:42:13 +0800 Subject: [PATCH 10/16] Fix concurrent issue during bundle file concurrent generation testing (#6043) #### What type of PR is this? /kind failing-test /area core /milestone 2.17.x #### What this PR does / why we need it: I wrongly invoked `Arraylist#add`(probes) method in multi threads. So the unit test was unstable and might encounter the problem as follows: ```java Expected :1 Actual :0 <Click to see difference> org.opentest4j.AssertionFailedError: expected: <1> but was: <0> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:166) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:161) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:632) at run.halo.app.core.extension.service.impl.PluginServiceImplTest$BundleCacheTest.concurrentComputeBundleFileIfAbsent(PluginServiceImplTest.java:460) ``` See https://github.com/halo-dev/halo/actions/runs/9382059472/job/25832681545 for more. This PR moves the invocation outside thread tasks. #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../service/impl/PluginServiceImplTest.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java b/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java index 15dfb2cb01..532dfdd432 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java @@ -432,17 +432,20 @@ void concurrentComputeBundleFileIfAbsent() { var probes = new ArrayList<PublisherProbe<DataBuffer>>(); List<? extends Future<?>> futures = IntStream.range(0, 10) - .mapToObj(i -> executorService.submit(() -> { + .mapToObj(i -> { var fakeContent = Mono.<DataBuffer>just(sharedInstance.wrap( ("fake-content-" + i).getBytes(UTF_8) )); var probe = PublisherProbe.of(fakeContent); probes.add(probe); - cache.computeIfAbsent("fake-version", probe.mono()) - .as(StepVerifier::create) - .expectNextCount(1) - .verifyComplete(); - })) + return executorService.submit( + () -> { + cache.computeIfAbsent("fake-version", probe.mono()) + .as(StepVerifier::create) + .expectNextCount(1) + .verifyComplete(); + }); + }) .toList(); executorService.shutdown(); futures.forEach(future -> { From 32437b5996b021f29d077662c4986724190539db Mon Sep 17 00:00:00 2001 From: mashirot <shiina@sakurasou.io> Date: Thu, 6 Jun 2024 14:43:21 +0800 Subject: [PATCH 11/16] fix: content offset caused by empty slot (#6040) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /area ui /kind improvement #### Which issue(s) this PR fixes: Fixes #5877 ```release-note 修复Tag Icon为空时,后台文章的Tag内容不居中 ``` --- ui/packages/components/src/components/tag/Tag.vue | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/ui/packages/components/src/components/tag/Tag.vue b/ui/packages/components/src/components/tag/Tag.vue index d73cc14c50..579be23381 100644 --- a/ui/packages/components/src/components/tag/Tag.vue +++ b/ui/packages/components/src/components/tag/Tag.vue @@ -51,7 +51,8 @@ const classes = computed(() => { h-5 text-xs border - border-solid; + border-solid + px-1; &.tag-default { border: 1px solid #d9d9d9; @@ -82,13 +83,5 @@ const classes = computed(() => { .tag-content { @apply px-1; } - - .tag-left-icon { - @apply pl-1; - } - - .tag-right-icon { - @apply pr-1; - } } </style> From 119ccd60e68f39c6a1826ac8189ea47ea92543a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 09:01:11 +0000 Subject: [PATCH 12/16] Add renovate.json --- renovate.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000000..93afd4a437 --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} From 778db39030e11ec4f9e5eeba45a65838a1f3ab0e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:14:25 +0800 Subject: [PATCH 13/16] chore(deps): update dependency @tailwindcss/container-queries to v0.1.1 (#8) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ui/pnpm-lock.yaml | 1741 ++++++++++++++++++++++++++++++--------------- 1 file changed, 1160 insertions(+), 581 deletions(-) diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 03a9e165b9..5867661f4d 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -221,7 +221,7 @@ importers: version: 0.4.2(tailwindcss@3.3.0(postcss@8.4.21)) '@tailwindcss/container-queries': specifier: ^0.1.0 - version: 0.1.0(tailwindcss@3.3.0(postcss@8.4.21)) + version: 0.1.1(tailwindcss@3.3.0(postcss@8.4.21)) '@tailwindcss/forms': specifier: ^0.5.7 version: 0.5.7(tailwindcss@3.3.0(postcss@8.4.21)) @@ -248,10 +248,10 @@ importers: version: 0.7.39 '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3)) + version: 5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) '@vitejs/plugin-vue-jsx': specifier: ^3.1.0 - version: 3.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3)) + version: 3.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) '@vitest/ui': specifier: ^0.34.1 version: 0.34.1(vitest@0.34.1) @@ -341,25 +341,25 @@ importers: version: 0.14.15(@vue/compiler-sfc@3.4.27)(vue-template-compiler@2.7.14) vite: specifier: ^5.2.11 - version: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + version: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vite-plugin-externals: specifier: ^0.6.2 - version: 0.6.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 0.6.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) vite-plugin-html: specifier: ^3.2.2 - version: 3.2.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 3.2.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) vite-plugin-pwa: specifier: ^0.20.0 - version: 0.20.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + version: 0.20.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) vite-plugin-static-copy: specifier: ^1.0.4 - version: 1.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 1.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) vite-plugin-vue-devtools: specifier: ^7.2.1 - version: 7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3)) + version: 7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) vitest: specifier: ^0.34.1 - version: 0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + version: 0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue-tsc: specifier: ^1.8.27 version: 1.8.27(typescript@5.3.3) @@ -387,7 +387,7 @@ importers: version: 0.7.6 vite-plugin-dts: specifier: ^3.9.1 - version: 3.9.1(@types/node@20.14.2)(rollup@2.79.1)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 3.9.1(@types/node@20.14.2)(rollup@2.79.1)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) packages/components: dependencies: @@ -427,7 +427,7 @@ importers: version: 7.6.3(@vue/compiler-core@3.4.27)(vue@3.4.27(typescript@5.4.5)) '@storybook/vue3-vite': specifier: ^7.6.3 - version: 7.6.3(@vue/compiler-core@3.4.27)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)) + version: 7.6.3(@vue/compiler-core@3.4.27)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5)) eslint-plugin-storybook: specifier: ^0.6.15 version: 0.6.15(eslint@8.43.0)(typescript@5.4.5) @@ -445,7 +445,7 @@ importers: version: 0.14.15(@vue/compiler-sfc@3.4.27)(vue-template-compiler@2.7.14) vite-plugin-dts: specifier: ^3.9.1 - version: 3.9.1(@types/node@20.14.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 3.9.1(@types/node@20.14.11)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) packages/editor: dependencies: @@ -599,7 +599,7 @@ importers: version: 16.2.1(typescript@5.4.5) vite-plugin-dts: specifier: ^3.9.1 - version: 3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) packages/shared: dependencies: @@ -615,7 +615,7 @@ importers: devDependencies: vite-plugin-dts: specifier: ^3.9.1 - version: 3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + version: 3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) packages/ui-plugin-bundler-kit: dependencies: @@ -677,6 +677,10 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.20.10': resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} @@ -689,6 +693,10 @@ packages: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.24.9': + resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} + engines: {node: '>=6.9.0'} + '@babel/core@7.20.12': resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} @@ -701,6 +709,10 @@ packages: resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} + '@babel/core@7.24.9': + resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.22.5': resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} engines: {node: '>=6.9.0'} @@ -709,6 +721,10 @@ packages: resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} engines: {node: '>=6.9.0'} + '@babel/generator@7.24.10': + resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.24.5': resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} @@ -717,10 +733,18 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.20.7': resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} @@ -735,6 +759,10 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.24.8': + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.23.7': resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==} engines: {node: '>=6.9.0'} @@ -747,12 +775,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.24.8': + resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.22.15': resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.24.7': + resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.4.3': resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} peerDependencies: @@ -771,6 +811,10 @@ packages: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.22.5': resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} @@ -779,10 +823,18 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.23.0': resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} @@ -791,6 +843,10 @@ packages: resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.18.6': resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} @@ -803,6 +859,10 @@ packages: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.20.11': resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} @@ -819,10 +879,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.24.9': + resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.22.5': resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} @@ -831,12 +901,22 @@ packages: resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.22.20': resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-remap-async-to-generator@7.24.7': + resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.22.20': resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} @@ -849,6 +929,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.24.7': + resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.20.2': resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} @@ -861,10 +947,18 @@ packages: resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.5': resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} engines: {node: '>=6.9.0'} @@ -877,6 +971,10 @@ packages: resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.22.5': resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} @@ -889,6 +987,10 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -901,6 +1003,10 @@ packages: resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.18.6': resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} @@ -909,10 +1015,18 @@ packages: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.20': resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.24.7': + resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.20.7': resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} engines: {node: '>=6.9.0'} @@ -925,6 +1039,10 @@ packages: resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.24.8': + resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.5': resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -937,6 +1055,10 @@ packages: resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.23.5': resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} engines: {node: '>=6.0.0'} @@ -952,8 +1074,13 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5': - resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': + resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -964,8 +1091,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1': - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': + resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -976,8 +1103,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1': - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 @@ -988,8 +1115,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1': - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': + resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1050,8 +1177,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.24.1': - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + '@babel/plugin-syntax-import-assertions@7.24.7': + resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1068,6 +1195,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.24.7': + resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -1144,8 +1277,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-arrow-functions@7.24.1': - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1156,8 +1289,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.3': - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + '@babel/plugin-transform-async-generator-functions@7.24.7': + resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1168,8 +1301,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.1': - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1180,8 +1313,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.1': - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1192,8 +1325,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.5': - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + '@babel/plugin-transform-block-scoping@7.24.7': + resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1204,8 +1337,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.1': - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + '@babel/plugin-transform-class-properties@7.24.7': + resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1216,8 +1349,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-class-static-block@7.24.4': - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -1228,8 +1361,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-classes@7.24.5': - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + '@babel/plugin-transform-classes@7.24.8': + resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1240,8 +1373,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.1': - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1252,8 +1385,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.5': - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1264,8 +1397,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.1': - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1276,8 +1409,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.1': - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1288,8 +1421,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.1': - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1300,8 +1433,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.1': - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1312,8 +1445,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.1': - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1330,8 +1463,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.1': - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1342,8 +1475,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.1': - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + '@babel/plugin-transform-function-name@7.24.7': + resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1354,8 +1487,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.1': - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1366,8 +1499,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.1': - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + '@babel/plugin-transform-literals@7.24.7': + resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1378,8 +1511,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.1': - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1390,8 +1523,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.1': - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1402,8 +1535,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.1': - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1414,8 +1547,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.1': - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1426,8 +1559,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.1': - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + '@babel/plugin-transform-modules-systemjs@7.24.7': + resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1438,8 +1571,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.1': - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1450,14 +1583,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-new-target@7.23.3': resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-new-target@7.24.1': - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1468,8 +1607,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1': - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1480,8 +1619,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.1': - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1492,8 +1631,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.5': - resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1504,8 +1643,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.1': - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1516,8 +1655,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.1': - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1528,8 +1667,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.5': - resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1540,8 +1679,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.5': - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1552,8 +1691,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.24.1': - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + '@babel/plugin-transform-private-methods@7.24.7': + resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1564,8 +1703,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.5': - resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1576,8 +1715,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.1': - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1588,8 +1727,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.1': - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1600,8 +1739,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.1': - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1612,8 +1751,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.1': - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1624,8 +1763,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.1': - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1636,8 +1775,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.1': - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1648,8 +1787,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.1': - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1660,8 +1799,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.5': - resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1678,8 +1817,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.1': - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1690,8 +1829,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.1': - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1702,8 +1841,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.1': - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1714,8 +1853,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-unicode-sets-regex@7.24.1': - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + '@babel/plugin-transform-unicode-sets-regex@7.24.7': + resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1726,8 +1865,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-env@7.24.5': - resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} + '@babel/preset-env@7.24.8': + resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1762,8 +1901,8 @@ packages: resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.24.5': - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + '@babel/runtime@7.24.8': + resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} engines: {node: '>=6.9.0'} '@babel/standalone@7.20.15': @@ -1782,6 +1921,10 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.22.5': resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} engines: {node: '>=6.9.0'} @@ -1794,6 +1937,10 @@ packages: resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.22.5': resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} @@ -1806,6 +1953,10 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.24.9': + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2432,6 +2583,7 @@ packages: '@humanwhocodes/config-array@0.11.10': resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -2439,6 +2591,7 @@ packages: '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -3398,6 +3551,7 @@ packages: '@storybook/addon-styling@1.3.7': resolution: {integrity: sha512-JSBZMOrSw/3rlq5YoEI7Qyq703KSNP0Jd+gxTWu3/tP6245mpjn2dXnR8FvqVxCi+FG4lt2kQyPzgsuwEw1SSA==} + deprecated: 'This package has been split into @storybook/addon-styling-webpack and @storybook/addon-themes. More info: https://github.com/storybookjs/addon-styling' hasBin: true peerDependencies: less: ^3.5.0 || ^4.0.0 @@ -3575,8 +3729,8 @@ packages: peerDependencies: tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' - '@tailwindcss/container-queries@0.1.0': - resolution: {integrity: sha512-t1GeJ9P8ual160BvKy6Y1sG7bjChArMaK6iRXm3ZYjZGN2FTzmqb5ztsTDb9AsTSJD4NMHtsnaI2ielrXEk+hw==} + '@tailwindcss/container-queries@0.1.1': + resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==} peerDependencies: tailwindcss: '>=3.2.0' @@ -3983,6 +4137,12 @@ packages: '@types/node@18.19.34': resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} + '@types/node@18.19.41': + resolution: {integrity: sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==} + + '@types/node@20.14.11': + resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} + '@types/node@20.14.2': resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} @@ -4480,6 +4640,7 @@ packages: abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -4525,6 +4686,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} @@ -4562,8 +4728,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -4883,6 +5049,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4985,6 +5156,9 @@ packages: caniuse-lite@1.0.30001620: resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==} + caniuse-lite@1.0.30001642: + resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -5032,8 +5206,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} ci-info@3.4.0: @@ -5410,6 +5584,15 @@ packages: supports-color: optional: true + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.0: resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} engines: {node: '>=0.10.0'} @@ -5578,6 +5761,7 @@ packages: domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead domhandler@4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} @@ -5647,6 +5831,9 @@ packages: electron-to-chromium@1.4.776: resolution: {integrity: sha512-s694bi3+gUzlliqxjPHpa9NRTlhzTgB34aan+pVKZmOTGy2xoZXl+8E1B8i5p5rtev3PKMK/H4asgNejC+YHNg==} + electron-to-chromium@1.4.832: + resolution: {integrity: sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA==} + element-resize-detector@1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -5676,8 +5863,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.16.1: - resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} + enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} engines: {node: '>=10.13.0'} enquirer@2.3.6: @@ -5738,8 +5925,8 @@ packages: es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -6129,6 +6316,9 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -6716,6 +6906,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -7092,8 +7283,8 @@ packages: engines: {node: '>=10'} hasBin: true - jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true @@ -7432,9 +7623,11 @@ packages: loupe@2.3.4: resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -7831,6 +8024,9 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.17: + resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} + nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -7884,6 +8080,10 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} @@ -8987,8 +9187,8 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} @@ -9493,6 +9693,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.31.3: + resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -9617,6 +9822,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -9874,6 +10082,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@6.0.2: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} @@ -10541,9 +10755,9 @@ snapshots: '@antfu/utils@0.7.7': {} - '@apideck/better-ajv-errors@0.3.6(ajv@8.13.0)': + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: - ajv: 8.13.0 + ajv: 8.17.1 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -10566,12 +10780,19 @@ snapshots: '@babel/highlight': 7.24.5 picocolors: 1.0.1 + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + '@babel/compat-data@7.20.10': {} '@babel/compat-data@7.23.5': {} '@babel/compat-data@7.24.4': {} + '@babel/compat-data@7.24.9': {} + '@babel/core@7.20.12': dependencies: '@ampproject/remapping': 2.2.0 @@ -10632,6 +10853,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.24.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.10 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helpers': 7.24.8 + '@babel/parser': 7.24.8 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.22.5': dependencies: '@babel/types': 7.24.5 @@ -10646,6 +10887,13 @@ snapshots: '@jridgewell/trace-mapping': 0.3.20 jsesc: 2.5.2 + '@babel/generator@7.24.10': + dependencies: + '@babel/types': 7.24.9 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + '@babel/generator@7.24.5': dependencies: '@babel/types': 7.24.5 @@ -10657,10 +10905,21 @@ snapshots: dependencies: '@babel/types': 7.23.5 + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.24.9 + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: '@babel/types': 7.24.5 + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12)': dependencies: '@babel/compat-data': 7.20.10 @@ -10686,6 +10945,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.24.8': + dependencies: + '@babel/compat-data': 7.24.9 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 @@ -10725,6 +10992,21 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 @@ -10732,13 +11014,20 @@ snapshots: regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5)': + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 @@ -10750,12 +11039,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4(supports-color@8.1.1) + '@babel/core': 7.24.9 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -10765,6 +11054,10 @@ snapshots: '@babel/helper-environment-visitor@7.22.5': {} + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.24.9 + '@babel/helper-function-name@7.22.5': dependencies: '@babel/template': 7.24.0 @@ -10775,10 +11068,19 @@ snapshots: '@babel/template': 7.24.0 '@babel/types': 7.24.5 + '@babel/helper-function-name@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.9 + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.24.5 + '@babel/helper-hoist-variables@7.24.7': + dependencies: + '@babel/types': 7.24.9 + '@babel/helper-member-expression-to-functions@7.23.0': dependencies: '@babel/types': 7.24.5 @@ -10787,6 +11089,13 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.18.6': dependencies: '@babel/types': 7.24.5 @@ -10799,6 +11108,13 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.20.11': dependencies: '@babel/helper-environment-visitor': 7.22.5 @@ -10830,14 +11146,31 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.5 '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.24.5 + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.24.9 + '@babel/helper-plugin-utils@7.22.5': {} '@babel/helper-plugin-utils@7.24.5': {} + '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 @@ -10845,12 +11178,14 @@ snapshots: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 - '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5)': + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 + '@babel/core': 7.24.9 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-wrap-function': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5)': dependencies: @@ -10873,6 +11208,15 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.20.2': dependencies: '@babel/types': 7.24.5 @@ -10885,10 +11229,24 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.24.5 + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-split-export-declaration@7.22.5': dependencies: '@babel/types': 7.24.5 @@ -10901,28 +11259,47 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.24.9 + '@babel/helper-string-parser@7.22.5': {} '@babel/helper-string-parser@7.23.4': {} '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-validator-identifier@7.22.20': {} '@babel/helper-validator-identifier@7.22.5': {} '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-option@7.18.6': {} '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.24.0 '@babel/types': 7.24.5 + '@babel/helper-wrap-function@7.24.7': + dependencies: + '@babel/helper-function-name': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color + '@babel/helpers@7.20.7': dependencies: '@babel/template': 7.22.5 @@ -10947,6 +11324,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.24.8': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.9 + '@babel/highlight@7.22.5': dependencies: '@babel/helper-validator-identifier': 7.24.5 @@ -10966,6 +11348,13 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + '@babel/parser@7.23.5': dependencies: '@babel/types': 7.23.5 @@ -10978,21 +11367,25 @@ snapshots: dependencies: '@babel/types': 7.24.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5)': + '@babel/parser@7.24.8': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/types': 7.24.9 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11001,12 +11394,14 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11014,11 +11409,11 @@ snapshots: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-proposal-decorators@7.23.7(@babel/core@7.24.5)': dependencies: @@ -11031,18 +11426,18 @@ snapshots: dependencies: '@babel/core': 7.23.5 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.5)': @@ -11050,9 +11445,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.5)': @@ -11060,9 +11455,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.24.5)': @@ -11075,9 +11470,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.5)': @@ -11085,9 +11480,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.5)': @@ -11100,10 +11495,10 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11115,6 +11510,11 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 @@ -11125,14 +11525,19 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.9)': + dependencies: + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5)': @@ -11150,9 +11555,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.5)': @@ -11160,9 +11565,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.5)': @@ -11170,9 +11575,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.5)': @@ -11180,9 +11585,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.5)': @@ -11190,9 +11595,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.5)': @@ -11200,9 +11605,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.5)': @@ -11210,9 +11615,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.5)': @@ -11220,9 +11625,9 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5)': @@ -11241,10 +11646,10 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.5)': @@ -11252,10 +11657,10 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11265,13 +11670,15 @@ snapshots: '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.5) - '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5)': + '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11280,32 +11687,34 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.5) - '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11313,11 +11722,13 @@ snapshots: '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11326,12 +11737,14 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5)': + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.5)': dependencies: @@ -11346,17 +11759,19 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - '@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11364,21 +11779,21 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.15 - '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.24.7 '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11386,21 +11801,21 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11408,11 +11823,11 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11420,11 +11835,13 @@ snapshots: '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11432,11 +11849,11 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) '@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11449,11 +11866,13 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11462,12 +11881,12 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11475,21 +11894,21 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) '@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11497,21 +11916,21 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11519,11 +11938,13 @@ snapshots: '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11532,12 +11953,14 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 - '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11547,13 +11970,15 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.24.5 - '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11561,11 +11986,13 @@ snapshots: '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.5)': dependencies: @@ -11573,21 +12000,21 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11595,11 +12022,11 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11607,11 +12034,11 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.5) - '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11622,13 +12049,13 @@ snapshots: '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.5) '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11636,11 +12063,13 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) - '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11648,11 +12077,11 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11661,22 +12090,24 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.5) - '@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11684,11 +12115,13 @@ snapshots: '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.5)': dependencies: @@ -11698,23 +12131,25 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.5) - '@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11722,10 +12157,10 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 - '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.5)': @@ -11733,20 +12168,20 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11754,41 +12189,43 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.5)': dependencies: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5)': dependencies: @@ -11811,10 +12248,10 @@ snapshots: '@babel/core': 7.23.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11822,11 +12259,11 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11834,11 +12271,11 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.5)': dependencies: @@ -11846,11 +12283,11 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) + '@babel/helper-plugin-utils': 7.24.8 '@babel/preset-env@7.23.5(@babel/core@7.23.5)': dependencies: @@ -11938,88 +12375,88 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-env@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) + '@babel/preset-env@7.24.8(@babel/core@7.24.9)': + dependencies: + '@babel/compat-data': 7.24.9 + '@babel/core': 7.24.9 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.9) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.9) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.9) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.9) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.9) core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: @@ -12039,9 +12476,9 @@ snapshots: '@babel/types': 7.24.5 esutils: 2.0.3 - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/types': 7.24.5 esutils: 2.0.3 @@ -12070,7 +12507,7 @@ snapshots: dependencies: regenerator-runtime: 0.13.9 - '@babel/runtime@7.24.5': + '@babel/runtime@7.24.8': dependencies: regenerator-runtime: 0.14.1 @@ -12094,6 +12531,12 @@ snapshots: '@babel/parser': 7.24.5 '@babel/types': 7.24.5 + '@babel/template@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 + '@babel/traverse@7.22.5': dependencies: '@babel/code-frame': 7.22.5 @@ -12139,6 +12582,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.24.8': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.10 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.22.5': dependencies: '@babel/helper-string-parser': 7.22.5 @@ -12157,6 +12615,12 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 + '@babel/types@7.24.9': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + '@bcoe/v8-coverage@0.2.3': {} '@changesets/apply-release-plan@6.1.2': @@ -13125,6 +13589,14 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@microsoft/api-extractor-model@7.28.13(@types/node@20.14.11)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 4.0.2(@types/node@20.14.11) + transitivePeerDependencies: + - '@types/node' + '@microsoft/api-extractor-model@7.28.13(@types/node@20.14.2)': dependencies: '@microsoft/tsdoc': 0.14.2 @@ -13151,6 +13623,24 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@microsoft/api-extractor@7.43.0(@types/node@20.14.11)': + dependencies: + '@microsoft/api-extractor-model': 7.28.13(@types/node@20.14.11) + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 4.0.2(@types/node@20.14.11) + '@rushstack/rig-package': 0.5.2 + '@rushstack/terminal': 0.10.0(@types/node@20.14.11) + '@rushstack/ts-command-line': 4.19.1(@types/node@20.14.11) + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.4.2 + transitivePeerDependencies: + - '@types/node' + '@microsoft/api-extractor@7.43.0(@types/node@20.14.2)': dependencies: '@microsoft/api-extractor-model': 7.28.13(@types/node@20.14.2) @@ -13668,14 +14158,16 @@ snapshots: rollup: 2.79.1 slash: 3.0.0 - '@rollup/plugin-babel@5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@2.79.1)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.24.9)(@types/babel__core@7.20.5)(rollup@2.79.1)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 + '@babel/core': 7.24.9 + '@babel/helper-module-imports': 7.24.7 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 optionalDependencies: '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color '@rollup/plugin-commonjs@22.0.2(rollup@2.79.1)': dependencies: @@ -13814,6 +14306,17 @@ snapshots: optionalDependencies: '@types/node': 18.13.0 + '@rushstack/node-core-library@4.0.2(@types/node@20.14.11)': + dependencies: + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + z-schema: 5.0.4 + optionalDependencies: + '@types/node': 20.14.11 + '@rushstack/node-core-library@4.0.2(@types/node@20.14.2)': dependencies: fs-extra: 7.0.1 @@ -13837,6 +14340,13 @@ snapshots: optionalDependencies: '@types/node': 18.13.0 + '@rushstack/terminal@0.10.0(@types/node@20.14.11)': + dependencies: + '@rushstack/node-core-library': 4.0.2(@types/node@20.14.11) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 20.14.11 + '@rushstack/terminal@0.10.0(@types/node@20.14.2)': dependencies: '@rushstack/node-core-library': 4.0.2(@types/node@20.14.2) @@ -13853,6 +14363,15 @@ snapshots: transitivePeerDependencies: - '@types/node' + '@rushstack/ts-command-line@4.19.1(@types/node@20.14.11)': + dependencies: + '@rushstack/terminal': 0.10.0(@types/node@20.14.11) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.1 + transitivePeerDependencies: + - '@types/node' + '@rushstack/ts-command-line@4.19.1(@types/node@20.14.2)': dependencies: '@rushstack/terminal': 0.10.0(@types/node@20.14.2) @@ -14091,7 +14610,7 @@ snapshots: - encoding - supports-color - '@storybook/builder-vite@7.6.3(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))': + '@storybook/builder-vite@7.6.3(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))': dependencies: '@storybook/channels': 7.6.3 '@storybook/client-logger': 7.6.3 @@ -14109,7 +14628,7 @@ snapshots: fs-extra: 11.2.0 magic-string: 0.30.2 rollup: 3.28.0 - vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -14455,14 +14974,14 @@ snapshots: '@types/express': 4.17.21 file-system-cache: 2.3.0 - '@storybook/vue3-vite@7.6.3(@vue/compiler-core@3.4.27)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))': + '@storybook/vue3-vite@7.6.3(@vue/compiler-core@3.4.27)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5))': dependencies: - '@storybook/builder-vite': 7.6.3(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + '@storybook/builder-vite': 7.6.3(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) '@storybook/core-server': 7.6.3 '@storybook/vue3': 7.6.3(@vue/compiler-core@3.4.27)(vue@3.4.27(typescript@5.4.5)) - '@vitejs/plugin-vue': 4.2.3(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5)) + '@vitejs/plugin-vue': 4.2.3(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5)) magic-string: 0.30.2 - vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue-docgen-api: 4.75.1(vue@3.4.27(typescript@5.4.5)) transitivePeerDependencies: - '@preact/preset-vite' @@ -14507,7 +15026,7 @@ snapshots: dependencies: tailwindcss: 3.3.0(postcss@8.4.21) - '@tailwindcss/container-queries@0.1.0(tailwindcss@3.3.0(postcss@8.4.21))': + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.3.0(postcss@8.4.21))': dependencies: tailwindcss: 3.3.0(postcss@8.4.21) @@ -14910,6 +15429,14 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@18.19.41': + dependencies: + undici-types: 5.26.5 + + '@types/node@20.14.11': + dependencies: + undici-types: 5.26.5 + '@types/node@20.14.2': dependencies: undici-types: 5.26.5 @@ -15221,24 +15748,24 @@ snapshots: '@uppy/utils': 5.9.0 nanoid: 4.0.0 - '@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3))': + '@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3))': dependencies: '@babel/core': 7.23.5 '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) '@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.23.5) - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue: 3.4.27(typescript@5.3.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@4.2.3(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.4.5))': + '@vitejs/plugin-vue@4.2.3(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5))': dependencies: - vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue: 3.4.27(typescript@5.4.5) - '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3))': + '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3))': dependencies: - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue: 3.4.27(typescript@5.3.3) '@vitest/expect@0.34.1': @@ -15272,7 +15799,7 @@ snapshots: pathe: 1.1.1 picocolors: 1.0.0 sirv: 2.0.3 - vitest: 0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vitest: 0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) '@vitest/utils@0.34.1': dependencies: @@ -15365,14 +15892,14 @@ snapshots: '@vue/devtools-api@6.6.1': {} - '@vue/devtools-core@7.2.1(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3))': + '@vue/devtools-core@7.2.1(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3))': dependencies: '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.3.3)) '@vue/devtools-shared': 7.2.1 mitt: 3.0.1 nanoid: 3.3.7 pathe: 1.1.2 - vite-hot-client: 0.2.3(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + vite-hot-client: 0.2.3(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) transitivePeerDependencies: - vite - vue @@ -15633,9 +16160,9 @@ snapshots: acorn: 8.8.2 acorn-walk: 8.2.0 - acorn-import-assertions@1.9.0(acorn@8.11.3): + acorn-import-assertions@1.9.0(acorn@8.12.1): dependencies: - acorn: 8.11.3 + acorn: 8.12.1 acorn-jsx@5.3.2(acorn@8.8.2): dependencies: @@ -15651,6 +16178,8 @@ snapshots: acorn@8.11.3: {} + acorn@8.12.1: {} + acorn@8.8.2: {} address@1.2.2: {} @@ -15690,12 +16219,12 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.13.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-align@3.0.1: dependencies: @@ -15890,11 +16419,11 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.9): dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/compat-data': 7.24.9 + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -15908,10 +16437,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.9): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color @@ -15931,10 +16460,10 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.9): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) transitivePeerDependencies: - supports-color @@ -16064,6 +16593,13 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.0) + browserslist@4.23.2: + dependencies: + caniuse-lite: 1.0.30001642 + electron-to-chromium: 1.4.832 + node-releases: 2.0.17 + update-browserslist-db: 1.1.0(browserslist@4.23.2) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -16173,6 +16709,8 @@ snapshots: caniuse-lite@1.0.30001620: {} + caniuse-lite@1.0.30001642: {} + caseless@0.12.0: {} chai@4.3.7: @@ -16226,7 +16764,7 @@ snapshots: chownr@2.0.0: {} - chrome-trace-event@1.0.3: {} + chrome-trace-event@1.0.4: {} ci-info@3.4.0: {} @@ -16444,7 +16982,7 @@ snapshots: core-js-compat@3.37.1: dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 core-util-is@1.0.2: {} @@ -16641,6 +17179,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.5: + dependencies: + ms: 2.1.2 + decamelize-keys@1.1.0: dependencies: decamelize: 1.2.0 @@ -16872,7 +17414,7 @@ snapshots: ejs@3.1.10: dependencies: - jake: 10.9.1 + jake: 10.9.2 ejs@3.1.8: dependencies: @@ -16884,6 +17426,8 @@ snapshots: electron-to-chromium@1.4.776: {} + electron-to-chromium@1.4.832: {} + element-resize-detector@1.2.4: dependencies: batch-processor: 1.0.0 @@ -16906,7 +17450,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.16.1: + enhanced-resolve@5.17.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -17009,7 +17553,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -17049,7 +17593,7 @@ snapshots: es-module-lexer@0.9.3: {} - es-module-lexer@1.5.3: {} + es-module-lexer@1.5.4: {} es-object-atoms@1.0.0: dependencies: @@ -17585,6 +18129,8 @@ snapshots: fast-safe-stringify@2.1.1: {} + fast-uri@3.0.1: {} + fastq@1.15.0: dependencies: reusify: 1.0.4 @@ -18590,7 +19136,7 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 - jake@10.9.1: + jake@10.9.2: dependencies: async: 3.2.5 chalk: 4.1.2 @@ -18631,13 +19177,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 20.14.2 + '@types/node': 18.19.41 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.11 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -18836,7 +19382,7 @@ snapshots: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 - tslib: 2.6.2 + tslib: 2.6.3 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 @@ -19300,7 +19846,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.3.0 + sax: 1.4.1 optional: true negotiator@0.6.3: {} @@ -19351,6 +19897,8 @@ snapshots: node-releases@2.0.14: {} + node-releases@2.0.17: {} + nopt@6.0.0: dependencies: abbrev: 1.1.1 @@ -19402,6 +19950,8 @@ snapshots: object-inspect@1.13.1: {} + object-inspect@1.13.2: {} + object-is@1.1.5: dependencies: call-bind: 1.0.5 @@ -20552,11 +21102,11 @@ snapshots: rollup-plugin-terser@7.0.2(rollup@2.79.1): dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.31.0 + terser: 5.31.3 rollup@2.79.1: optionalDependencies: @@ -20657,7 +21207,7 @@ snapshots: immutable: 4.1.0 source-map-js: 1.0.2 - sax@1.3.0: + sax@1.4.1: optional: true saxes@6.0.0: @@ -20807,7 +21357,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 siginfo@2.0.0: {} @@ -21245,7 +21795,7 @@ snapshots: jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.0 + terser: 5.31.3 webpack: 5.89.0(esbuild@0.18.20) optionalDependencies: esbuild: 0.18.20 @@ -21263,6 +21813,14 @@ snapshots: acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 + optional: true + + terser@5.31.3: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 test-exclude@6.0.0: dependencies: @@ -21367,6 +21925,8 @@ snapshots: tslib@2.6.2: {} + tslib@2.6.3: {} + tsutils@3.21.0(typescript@5.3.3): dependencies: tslib: 1.14.1 @@ -21650,6 +22210,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.0(browserslist@4.23.2): + dependencies: + browserslist: 4.23.2 + escalade: 3.1.2 + picocolors: 1.0.1 + update-notifier@6.0.2: dependencies: boxen: 7.1.1 @@ -21736,18 +22302,18 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite-hot-client@0.2.3(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-hot-client@0.2.3(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) - vite-node@0.34.1(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vite-node@0.34.1(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: cac: 6.7.14 debug: 4.3.4(supports-color@8.1.1) mlly: 1.4.0 pathe: 1.1.2 picocolors: 1.0.0 - vite: 4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - '@types/node' - less @@ -21757,7 +22323,7 @@ snapshots: - supports-color - terser - vite-plugin-dts@3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-dts@3.9.1(@types/node@18.13.0)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: '@microsoft/api-extractor': 7.43.0(@types/node@18.13.0) '@rollup/pluginutils': 5.1.0(rollup@4.17.2) @@ -21768,16 +22334,16 @@ snapshots: typescript: 5.4.5 vue-tsc: 1.8.27(typescript@5.4.5) optionalDependencies: - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-dts@3.9.1(@types/node@20.14.2)(rollup@2.79.1)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-dts@3.9.1(@types/node@20.14.11)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.14.2) - '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@microsoft/api-extractor': 7.43.0(@types/node@20.14.11) + '@rollup/pluginutils': 5.1.0(rollup@4.17.2) '@vue/language-core': 1.8.27(typescript@5.4.5) debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 @@ -21785,16 +22351,16 @@ snapshots: typescript: 5.4.5 vue-tsc: 1.8.27(typescript@5.4.5) optionalDependencies: - vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-dts@3.9.1(@types/node@20.14.2)(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-dts@3.9.1(@types/node@20.14.2)(rollup@2.79.1)(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: '@microsoft/api-extractor': 7.43.0(@types/node@20.14.2) - '@rollup/pluginutils': 5.1.0(rollup@4.17.2) + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) '@vue/language-core': 1.8.27(typescript@5.4.5) debug: 4.3.4(supports-color@8.1.1) kolorist: 1.8.0 @@ -21802,21 +22368,21 @@ snapshots: typescript: 5.4.5 vue-tsc: 1.8.27(typescript@5.4.5) optionalDependencies: - vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-externals@0.6.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-externals@0.6.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: acorn: 8.8.2 es-module-lexer: 0.4.1 fs-extra: 10.1.0 magic-string: 0.25.9 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) - vite-plugin-html@3.2.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-html@3.2.2(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -21830,9 +22396,9 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) - vite-plugin-inspect@0.8.4(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-inspect@0.8.4(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: '@antfu/utils': 0.7.7 '@rollup/pluginutils': 5.1.0(rollup@4.17.2) @@ -21843,47 +22409,47 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.0.1 sirv: 2.0.4 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - rollup - supports-color - vite-plugin-pwa@0.20.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): + vite-plugin-pwa@0.20.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): dependencies: debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) workbox-build: 7.0.0(@types/babel__core@7.20.5) workbox-window: 7.0.0 transitivePeerDependencies: - supports-color - vite-plugin-static-copy@1.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-static-copy@1.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: chokidar: 3.5.3 fast-glob: 3.3.2 fs-extra: 11.2.0 picocolors: 1.0.0 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) - vite-plugin-vue-devtools@7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3)): + vite-plugin-vue-devtools@7.2.1(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)): dependencies: - '@vue/devtools-core': 7.2.1(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0))(vue@3.4.27(typescript@5.3.3)) + '@vue/devtools-core': 7.2.1(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) '@vue/devtools-kit': 7.2.1(vue@3.4.27(typescript@5.3.3)) '@vue/devtools-shared': 7.2.1 execa: 8.0.1 sirv: 2.0.4 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) - vite-plugin-inspect: 0.8.4(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) - vite-plugin-vue-inspector: 5.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) + vite-plugin-inspect: 0.8.4(rollup@4.17.2)(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) + vite-plugin-vue-inspector: 5.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0)): + vite-plugin-vue-inspector@5.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)): dependencies: '@babel/core': 7.24.5 '@babel/plugin-proposal-decorators': 7.23.7(@babel/core@7.24.5) @@ -21894,11 +22460,11 @@ snapshots: '@vue/compiler-dom': 3.4.27 kolorist: 1.8.0 magic-string: 0.30.7 - vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) transitivePeerDependencies: - supports-color - vite@4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vite@4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: esbuild: 0.17.19 postcss: 8.4.31 @@ -21909,7 +22475,7 @@ snapshots: fsevents: 2.3.2 less: 4.2.0 sass: 1.60.0 - terser: 5.31.0 + terser: 5.31.3 vite@4.2.3(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): dependencies: @@ -21924,7 +22490,7 @@ snapshots: sass: 1.60.0 terser: 5.31.0 - vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -21934,9 +22500,21 @@ snapshots: fsevents: 2.3.3 less: 4.2.0 sass: 1.60.0 - terser: 5.31.0 + terser: 5.31.3 + + vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + '@types/node': 20.14.11 + fsevents: 2.3.3 + less: 4.2.0 + sass: 1.60.0 + terser: 5.31.3 - vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vite@5.2.11(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -21946,9 +22524,10 @@ snapshots: fsevents: 2.3.3 less: 4.2.0 sass: 1.60.0 - terser: 5.31.0 + terser: 5.31.3 + optional: true - vitest@0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vitest@0.34.1(@vitest/ui@0.34.1)(jsdom@20.0.3)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: '@types/chai': 4.3.5 '@types/chai-subset': 1.3.3 @@ -21971,8 +22550,8 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.5.0 tinypool: 0.7.0 - vite: 4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) - vite-node: 0.34.1(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + vite: 4.2.3(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) + vite-node: 0.34.1(@types/node@18.19.34)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) why-is-node-running: 2.2.2 optionalDependencies: '@vitest/ui': 0.34.1(vitest@0.34.1) @@ -22178,12 +22757,12 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.1 - es-module-lexer: 1.5.3 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -22309,15 +22888,15 @@ snapshots: workbox-build@7.0.0(@types/babel__core@7.20.5): dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.13.0) - '@babel/core': 7.24.5 - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/runtime': 7.24.5 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.5)(@types/babel__core@7.20.5)(rollup@2.79.1) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.24.9 + '@babel/preset-env': 7.24.8(@babel/core@7.24.9) + '@babel/runtime': 7.24.8 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.9)(@types/babel__core@7.20.5)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.13.0 + ajv: 8.17.1 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 From 9c4c32c364cbe34c8146719def25b42fe2c30298 Mon Sep 17 00:00:00 2001 From: Ryan Wang <i@ryanc.cc> Date: Sun, 21 Jul 2024 20:33:53 +0800 Subject: [PATCH 14/16] Update renovate.json Signed-off-by: Ryan Wang <i@ryanc.cc> --- renovate.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 93afd4a437..725664ed0c 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,7 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended" - ] + "extends": ["config:recommended"], + "prCreation": "not-pending", + "addLabels": ["dependencies"], + "automerge": false } From ed41bb2c330a9e343e58c370ca204d6aeef32e3d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 21 Jul 2024 20:38:49 +0800 Subject: [PATCH 15/16] chore(deps): update dependency @vitejs/plugin-vue to v5.0.5 (#10) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ui/pnpm-lock.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 5867661f4d..26f91140fc 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -248,7 +248,7 @@ importers: version: 0.7.39 '@vitejs/plugin-vue': specifier: ^5.0.4 - version: 5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) + version: 5.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) '@vitejs/plugin-vue-jsx': specifier: ^3.1.0 version: 3.1.0(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3)) @@ -4384,15 +4384,15 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@4.2.3': - resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} + '@vitejs/plugin-vue@4.6.2': + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 - '@vitejs/plugin-vue@5.0.4': - resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + '@vitejs/plugin-vue@5.0.5': + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 @@ -14979,7 +14979,7 @@ snapshots: '@storybook/builder-vite': 7.6.3(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3)) '@storybook/core-server': 7.6.3 '@storybook/vue3': 7.6.3(@vue/compiler-core@3.4.27)(vue@3.4.27(typescript@5.4.5)) - '@vitejs/plugin-vue': 4.2.3(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5)) + '@vitejs/plugin-vue': 4.6.2(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5)) magic-string: 0.30.2 vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue-docgen-api: 4.75.1(vue@3.4.27(typescript@5.4.5)) @@ -15758,12 +15758,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@4.2.3(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5))': + '@vitejs/plugin-vue@4.6.2(vite@5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.4.5))': dependencies: vite: 5.2.11(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue: 3.4.27(typescript@5.4.5) - '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3))': + '@vitejs/plugin-vue@5.0.5(vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3))(vue@3.4.27(typescript@5.3.3))': dependencies: vite: 5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) vue: 3.4.27(typescript@5.3.3) From 5c07e3176f71f9595a9ea12e64f8b4f137391757 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 06:16:07 +0000 Subject: [PATCH 16/16] chore(deps): replace dependency npm-run-all with npm-run-all2 ^5.0.0 --- ui/package.json | 2 +- ui/pnpm-lock.yaml | 160 ++++++++-------------------------------------- 2 files changed, 29 insertions(+), 133 deletions(-) diff --git a/ui/package.json b/ui/package.json index a3022ddc1b..c6fec6b322 100644 --- a/ui/package.json +++ b/ui/package.json @@ -138,7 +138,7 @@ "husky": "^8.0.3", "jsdom": "^20.0.3", "lint-staged": "^13.2.2", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^5.0.0", "postcss": "^8.4.21", "postcss-viewport-height-correction": "^1.1.1", "prettier": "^2.8.8", diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 26f91140fc..c5e6af4014 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -297,9 +297,9 @@ importers: lint-staged: specifier: ^13.2.2 version: 13.2.2(enquirer@2.3.6) - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 + npm-run-all2: + specifier: ^5.0.0 + version: 5.0.2 postcss: specifier: ^8.4.21 version: 8.4.21 @@ -621,7 +621,7 @@ importers: dependencies: vite: specifier: ^4.0.0 || ^5.0.0 - version: 4.2.3(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0) + version: 4.2.3(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3) devDependencies: '@halo-dev/api-client': specifier: workspace:* @@ -4137,9 +4137,6 @@ packages: '@types/node@18.19.34': resolution: {integrity: sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g==} - '@types/node@18.19.41': - resolution: {integrity: sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg==} - '@types/node@20.14.11': resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} @@ -5447,10 +5444,6 @@ packages: cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -7385,9 +7378,6 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -7528,10 +7518,6 @@ packages: enquirer: optional: true - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} @@ -7979,9 +7965,6 @@ packages: resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -8047,9 +8030,9 @@ packages: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} - npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} + npm-run-all2@5.0.2: + resolution: {integrity: sha512-S2G6FWZ3pNWAAKm2PFSOtEAG/N+XO/kz3+9l6V91IY+Y3XFSt7Lp7DV92KCgEboEW0hRTu0vFaMe4zXDZYaOyA==} + engines: {node: '>= 10'} hasBin: true npm-run-path@4.0.1: @@ -8251,10 +8234,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -8294,10 +8273,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -8319,10 +8294,6 @@ packages: path-to-regexp@3.2.0: resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} - path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -8370,8 +8341,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + pidtree@0.5.0: + resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==} engines: {node: '>=0.10'} hasBin: true @@ -8384,10 +8355,6 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -8877,10 +8844,6 @@ packages: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} - read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} @@ -9500,10 +9463,6 @@ packages: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} - string.prototype.padend@3.1.5: - resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} - engines: {node: '>= 0.4'} - string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -9688,11 +9647,6 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} - engines: {node: '>=10'} - hasBin: true - terser@5.31.3: resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} engines: {node: '>=10'} @@ -10326,8 +10280,8 @@ packages: vue-component-type-helpers@2.0.19: resolution: {integrity: sha512-cN3f1aTxxKo4lzNeQAkVopswuImUrb5Iurll9Gaw5cqpnbTAxtEMM1mgi6ou4X79OCyqYv1U1mzBHJkzmiK82w==} - vue-component-type-helpers@2.0.26: - resolution: {integrity: sha512-sO9qQ8oC520SW6kqlls0iqDak53gsTVSrYylajgjmkt1c0vcgjsGSy1KzlDrbEx8pm02IEYhlUkU5hCYf8rwtg==} + vue-component-type-helpers@2.0.29: + resolution: {integrity: sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==} vue-demi@0.13.11: resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} @@ -12521,13 +12475,13 @@ snapshots: '@babel/template@7.22.5': dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 '@babel/template@7.24.0': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.5 '@babel/types': 7.24.5 @@ -12539,7 +12493,7 @@ snapshots: '@babel/traverse@7.22.5': dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.24.7 '@babel/generator': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 @@ -12569,7 +12523,7 @@ snapshots: '@babel/traverse@7.24.5': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 @@ -15006,7 +14960,7 @@ snapshots: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.4.27(typescript@5.4.5) - vue-component-type-helpers: 2.0.26 + vue-component-type-helpers: 2.0.29 transitivePeerDependencies: - encoding - supports-color @@ -15429,10 +15383,6 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@18.19.41': - dependencies: - undici-types: 5.26.5 - '@types/node@20.14.11': dependencies: undici-types: 5.26.5 @@ -17009,14 +16959,6 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@6.0.5: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -19177,7 +19119,7 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 18.19.41 + '@types/node': 20.14.11 merge-stream: 2.0.0 supports-color: 7.2.0 @@ -19298,8 +19240,6 @@ snapshots: json-buffer@3.0.1: {} - json-parse-better-errors@1.0.2: {} - json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -19459,13 +19399,6 @@ snapshots: optionalDependencies: enquirer: 2.3.6 - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.10 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.10 @@ -19859,8 +19792,6 @@ snapshots: dependencies: type-fest: 2.19.0 - nice-try@1.0.5: {} - no-case@3.0.4: dependencies: lower-case: 2.0.2 @@ -19916,17 +19847,15 @@ snapshots: normalize-url@8.0.0: {} - npm-run-all@4.1.5: + npm-run-all2@5.0.2: dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.5 + ansi-styles: 5.2.0 + cross-spawn: 7.0.3 memorystream: 0.3.1 minimatch: 3.1.2 - pidtree: 0.3.1 - read-pkg: 3.0.0 + pidtree: 0.5.0 + read-pkg: 5.2.0 shell-quote: 1.8.1 - string.prototype.padend: 3.1.5 npm-run-path@4.0.1: dependencies: @@ -20161,14 +20090,9 @@ snapshots: dependencies: callsites: 3.1.0 - parse-json@4.0.0: - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -20202,8 +20126,6 @@ snapshots: path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -20219,10 +20141,6 @@ snapshots: path-to-regexp@3.2.0: {} - path-type@3.0.0: - dependencies: - pify: 3.0.0 - path-type@4.0.0: {} pathe@0.2.0: {} @@ -20259,14 +20177,12 @@ snapshots: picomatch@2.3.1: {} - pidtree@0.3.1: {} + pidtree@0.5.0: {} pidtree@0.6.0: {} pify@2.3.0: {} - pify@3.0.0: {} - pify@4.0.1: {} pinia@2.1.6(typescript@5.3.3)(vue@3.4.27(typescript@5.3.3)): @@ -20832,12 +20748,6 @@ snapshots: read-pkg: 5.2.0 type-fest: 0.8.1 - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.1 @@ -21577,12 +21487,6 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.0.6 - string.prototype.padend@3.1.5: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.3 - string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.5 @@ -21807,14 +21711,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.31.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - terser@5.31.3: dependencies: '@jridgewell/source-map': 0.3.6 @@ -22477,18 +22373,18 @@ snapshots: sass: 1.60.0 terser: 5.31.3 - vite@4.2.3(@types/node@20.14.2)(less@4.2.0)(sass@1.60.0)(terser@5.31.0): + vite@4.2.3(@types/node@20.14.11)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: esbuild: 0.17.19 postcss: 8.4.31 resolve: 1.22.1 rollup: 3.28.0 optionalDependencies: - '@types/node': 20.14.2 + '@types/node': 20.14.11 fsevents: 2.3.2 less: 4.2.0 sass: 1.60.0 - terser: 5.31.0 + terser: 5.31.3 vite@5.2.11(@types/node@18.13.0)(less@4.2.0)(sass@1.60.0)(terser@5.31.3): dependencies: @@ -22568,7 +22464,7 @@ snapshots: vue-component-type-helpers@2.0.19: {} - vue-component-type-helpers@2.0.26: {} + vue-component-type-helpers@2.0.29: {} vue-demi@0.13.11(vue@3.4.27(typescript@5.3.3)): dependencies: